using System; namespace StardewModdingAPI { /// The base class for a mod. public abstract class Mod : IMod, IDisposable { /********* ** Accessors *********/ /// Provides simplified APIs for writing mods. public IModHelper Helper { get; internal set; } /// Writes messages to the console and log file. public IMonitor Monitor { get; internal set; } /// The mod's manifest. public IManifest ModManifest { get; internal set; } /********* ** Public methods *********/ /// The mod entry point, called after the mod is first loaded. /// Provides simplified APIs for writing mods. public abstract void Entry(IModHelper helper); /// Get an API that other mods can access. This is always called after . public virtual object GetApi() => null; /// Release or reset unmanaged resources. public void Dispose() { (this.Helper as IDisposable)?.Dispose(); // deliberate do this outside overridable dispose method so mods don't accidentally suppress it this.Dispose(true); GC.SuppressFinalize(this); } /********* ** Private methods *********/ /// Release or reset unmanaged resources when the game exits. There's no guarantee this will be called on every exit. /// Whether the instance is being disposed explicitly rather than finalized. If this is false, the instance shouldn't dispose other objects since they may already be finalized. protected virtual void Dispose(bool disposing) { } /// Destruct the instance. ~Mod() { this.Dispose(false); } } }