using System; namespace StardewModdingAPI { /// The base class for a mod. public 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 virtual void Entry(IModHelper helper) { } /// 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 finalised. If this is false, the instance shouldn't dispose other objects since they may already be finalised. protected virtual void Dispose(bool disposing) { } /// Destruct the instance. ~Mod() { this.Dispose(false); } } }