diff --git a/appinfo.properties b/appinfo.properties index 6f4f07f0..587e2eb0 100644 --- a/appinfo.properties +++ b/appinfo.properties @@ -1,6 +1,6 @@ -#Sun, 14 Jul 2013 14:08:44 +0200 +#Fri, 19 Jul 2013 19:19:28 -0400 program.VERSION=2.21 -program.BUILDNUM=311 -program.BUILDDATE=07/14/2013 02\:08 PM +program.BUILDNUM=318 +program.BUILDDATE=07/19/2013 07\:19 PM diff --git a/buildnumber.properties b/buildnumber.properties index a2c04d0d..de2f2dde 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sun Jul 14 14:08:44 CEST 2013 -build.number=312 +#Fri Jul 19 19:19:28 EDT 2013 +build.number=319 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_CommandLoader.java b/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_CommandLoader.java index 2c26cdea..bf9cb832 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_CommandLoader.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_CommandLoader.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.security.CodeSource; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -23,7 +24,6 @@ import org.bukkit.plugin.Plugin; public class TFM_CommandLoader { public static final Pattern COMMAND_CLASS_PATTERN = Pattern.compile(TotalFreedomMod.COMMAND_PATH.replace('.', '/') + "/(" + TotalFreedomMod.COMMAND_PREFIX + "[^\\$]+)\\.class"); - public static CommandMap commandMap; private List commandList = null; private TFM_CommandLoader() @@ -32,10 +32,10 @@ public class TFM_CommandLoader public void scan() { - commandMap = TFM_Util.getField(Bukkit.getServer().getPluginManager(), "commandMap"); + CommandMap commandMap = getCommandMap(); if (commandMap == null) { - TFM_Log.severe("Error loading command map."); + TFM_Log.severe("Error loading commandMap."); return; } @@ -59,9 +59,82 @@ public class TFM_CommandLoader description = "OP Command - " + description; break; } + TFM_DynamicCommand dynamicCommand = new TFM_DynamicCommand(commandInfo.getCommandName(), description, commandInfo.getUsage(), commandInfo.getAliases()); + + Command existing = commandMap.getCommand(dynamicCommand.getName()); + if (existing != null) + { + TFM_Log.info("Replacing command: " + existing.getName()); + unregisterCommand(existing, commandMap); + } + commandMap.register(TotalFreedomMod.plugin.getDescription().getName(), dynamicCommand); } + + TFM_Log.info("TFM commands loaded."); + } + + public void unregisterCommand(String commandName) + { + CommandMap commandMap = getCommandMap(); + if (commandMap != null) + { + Command command = commandMap.getCommand(commandName.toLowerCase()); + if (command != null) + { + unregisterCommand(command, commandMap); + } + } + } + + public void unregisterCommand(Command command, CommandMap commandMap) + { + try + { + command.unregister(commandMap); + HashMap knownCommands = getKnownCommands(commandMap); + if (knownCommands != null) + { + knownCommands.remove(command.getName()); + for (String alias : command.getAliases()) + { + knownCommands.remove(alias); + } + } + } + catch (Exception ex) + { + TFM_Log.severe(ex); + } + } + + @SuppressWarnings("unchecked") + public CommandMap getCommandMap() + { + Object commandMap = TFM_Util.getField(Bukkit.getServer().getPluginManager(), "commandMap"); + if (commandMap != null) + { + if (commandMap instanceof CommandMap) + { + return (CommandMap) commandMap; + } + } + return null; + } + + @SuppressWarnings("unchecked") + public HashMap getKnownCommands(CommandMap commandMap) + { + Object knownCommands = TFM_Util.getField(commandMap, "knownCommands"); + if (knownCommands != null) + { + if (knownCommands instanceof HashMap) + { + return (HashMap) knownCommands; + } + } + return null; } private static List getCommands() diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index f9d3891b..5203bd8d 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -26,7 +26,7 @@ public class TFM_CommandBlocker if (!(usedcommand + " ").startsWith(parts[2] + " ")) { - CommandMap commandMap = TFM_CommandLoader.commandMap; + CommandMap commandMap = TFM_CommandLoader.getInstance().getCommandMap(); if (commandMap == null) { continue; diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index 9f8205b4..56a8e64b 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -106,8 +106,6 @@ public class TotalFreedomMod extends JavaPlugin // Heartbeat server.getScheduler().scheduleSyncRepeatingTask(this, new TFM_Heartbeat(this), HEARTBEAT_RATE * 20L, HEARTBEAT_RATE * 20L); - TFM_CommandLoader.getInstance().scan(); - // metrics @ http://mcstats.org/plugin/TotalFreedomMod try { @@ -120,6 +118,15 @@ public class TotalFreedomMod extends JavaPlugin } TFM_Log.info("Plugin Enabled - Version: " + TotalFreedomMod.pluginVersion + "." + TotalFreedomMod.buildNumber + " by Madgeek1450 and DarthSalamon"); + + server.getScheduler().runTaskLater(this, new Runnable() + { + @Override + public void run() + { + TFM_CommandLoader.getInstance().scan(); + } + }, 20L); } @Override