diff options
author | Pepich <benedikt.abel@yahoo.de> | 2017-05-05 09:44:03 +0200 |
---|---|---|
committer | Pepich <benedikt.abel@yahoo.de> | 2017-05-05 09:44:03 +0200 |
commit | 6ca0abc74aabbbf0ff5a436070fe80e6686b1a3c (patch) | |
tree | f4bb74c67e79f369b15ee5d0aa2971b2b4a7bb9a | |
parent | 570e627330af7968b10e989ec276bb693942ed6d (diff) |
Added functionality to unregister commands
-rw-r--r-- | src/main/java/com/nemez/cmdmgr/CommandManager.java | 28 | ||||
-rw-r--r-- | src/main/java/com/nemez/cmdmgr/EmptyCommand.java | 20 |
2 files changed, 48 insertions, 0 deletions
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<Executable> asyncExecutables = new ArrayList<Executable>();
+ public static HashMap<Object, ArrayList<String>> commands = new HashMap<Object, ArrayList<String>>();
/* */
/**
@@ -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<String, Command> knownCommands = (Map<String, Command>) 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; + } +} |