From b83da96cacccf2fcab342797abfe5855d2e7d85a Mon Sep 17 00:00:00 2001 From: Frank van der Heijden Date: Thu, 25 Mar 2021 16:29:38 +0100 Subject: [PATCH] Allow non-PluginCommand's to be unloaded --- .../serverutils/bukkit/ServerUtils.java | 30 ++++++++++++++----- .../bukkit/managers/BukkitPluginManager.java | 10 +++++++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java index f680c1f..a741979 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java @@ -117,23 +117,37 @@ public class ServerUtils extends JavaPlugin implements CommandExecutor { commandManager.registerCommand(commandPlugins, true); } - getPlugin().getTaskManager().runTask(() -> BukkitPluginManager.unregisterCommands(getDisabledCommands())); + getPlugin().getTaskManager().runTask(() -> BukkitPluginManager.unregisterExactCommands(getDisabledCommands())); } - private List getDisabledCommands() { - List commands = new ArrayList<>(); + private List getDisabledCommands() { + List commands = new ArrayList<>(); for (String cmd : Config.getInstance().getConfig().getStringList("disabled-commands")) { String[] split = cmd.split(":"); - PluginCommand command; + Command command; if (split.length > 1) { - command = Bukkit.getPluginCommand(StringUtils.join(":", split, 1)); + String commandString = StringUtils.join(":", split, 1); + PluginCommand pluginCommand = Bukkit.getPluginCommand(commandString); Plugin plugin = getPlugin().getPluginManager().getPlugin(split[0]); - if (plugin == null || command == null) continue; - if (!plugin.getName().equalsIgnoreCase(command.getPlugin().getName())) continue; + if (plugin == null) { + getLogger().warning("Unknown plugin '" + split[0] + "' in disabled-commands!"); + continue; + } else if (pluginCommand == null) { + getLogger().warning("Unknown command '" + commandString + "' in disabled-commands!"); + continue; + } else if (!plugin.getName().equalsIgnoreCase(pluginCommand.getPlugin().getName())) { + // No output here, plugin didn't match! + continue; + } + command = pluginCommand; } else { - command = Bukkit.getPluginCommand(split[0]); + command = BukkitPluginManager.getCommand(split[0]); + if (command == null) { + getLogger().warning("Unknown command '" + split[0] + "' in disabled-commands!"); + continue; + } } commands.add(command); } diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java index 732ef41..d5feb3d 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java @@ -306,6 +306,16 @@ public class BukkitPluginManager extends AbstractPluginManager { RCraftServer.syncCommands(); } + /** + * Unregisters all specified commands exactly. + * @param commands The commands to unregister. + */ + public static void unregisterExactCommands(Collection commands) { + Map knownCommands = getKnownCommands(); + if (knownCommands == null) return; + knownCommands.values().removeAll(commands); + } + /** * Retrieves a command from the command map. * @param command The command string.