summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/ContentManagers
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-12-26 01:28:00 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-12-26 01:28:00 -0500
commit2406380495cc5176d3cbd2309e6f17080389f9af (patch)
tree1a1e71d64010c3a68383ea7d9a6b22f9ffb4aa39 /src/SMAPI/Framework/ContentManagers
parent9215f89825734f447b8637851569de9ffa08b661 (diff)
downloadSMAPI-2406380495cc5176d3cbd2309e6f17080389f9af.tar.gz
SMAPI-2406380495cc5176d3cbd2309e6f17080389f9af.tar.bz2
SMAPI-2406380495cc5176d3cbd2309e6f17080389f9af.zip
fix SMAPI using a cached translation when the game asks for an untranslated asset
This mainly affects community center bundles in Stardew Valley 1.5,
Diffstat (limited to 'src/SMAPI/Framework/ContentManagers')
-rw-r--r--src/SMAPI/Framework/ContentManagers/BaseContentManager.cs8
-rw-r--r--src/SMAPI/Framework/ContentManagers/GameContentManager.cs9
-rw-r--r--src/SMAPI/Framework/ContentManagers/IContentManager.cs3
-rw-r--r--src/SMAPI/Framework/ContentManagers/ModContentManager.cs3
4 files changed, 14 insertions, 9 deletions
diff --git a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs
index 6bc3a505..92264f8c 100644
--- a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs
@@ -169,10 +169,11 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Get whether the content manager has already loaded and cached the given asset.</summary>
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
- public bool IsLoaded(string assetName)
+ /// <param name="language">The language.</param>
+ public bool IsLoaded(string assetName, LanguageCode language)
{
assetName = this.Cache.NormalizeKey(assetName);
- return this.IsNormalizedKeyLoaded(assetName);
+ return this.IsNormalizedKeyLoaded(assetName, language);
}
/// <summary>Get the cached asset keys.</summary>
@@ -315,7 +316,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Get whether an asset has already been loaded.</summary>
/// <param name="normalizedAssetName">The normalized asset name.</param>
- protected abstract bool IsNormalizedKeyLoaded(string normalizedAssetName);
+ /// <param name="language">The language to check.</param>
+ protected abstract bool IsNormalizedKeyLoaded(string normalizedAssetName, LanguageCode language);
/// <summary>Get the locale codes (like <c>ja-JP</c>) used in asset keys.</summary>
private IDictionary<LanguageCode, string> GetKeyLocales()
diff --git a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs
index 83a63986..ad8f2ef1 100644
--- a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs
@@ -78,7 +78,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
return this.Load<T>(newAssetName, newLanguage, useCache);
// get from cache
- if (useCache && this.IsLoaded(assetName))
+ if (useCache && this.IsLoaded(assetName, language))
return this.RawLoad<T>(assetName, language, useCache: true);
// get managed asset
@@ -151,11 +151,12 @@ namespace StardewModdingAPI.Framework.ContentManagers
*********/
/// <summary>Get whether an asset has already been loaded.</summary>
/// <param name="normalizedAssetName">The normalized asset name.</param>
- protected override bool IsNormalizedKeyLoaded(string normalizedAssetName)
+ /// <param name="language">The language to check.</param>
+ protected override bool IsNormalizedKeyLoaded(string normalizedAssetName, LanguageCode language)
{
string cachedKey = null;
bool localized =
- this.Language != LocalizedContentManager.LanguageCode.en
+ language != LocalizedContentManager.LanguageCode.en
&& !this.Coordinator.IsManagedAssetKey(normalizedAssetName)
&& this.LocalizedAssetNames.TryGetValue(normalizedAssetName, out cachedKey);
@@ -214,7 +215,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
private T RawLoad<T>(string assetName, LanguageCode language, bool useCache)
{
// use cached key
- if (this.LocalizedAssetNames.TryGetValue(assetName, out string cachedKey))
+ if (language == this.Language && this.LocalizedAssetNames.TryGetValue(assetName, out string cachedKey))
return base.RawLoad<T>(cachedKey, useCache);
// try translated key
diff --git a/src/SMAPI/Framework/ContentManagers/IContentManager.cs b/src/SMAPI/Framework/ContentManagers/IContentManager.cs
index 8da9a777..0e7edd8f 100644
--- a/src/SMAPI/Framework/ContentManagers/IContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/IContentManager.cs
@@ -58,7 +58,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Get whether the content manager has already loaded and cached the given asset.</summary>
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
- bool IsLoaded(string assetName);
+ /// <param name="language">The language.</param>
+ bool IsLoaded(string assetName, LocalizedContentManager.LanguageCode language);
/// <summary>Get the cached asset keys.</summary>
IEnumerable<string> GetAssetKeys();
diff --git a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
index 127705ea..753ec188 100644
--- a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
@@ -211,7 +211,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
*********/
/// <summary>Get whether an asset has already been loaded.</summary>
/// <param name="normalizedAssetName">The normalized asset name.</param>
- protected override bool IsNormalizedKeyLoaded(string normalizedAssetName)
+ /// <param name="language">The language to check.</param>
+ protected override bool IsNormalizedKeyLoaded(string normalizedAssetName, LanguageCode language)
{
return this.Cache.ContainsKey(normalizedAssetName);
}