summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPepich <benedikt.abel@yahoo.de>2017-05-05 09:44:03 +0200
committerPepich <benedikt.abel@yahoo.de>2017-05-05 09:44:03 +0200
commit6ca0abc74aabbbf0ff5a436070fe80e6686b1a3c (patch)
treef4bb74c67e79f369b15ee5d0aa2971b2b4a7bb9a
parent570e627330af7968b10e989ec276bb693942ed6d (diff)
Added functionality to unregister commands
-rw-r--r--src/main/java/com/nemez/cmdmgr/CommandManager.java28
-rw-r--r--src/main/java/com/nemez/cmdmgr/EmptyCommand.java20
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;
+ }
+}