Fix command unregistering

This commit is contained in:
Roman Zhuravlev 2023-08-12 04:42:56 +05:00
parent 1e4088991f
commit 709202574a
2 changed files with 14 additions and 3 deletions

View file

@ -2,6 +2,7 @@ package org.zhdev.varioutil;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginIdentifiableCommand;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -171,6 +172,8 @@ public abstract class BukkitPreparedPlugin extends BukkitPlugin implements Liste
if (singleThreadExecutor != null) { if (singleThreadExecutor != null) {
singleThreadExecutor.shutdownNow(); singleThreadExecutor.shutdownNow();
} }
BukkitUtils.unregisterCommandIf(command -> command instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) command).getPlugin() == this);
} }
@Override @Override

View file

@ -36,12 +36,20 @@ public class BukkitUtils {
COMMAND_MAP.register(label, fallbackPrefix, command); COMMAND_MAP.register(label, fallbackPrefix, command);
} }
public static void unregisterCommand(String label) { public static Command unregisterCommand(String label) {
KNOWN_COMMANDS.remove(label); Command command = KNOWN_COMMANDS.remove(label);
if (command != null) command.unregister(COMMAND_MAP);
return command;
} }
public static void unregisterCommandIf(Predicate<Command> predicate) { public static void unregisterCommandIf(Predicate<Command> 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) { public static void setSkullTexture(SkullMeta meta, String base64) {