From d4371eb5a507e7415a57f0a175ed7093a562dfb4 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 9 May 2026 23:41:39 -0400 Subject: [PATCH] rename IContentManager to avoid ambiguity with new base-game interface --- src/SMAPI/Framework/ContentCoordinator.cs | 18 +++++++++--------- .../ContentManagers/BaseContentManager.cs | 2 +- ...ntentManager.cs => ISmapiContentManager.cs} | 4 ++-- .../ContentManagers/ModContentManager.cs | 4 ++-- .../Framework/ModHelpers/GameContentHelper.cs | 4 ++-- .../Framework/ModHelpers/ModContentHelper.cs | 2 +- src/SMAPI/Framework/SCore.cs | 2 +- src/SMAPI/Metadata/CoreAssetPropagator.cs | 6 +++--- 8 files changed, 21 insertions(+), 21 deletions(-) rename src/SMAPI/Framework/ContentManagers/{IContentManager.cs => ISmapiContentManager.cs} (95%) diff --git a/src/SMAPI/Framework/ContentCoordinator.cs b/src/SMAPI/Framework/ContentCoordinator.cs index 15ac93f2..d88dc4bb 100644 --- a/src/SMAPI/Framework/ContentCoordinator.cs +++ b/src/SMAPI/Framework/ContentCoordinator.cs @@ -60,7 +60,7 @@ internal class ContentCoordinator : IDisposable private readonly Func RequestAssetOperations; /// The loaded content managers (including the ). - private readonly List ContentManagers = []; + private readonly List ContentManagers = []; /// Whether the content coordinator has been disposed. private bool IsDisposed; @@ -188,7 +188,7 @@ internal class ContentCoordinator : IDisposable /// The mod display name to show in errors. /// The root directory to search for content (or null for the default). /// The game content manager used for map tilesheets not provided by the mod. - public ModContentManager CreateModContentManager(string name, string modName, string rootDirectory, IContentManager gameContentManager) + public ModContentManager CreateModContentManager(string name, string modName, string rootDirectory, ISmapiContentManager gameContentManager) { return this.ContentManagerLock.InWriteLock(() => { @@ -334,7 +334,7 @@ internal class ContentCoordinator : IDisposable where T : notnull { // get content manager - IContentManager? contentManager = this.ContentManagerLock.InReadLock(() => + ISmapiContentManager? contentManager = this.ContentManagerLock.InReadLock(() => this.ContentManagers.FirstOrDefault(p => p.IsNamespaced && p.Name == contentManagerId) ); if (contentManager == null) @@ -352,7 +352,7 @@ internal class ContentCoordinator : IDisposable where T : notnull { // get content manager - IContentManager? contentManager = this.ContentManagerLock.InReadLock(() => + ISmapiContentManager? contentManager = this.ContentManagerLock.InReadLock(() => this.ContentManagers.FirstOrDefault(p => p.IsNamespaced && p.Name == contentManagerId) ); if (contentManager == null) @@ -381,14 +381,14 @@ internal class ContentCoordinator : IDisposable /// Matches the asset keys to invalidate. /// Whether to dispose invalidated assets. This should only be true when they're being invalidated as part of a dispose, to avoid crashing the game. /// Returns the invalidated asset names. - public IEnumerable InvalidateCache(Func predicate, bool dispose = false) + public IEnumerable InvalidateCache(Func predicate, bool dispose = false) { // invalidate cache & track removed assets IDictionary invalidatedAssets = new Dictionary(); this.ContentManagerLock.InReadLock(() => { // cached assets - foreach (IContentManager contentManager in this.ContentManagers) + foreach (ISmapiContentManager contentManager in this.ContentManagers) { foreach ((string key, object asset) in contentManager.GetCachedAssets()) { @@ -498,7 +498,7 @@ internal class ContentCoordinator : IDisposable return this.ContentManagerLock.InReadLock(() => { List values = []; - foreach (IContentManager content in this.ContentManagers.Where(p => !p.IsNamespaced && p.IsLoaded(assetName))) + foreach (ISmapiContentManager content in this.ContentManagers.Where(p => !p.IsNamespaced && p.IsLoaded(assetName))) { object value = content.LoadExact(assetName, useCache: true); values.Add(value); @@ -542,7 +542,7 @@ internal class ContentCoordinator : IDisposable this.IsDisposed = true; this.Monitor.Log("Disposing the content coordinator. Content managers will no longer be usable after this point."); - foreach (IContentManager contentManager in this.ContentManagers) + foreach (ISmapiContentManager contentManager in this.ContentManagers) contentManager.Dispose(); this.ContentManagers.Clear(); this.MainContentManager = null!; // instance no longer usable @@ -556,7 +556,7 @@ internal class ContentCoordinator : IDisposable *********/ /// A callback invoked when a content manager is disposed. /// The content manager being disposed. - private void OnDisposing(IContentManager contentManager) + private void OnDisposing(ISmapiContentManager contentManager) { if (this.IsDisposed) return; diff --git a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs index 37d93275..1f8e2f31 100644 --- a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs @@ -16,7 +16,7 @@ using StardewValley; namespace StardewModdingAPI.Framework.ContentManagers; /// A content manager which handles reading files from a SMAPI mod folder with support for unpacked files. -internal abstract class BaseContentManager : LocalizedContentManager, IContentManager +internal abstract class BaseContentManager : LocalizedContentManager, ISmapiContentManager { /********* ** Fields diff --git a/src/SMAPI/Framework/ContentManagers/IContentManager.cs b/src/SMAPI/Framework/ContentManagers/ISmapiContentManager.cs similarity index 95% rename from src/SMAPI/Framework/ContentManagers/IContentManager.cs rename to src/SMAPI/Framework/ContentManagers/ISmapiContentManager.cs index 9021b4d5..ddcffe84 100644 --- a/src/SMAPI/Framework/ContentManagers/IContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/ISmapiContentManager.cs @@ -6,8 +6,8 @@ using StardewValley; namespace StardewModdingAPI.Framework.ContentManagers; -/// A content manager which handles reading files. -internal interface IContentManager : IDisposable +/// A SMAPI content manager which handles reading files with support for managed mod asset keys. +internal interface ISmapiContentManager : IDisposable { /********* ** Accessors diff --git a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs index 503fd984..aaca1c59 100644 --- a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs @@ -39,7 +39,7 @@ internal sealed class ModContentManager : BaseContentManager private readonly string ModName; /// The game content manager used for map tilesheets not provided by the mod. - private readonly IContentManager GameContentManager; + private readonly ISmapiContentManager GameContentManager; /// A lookup for files within the . private readonly IFileLookup FileLookup; @@ -64,7 +64,7 @@ internal sealed class ModContentManager : BaseContentManager /// Encapsulates SMAPI's JSON file parsing. /// A callback to invoke when the content manager is being disposed. /// A lookup for files within the . - public ModContentManager(string name, IContentManager gameContentManager, IServiceProvider serviceProvider, string modName, string rootDirectory, CultureInfo currentCulture, ContentCoordinator coordinator, IMonitor monitor, Reflector reflection, JsonHelper jsonHelper, Action onDisposing, IFileLookup fileLookup) + public ModContentManager(string name, ISmapiContentManager gameContentManager, IServiceProvider serviceProvider, string modName, string rootDirectory, CultureInfo currentCulture, ContentCoordinator coordinator, IMonitor monitor, Reflector reflection, JsonHelper jsonHelper, Action onDisposing, IFileLookup fileLookup) : base(name, serviceProvider, rootDirectory, currentCulture, coordinator, monitor, reflection, onDisposing, isNamespaced: true) { this.GameContentManager = gameContentManager; diff --git a/src/SMAPI/Framework/ModHelpers/GameContentHelper.cs b/src/SMAPI/Framework/ModHelpers/GameContentHelper.cs index 7aae4770..997a35c3 100644 --- a/src/SMAPI/Framework/ModHelpers/GameContentHelper.cs +++ b/src/SMAPI/Framework/ModHelpers/GameContentHelper.cs @@ -18,7 +18,7 @@ internal class GameContentHelper : BaseHelper, IGameContentHelper private readonly ContentCoordinator ContentCore; /// The underlying game content manager. - private readonly IContentManager GameContentManager; + private readonly ISmapiContentManager GameContentManager; /// The friendly mod name for use in errors. private readonly string ModName; @@ -144,7 +144,7 @@ internal class GameContentHelper : BaseHelper, IGameContentHelper } /// Get the underlying game content manager. - internal IContentManager GetUnderlyingContentManager() + internal ISmapiContentManager GetUnderlyingContentManager() { return this.GameContentManager; } diff --git a/src/SMAPI/Framework/ModHelpers/ModContentHelper.cs b/src/SMAPI/Framework/ModHelpers/ModContentHelper.cs index 975f1f50..956b6433 100644 --- a/src/SMAPI/Framework/ModHelpers/ModContentHelper.cs +++ b/src/SMAPI/Framework/ModHelpers/ModContentHelper.cs @@ -35,7 +35,7 @@ internal class ModContentHelper : BaseHelper, IModContentHelper /// The friendly mod name for use in errors. /// The game content manager used for map tilesheets not provided by the mod. /// Simplifies access to private code. - public ModContentHelper(ContentCoordinator contentCore, string modFolderPath, IModMetadata mod, string modName, IContentManager gameContentManager, Reflector reflection) + public ModContentHelper(ContentCoordinator contentCore, string modFolderPath, IModMetadata mod, string modName, ISmapiContentManager gameContentManager, Reflector reflection) : base(mod) { string managedAssetPrefix = contentCore.GetManagedAssetPrefix(mod.Manifest.UniqueID); diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs index 036ec76c..2145a092 100644 --- a/src/SMAPI/Framework/SCore.cs +++ b/src/SMAPI/Framework/SCore.cs @@ -1390,7 +1390,7 @@ internal class SCore : IDisposable /// A callback invoked after an asset is fully loaded through a content manager. /// The content manager through which the asset was loaded. /// The asset name that was loaded. - private void OnAssetLoaded(IContentManager contentManager, IAssetName assetName) + private void OnAssetLoaded(ISmapiContentManager contentManager, IAssetName assetName) { if (this.EventManager.AssetReady.HasListeners) this.EventManager.AssetReady.Raise(new AssetReadyEventArgs(assetName, assetName.GetBaseAssetName())); diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs index d810a955..91532091 100644 --- a/src/SMAPI/Metadata/CoreAssetPropagator.cs +++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs @@ -75,7 +75,7 @@ internal class CoreAssetPropagator /// Whether the in-game world is fully unloaded (e.g. on the title screen), so there's no need to propagate changes into the world. /// A lookup of asset names to whether they've been propagated. /// Whether the NPC pathfinding warp route cache was reloaded. - public void Propagate(IList contentManagers, IDictionary assets, bool ignoreWorld, out Dictionary propagatedAssets, out bool changedWarpRoutes) + public void Propagate(IList contentManagers, IDictionary assets, bool ignoreWorld, out Dictionary propagatedAssets, out bool changedWarpRoutes) { propagatedAssets = new Dictionary(assets.Count); @@ -191,7 +191,7 @@ internal class CoreAssetPropagator /// The content managers whose assets to update. /// Whether the in-game world is fully unloaded (e.g. on the title screen), so there's no need to propagate changes into the world. /// Returns whether any assets were updated. - private bool PropagateTexture(IAssetName assetName, IList contentManagers, bool ignoreWorld) + private bool PropagateTexture(IAssetName assetName, IList contentManagers, bool ignoreWorld) { bool changed = false; @@ -230,7 +230,7 @@ internal class CoreAssetPropagator }); // apply to content managers - foreach (IContentManager contentManager in contentManagers) + foreach (ISmapiContentManager contentManager in contentManagers) { if (contentManager.IsLoaded(name)) {