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();