From 6ca0abc74aabbbf0ff5a436070fe80e6686b1a3c Mon Sep 17 00:00:00 2001 From: Pepich Date: Fri, 5 May 2017 09:44:03 +0200 Subject: Added functionality to unregister commands --- src/main/java/com/nemez/cmdmgr/CommandManager.java | 28 ++++++++++++++++++++++ src/main/java/com/nemez/cmdmgr/EmptyCommand.java | 20 ++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/com/nemez/cmdmgr/EmptyCommand.java diff --git a/src/main/java/com/nemez/cmdmgr/CommandManager.java b/src/main/java/com/nemez/cmdmgr/CommandManager.java index 59d8629..da83aca 100644 --- a/src/main/java/com/nemez/cmdmgr/CommandManager.java +++ b/src/main/java/com/nemez/cmdmgr/CommandManager.java @@ -6,11 +6,16 @@ import java.io.File; import java.io.FileReader; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandMap; import org.bukkit.plugin.java.JavaPlugin; import com.nemez.cmdmgr.component.ArgumentComponent; @@ -103,6 +108,7 @@ public class CommandManager { /* List of all commands that can be invoked async */ public static ArrayList asyncExecutables = new ArrayList(); + public static HashMap> commands = new HashMap>(); /* */ /** @@ -182,6 +188,28 @@ public class CommandManager { return registerCommand(src.toString(), commandHandler, plugin); } + + public static void unregisterAll(String[] commands) + { + for (String name : commands) + { + EmptyCommand emptyCommand = new EmptyCommand(name); + try { + final Field cmdMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); + cmdMap.setAccessible(true); + CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); + final Field knownCommandsField = map.getClass().getDeclaredField("knownCommands"); + knownCommandsField.setAccessible(true); + @SuppressWarnings("unchecked") + Map knownCommands = (Map) knownCommandsField.get(map); + knownCommands.remove(name); + map.register(name, emptyCommand); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + /** * Parses the source code into an abstract command syntax * diff --git a/src/main/java/com/nemez/cmdmgr/EmptyCommand.java b/src/main/java/com/nemez/cmdmgr/EmptyCommand.java new file mode 100644 index 0000000..8a29527 --- /dev/null +++ b/src/main/java/com/nemez/cmdmgr/EmptyCommand.java @@ -0,0 +1,20 @@ +package com.nemez.cmdmgr; + +import org.bukkit.command.CommandSender; + +import com.nemez.cmdmgr.util.Executable; + +public class EmptyCommand extends Executable +{ + public EmptyCommand(String name) + { + super(name, null); + } + + @Override + public boolean execute(CommandSender sender, String name, String[] args_) + { + sender.sendMessage("§cUnknown command. Use §e/help§c, §e/plugins§c or ask a mod."); + return true; + } +} -- cgit v1.2.3