diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2019-06-16 14:12:54 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2019-09-14 18:04:50 -0400 |
commit | 059a59a7bcb560b938f0baf54575719e57962e0c (patch) | |
tree | 3549a8c9dfb1863af8be74f794f76d3c8c471eb7 /src/SMAPI/Framework | |
parent | 7ecbbb1b704e5ce8d89c35f46524c1bd21383aae (diff) | |
download | SMAPI-059a59a7bcb560b938f0baf54575719e57962e0c.tar.gz SMAPI-059a59a7bcb560b938f0baf54575719e57962e0c.tar.bz2 SMAPI-059a59a7bcb560b938f0baf54575719e57962e0c.zip |
fix error when loading a mod asset through a translated content manager (#647)
Diffstat (limited to 'src/SMAPI/Framework')
4 files changed, 11 insertions, 10 deletions
diff --git a/src/SMAPI/Framework/ContentCoordinator.cs b/src/SMAPI/Framework/ContentCoordinator.cs index 2dfe1f1c..39bebdd1 100644 --- a/src/SMAPI/Framework/ContentCoordinator.cs +++ b/src/SMAPI/Framework/ContentCoordinator.cs @@ -42,6 +42,9 @@ namespace StardewModdingAPI.Framework /// <summary>The loaded content managers (including the <see cref="MainContentManager"/>).</summary> private readonly IList<IContentManager> ContentManagers = new List<IContentManager>(); + /// <summary>The language code for language-agnostic mod assets.</summary> + private readonly LocalizedContentManager.LanguageCode DefaultLanguage = Constants.DefaultLanguage; + /// <summary>Whether the content coordinator has been disposed.</summary> private bool IsDisposed; @@ -172,11 +175,9 @@ namespace StardewModdingAPI.Framework /// <summary>Get a copy of an asset from a mod folder.</summary> /// <typeparam name="T">The asset type.</typeparam> - /// <param name="internalKey">The internal asset key.</param> /// <param name="contentManagerID">The unique name for the content manager which should load this asset.</param> /// <param name="relativePath">The internal SMAPI asset key.</param> - /// <param name="language">The language code for which to load content.</param> - public T LoadManagedAsset<T>(string internalKey, string contentManagerID, string relativePath, LocalizedContentManager.LanguageCode language) + public T LoadManagedAsset<T>(string contentManagerID, string relativePath) { // get content manager IContentManager contentManager = this.ContentManagers.FirstOrDefault(p => p.IsNamespaced && p.Name == contentManagerID); @@ -184,7 +185,7 @@ namespace StardewModdingAPI.Framework throw new InvalidOperationException($"The '{contentManagerID}' prefix isn't handled by any mod."); // get fresh asset - return contentManager.Load<T>(relativePath, language, useCache: false); + return contentManager.Load<T>(relativePath, this.DefaultLanguage, useCache: false); } /// <summary>Purge assets from the cache that match one of the interceptors.</summary> diff --git a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs index ecabcaca..488ec245 100644 --- a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs @@ -82,7 +82,7 @@ namespace StardewModdingAPI.Framework.ContentManagers // get managed asset if (this.Coordinator.TryParseManagedAssetKey(assetName, out string contentManagerID, out string relativePath)) { - T managedAsset = this.Coordinator.LoadManagedAsset<T>(assetName, contentManagerID, relativePath, language); + T managedAsset = this.Coordinator.LoadManagedAsset<T>(contentManagerID, relativePath); if (useCache) this.Inject(assetName, managedAsset, language); return managedAsset; diff --git a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs index 1d015138..2c73e861 100644 --- a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs @@ -30,7 +30,7 @@ namespace StardewModdingAPI.Framework.ContentManagers private readonly IContentManager GameContentManager; /// <summary>The language code for language-agnostic mod assets.</summary> - private const LanguageCode NoLanguage = LanguageCode.en; + private readonly LanguageCode DefaultLanguage = Constants.DefaultLanguage; /********* @@ -59,7 +59,7 @@ namespace StardewModdingAPI.Framework.ContentManagers /// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param> public override T Load<T>(string assetName) { - return this.Load<T>(assetName, ModContentManager.NoLanguage, useCache: false); + return this.Load<T>(assetName, this.DefaultLanguage, useCache: false); } /// <summary>Load an asset that has been processed by the content pipeline.</summary> @@ -90,8 +90,8 @@ namespace StardewModdingAPI.Framework.ContentManagers // disable language handling // Mod files don't support automatic translation logic, so this should never happen. - if (language != ModContentManager.NoLanguage) - throw new InvalidOperationException("Caching is not supported by the mod content manager."); + if (language != this.DefaultLanguage) + throw new InvalidOperationException("Localised assets aren't supported by the mod content manager."); // resolve managed asset key { diff --git a/src/SMAPI/Framework/ModHelpers/ContentHelper.cs b/src/SMAPI/Framework/ModHelpers/ContentHelper.cs index 0be9aea5..15b164b1 100644 --- a/src/SMAPI/Framework/ModHelpers/ContentHelper.cs +++ b/src/SMAPI/Framework/ModHelpers/ContentHelper.cs @@ -94,7 +94,7 @@ namespace StardewModdingAPI.Framework.ModHelpers return this.GameContentManager.Load<T>(key, this.CurrentLocaleConstant, useCache: false); case ContentSource.ModFolder: - return this.ModContentManager.Load<T>(key, this.CurrentLocaleConstant, useCache: false); + return this.ModContentManager.Load<T>(key, Constants.DefaultLanguage, useCache: false); default: throw new SContentLoadException($"{this.ModName} failed loading content asset '{key}' from {source}: unknown content source '{source}'."); |