diff --git a/bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java index a254498..6c13df5 100644 --- a/bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java @@ -2,6 +2,7 @@ package org.zhdev.varioutil; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; +import org.bukkit.command.PluginIdentifiableCommand; import org.bukkit.command.TabCompleter; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.Listener; @@ -171,6 +172,8 @@ public abstract class BukkitPreparedPlugin extends BukkitPlugin implements Liste if (singleThreadExecutor != null) { singleThreadExecutor.shutdownNow(); } + + BukkitUtils.unregisterCommandIf(command -> command instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) command).getPlugin() == this); } @Override diff --git a/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java b/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java index b163f0c..ee8a210 100644 --- a/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java @@ -36,12 +36,20 @@ public class BukkitUtils { COMMAND_MAP.register(label, fallbackPrefix, command); } - public static void unregisterCommand(String label) { - KNOWN_COMMANDS.remove(label); + public static Command unregisterCommand(String label) { + Command command = KNOWN_COMMANDS.remove(label); + if (command != null) command.unregister(COMMAND_MAP); + return command; } public static void unregisterCommandIf(Predicate predicate) { - KNOWN_COMMANDS.values().removeIf(predicate); + KNOWN_COMMANDS.values().removeIf(command -> { + if (predicate.test(command)) { + command.unregister(COMMAND_MAP); + return true; + } + return false; + }); } public static void setSkullTexture(SkullMeta meta, String base64) {