diff --git a/Minecraft.Server.FourKit/FourKit.cs b/Minecraft.Server.FourKit/FourKit.cs index cc805125..7da6bcae 100644 --- a/Minecraft.Server.FourKit/FourKit.cs +++ b/Minecraft.Server.FourKit/FourKit.cs @@ -365,7 +365,7 @@ public static class FourKit /// Name of the plugin to check. /// Plugin if it exists, otherwise null public static ServerPlugin? getPlugin(string name) { - var loadedPlugins = Minecraft.Server.FourKit.FourKitHost.getLoadedPlugins().Where(x => x.name == name); + var loadedPlugins = FourKitHost.getLoadedPlugins().Where(x => x.name == name); if (loadedPlugins.Count() > 1) ServerLog.Warn("fourkit", $"More than one instance of a(n) '{name}' plugin."); return loadedPlugins.FirstOrDefault(); @@ -375,5 +375,17 @@ public static class FourKit /// Gets a list of all currently loaded plugins. /// /// The array of plugins. - public static ServerPlugin[] getPlugins() => Minecraft.Server.FourKit.FourKitHost.getLoadedPlugins().ToArray(); // returns an array for better compatibility for bukkit->fourkit + public static ServerPlugin[] getPlugins() => FourKitHost.getLoadedPlugins().ToArray(); // returns an array for better compatibility for bukkit->fourkit + + /// + /// Enables the specified plugin. + /// + /// Plugin to enable. + public static void enablePlugin(ServerPlugin plugin) => FourKitHost.s_loader?.EnablePlugin(plugin); + + /// + /// Disables the specified plugin. + /// + /// Plugin to disable. + public static void disablePlugin(ServerPlugin plugin) => FourKitHost.s_loader?.DisablePlugin(plugin); } diff --git a/Minecraft.Server.FourKit/FourKitHost.cs b/Minecraft.Server.FourKit/FourKitHost.cs index 613c6a56..b87d0a5a 100644 --- a/Minecraft.Server.FourKit/FourKitHost.cs +++ b/Minecraft.Server.FourKit/FourKitHost.cs @@ -7,9 +7,9 @@ namespace Minecraft.Server.FourKit; public static partial class FourKitHost { - private static PluginLoader? s_loader; + internal static PluginLoader? s_loader; - public static IReadOnlyList getLoadedPlugins() => s_loader?.Plugins ?? []; + public static IReadOnlyList getLoadedPlugins() => s_loader?.Plugins ?? []; [UnmanagedCallersOnly] public static void Initialize() diff --git a/Minecraft.Server.FourKit/PluginLoader.cs b/Minecraft.Server.FourKit/PluginLoader.cs index 506e36b7..f03ab44a 100644 --- a/Minecraft.Server.FourKit/PluginLoader.cs +++ b/Minecraft.Server.FourKit/PluginLoader.cs @@ -119,41 +119,52 @@ internal sealed class PluginLoader { foreach (var plugin in _plugins) { - try - { - InvokePluginMethod(plugin, "onEnable", "OnEnable"); - string pName = GetPluginString(plugin, "name", "getName", "GetName", plugin.GetType().Name); - ServerLog.Info("fourkit", $"Enabled: {pName}"); - - FourKit.FireEvent(new PluginEnableEvent(plugin)); - } - catch (Exception ex) - { - string pName = GetPluginString(plugin, "name", "getName", "GetName", plugin.GetType().Name); - ServerLog.Error("fourkit", $"Error enabling {pName}: {ex.Message}"); - } + EnablePlugin(plugin); } } public void DisableAll() { - for (int i = _plugins.Count - 1; i >= 0; i--) + foreach (var plugin in _plugins) { - try - { - InvokePluginMethod(_plugins[i], "onDisable", "OnDisable"); - string pName = GetPluginString(_plugins[i], "name", "getName", "GetName", _plugins[i].GetType().Name); - ServerLog.Info("fourkit", $"Disabled: {pName}"); - - FourKit.FireEvent(new PluginDisableEvent(_plugins[i])); - } - catch (Exception ex) - { - string pName = GetPluginString(_plugins[i], "name", "getName", "GetName", _plugins[i].GetType().Name); - ServerLog.Error("fourkit", $"Error disabling {pName}: {ex.Message}"); - } + DisablePlugin(plugin); } } + + public void EnablePlugin(ServerPlugin plugin) + { + try + { + InvokePluginMethod(plugin, "onEnable", "OnEnable"); + string pName = GetPluginString(plugin, "name", "getName", "GetName", plugin.GetType().Name); + ServerLog.Info("fourkit", $"Enabled: {pName}"); + + FourKit.FireEvent(new PluginEnableEvent(plugin)); + } + catch (Exception ex) + { + string pName = GetPluginString(plugin, "name", "getName", "GetName", plugin.GetType().Name); + ServerLog.Error("fourkit", $"Error enabling {pName}: {ex.Message}"); + } + } + + public void DisablePlugin(ServerPlugin plugin) + { + try + { + InvokePluginMethod(plugin, "onDisable", "OnDisable"); + string pName = GetPluginString(plugin, "name", "getName", "GetName", plugin.GetType().Name); + ServerLog.Info("fourkit", $"Disabled: {pName}"); + + FourKit.FireEvent(new PluginDisableEvent(plugin)); + } + catch (Exception ex) + { + string pName = GetPluginString(plugin, "name", "getName", "GetName", plugin.GetType().Name); + ServerLog.Error("fourkit", $"Error disabling {pName}: {ex.Message}"); + } + } + private static void InvokePluginMethod(ServerPlugin plugin, string camelName, string pascalName) { Type type = plugin.GetType();