using JetBrains.Annotations; namespace PkmnLib.Dynamic.ScriptHandling.Registry; /// /// A plugin is a way to register scripts and other dynamic components to the script registry. /// [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors)] public abstract class Plugin { protected Plugin(PluginConfiguration configuration) { } /// /// The name of the plugin. Mostly used for debugging purposes. /// public abstract string Name { get; } /// /// When the plugin should be loaded. Lower values are loaded first. /// 0 should be reserved for the core battle scripts. /// public abstract uint LoadOrder { get; } /// /// Run the registration of the plugin when we're building the library. /// public abstract void Register(ScriptRegistry registry); } public abstract class PluginConfiguration { }