summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-04-26 23:54:48 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-04-26 23:54:48 -0400
commit8425c8203394c436645828fcd11976078d04a1f7 (patch)
treeeee84dec13ed7ea58f4167ce174de2104ad708fa /src/SMAPI/Framework
parent6a43171e9242e53e299b38dd88370d7070d9186e (diff)
downloadSMAPI-8425c8203394c436645828fcd11976078d04a1f7.tar.gz
SMAPI-8425c8203394c436645828fcd11976078d04a1f7.tar.bz2
SMAPI-8425c8203394c436645828fcd11976078d04a1f7.zip
fix locale change for legacy IAssetEditor/Loader implementations
Diffstat (limited to 'src/SMAPI/Framework')
-rw-r--r--src/SMAPI/Framework/ContentCoordinator.cs51
1 files changed, 22 insertions, 29 deletions
diff --git a/src/SMAPI/Framework/ContentCoordinator.cs b/src/SMAPI/Framework/ContentCoordinator.cs
index 93b6d9f3..84fff250 100644
--- a/src/SMAPI/Framework/ContentCoordinator.cs
+++ b/src/SMAPI/Framework/ContentCoordinator.cs
@@ -691,12 +691,9 @@ namespace StardewModdingAPI.Framework
/// <param name="asset">The asset info.</param>
private IAssetInfo GetLegacyAssetInfo(IAssetInfo asset)
{
- if (!this.TryGetLegacyAssetName(asset.Name, out IAssetName legacyName))
- return asset;
-
return new AssetInfo(
- locale: null,
- assetName: legacyName,
+ locale: this.GetLegacyLocale(asset),
+ assetName: this.GetLegacyAssetName(asset.Name),
type: asset.DataType,
getNormalizedPath: this.MainContentManager.AssertAndNormalizeAssetName
);
@@ -706,49 +703,45 @@ namespace StardewModdingAPI.Framework
/// <param name="asset">The asset data.</param>
private IAssetData GetLegacyAssetData(IAssetData asset)
{
- if (!this.TryGetLegacyAssetName(asset.Name, out IAssetName legacyName))
- return asset;
-
- return asset.Name.LocaleCode == null
- ? asset
- : new AssetDataForObject(
- locale: null,
- assetName: legacyName,
- data: asset.Data,
- getNormalizedPath: this.MainContentManager.AssertAndNormalizeAssetName,
- reflection: this.Reflection,
- onDataReplaced: asset.ReplaceWith
- );
+ return new AssetDataForObject(
+ locale: this.GetLegacyLocale(asset),
+ assetName: this.GetLegacyAssetName(asset.Name),
+ data: asset.Data,
+ getNormalizedPath: this.MainContentManager.AssertAndNormalizeAssetName,
+ reflection: this.Reflection,
+ onDataReplaced: asset.ReplaceWith
+ );
+ }
+
+ /// <summary>Get the <see cref="IAssetInfo.Locale"/> value compatible with legacy <see cref="IAssetLoader"/> and <see cref="IAssetEditor"/> instances, which expect the locale to default to the current game locale or an empty string.</summary>
+ /// <param name="asset">The non-legacy asset info to map.</param>
+ private string GetLegacyLocale(IAssetInfo asset)
+ {
+ return asset.Locale ?? this.GetLocale();
}
/// <summary>Get an asset name compatible with legacy <see cref="IAssetLoader"/> and <see cref="IAssetEditor"/> instances, which always expect the base name.</summary>
/// <param name="asset">The asset name to map.</param>
- /// <param name="newAsset">The legacy asset name (or the <paramref name="asset"/> if no change is needed).</param>
- /// <returns>Returns whether any change is needed for legacy compatibility.</returns>
- private bool TryGetLegacyAssetName(IAssetName asset, out IAssetName newAsset)
+ /// <returns>Returns the legacy asset name if needed, or the <paramref name="asset"/> if no change is needed.</returns>
+ private IAssetName GetLegacyAssetName(IAssetName asset)
{
// strip _international suffix
const string internationalSuffix = "_international";
if (asset.Name.EndsWith(internationalSuffix))
{
- newAsset = new AssetName(
+ return new AssetName(
baseName: asset.Name[..^internationalSuffix.Length],
localeCode: null,
languageCode: null
);
- return true;
}
// else strip locale
if (asset.LocaleCode != null)
- {
- newAsset = new AssetName(asset.BaseName, null, null);
- return true;
- }
+ return new AssetName(asset.BaseName, null, null);
// else no change needed
- newAsset = asset;
- return false;
+ return asset;
}
}
}