summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-06-16 14:12:54 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-09-14 18:04:50 -0400
commit059a59a7bcb560b938f0baf54575719e57962e0c (patch)
tree3549a8c9dfb1863af8be74f794f76d3c8c471eb7 /src
parent7ecbbb1b704e5ce8d89c35f46524c1bd21383aae (diff)
downloadSMAPI-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')
-rw-r--r--src/SMAPI/Constants.cs3
-rw-r--r--src/SMAPI/Framework/ContentCoordinator.cs9
-rw-r--r--src/SMAPI/Framework/ContentManagers/GameContentManager.cs2
-rw-r--r--src/SMAPI/Framework/ContentManagers/ModContentManager.cs8
-rw-r--r--src/SMAPI/Framework/ModHelpers/ContentHelper.cs2
5 files changed, 14 insertions, 10 deletions
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index f58722a0..e02c9265 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -97,6 +97,9 @@ namespace StardewModdingAPI
/// <summary>The game's assembly name.</summary>
internal static string GameAssemblyName => Constants.Platform == Platform.Windows ? "Stardew Valley" : "StardewValley";
+ /// <summary>The language code for non-translated mod assets.</summary>
+ internal static LocalizedContentManager.LanguageCode DefaultLanguage { get; } = LocalizedContentManager.LanguageCode.en;
+
/*********
** Internal methods
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}'.");