using System;
using StardewModdingAPI.Events;
namespace StardewModdingAPI.Framework.Events
{
    /// Events serving specialised edge cases that shouldn't be used by most mods.
    internal class ModSpecialisedEvents : ModEventsBase, ISpecialisedEvents
    {
        /*********
        ** Accessors
        *********/
        /// Raised before the game state is updated (≈60 times per second), regardless of normal SMAPI validation. This event is not thread-safe and may be invoked while game logic is running asynchronously. Changes to game state in this method may crash the game or corrupt an in-progress save. Do not use this event unless you're fully aware of the context in which your code will be run. Mods using this event will trigger a stability warning in the SMAPI console.
        public event EventHandler UnvalidatedUpdateTicking
        {
            add => this.EventManager.UnvalidatedUpdateTicking.Add(value);
            remove => this.EventManager.UnvalidatedUpdateTicking.Remove(value);
        }
        /// Raised after the game state is updated (≈60 times per second), regardless of normal SMAPI validation. This event is not thread-safe and may be invoked while game logic is running asynchronously. Changes to game state in this method may crash the game or corrupt an in-progress save. Do not use this event unless you're fully aware of the context in which your code will be run. Mods using this event will trigger a stability warning in the SMAPI console.
        public event EventHandler UnvalidatedUpdateTicked
        {
            add => this.EventManager.UnvalidatedUpdateTicked.Add(value);
            remove => this.EventManager.UnvalidatedUpdateTicked.Remove(value);
        }
        /*********
        ** Public methods
        *********/
        /// Construct an instance.
        /// The mod which uses this instance.
        /// The underlying event manager.
        internal ModSpecialisedEvents(IModMetadata mod, EventManager eventManager)
            : base(mod, eventManager) { }
    }
}