diff --git a/src/main/java/com/massivecraft/massivecore/MassiveCore.java b/src/main/java/com/massivecraft/massivecore/MassiveCore.java index 5cae0a8a..e44e184c 100644 --- a/src/main/java/com/massivecraft/massivecore/MassiveCore.java +++ b/src/main/java/com/massivecraft/massivecore/MassiveCore.java @@ -193,19 +193,19 @@ public class MassiveCore extends MassivePlugin // Register commands this.outerCmdMassiveCore = new CmdMassiveCore() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCore; } }; - this.outerCmdMassiveCore.register(); + this.outerCmdMassiveCore.register(this); this.outerCmdMassiveCoreUsys = new CmdMassiveCoreUsys() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreUsys; } }; - this.outerCmdMassiveCoreUsys.register(); + this.outerCmdMassiveCoreUsys.register(this); this.outerCmdMassiveCoreStore = new CmdMassiveCoreStore() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreStore; } }; - this.outerCmdMassiveCoreStore.register(); + this.outerCmdMassiveCoreStore.register(this); this.outerCmdMassiveCoreBuffer = new CmdMassiveCoreBuffer() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreBuffer; } }; - this.outerCmdMassiveCoreBuffer.register(); + this.outerCmdMassiveCoreBuffer.register(this); this.outerCmdMassiveCoreCmdurl = new CmdMassiveCoreCmdurl() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreCmdurl; } }; - this.outerCmdMassiveCoreCmdurl.register(); + this.outerCmdMassiveCoreCmdurl.register(this); // Integration this.integrate( diff --git a/src/main/java/com/massivecraft/massivecore/MassivePlugin.java b/src/main/java/com/massivecraft/massivecore/MassivePlugin.java index af847b9c..086b5a36 100644 --- a/src/main/java/com/massivecraft/massivecore/MassivePlugin.java +++ b/src/main/java/com/massivecraft/massivecore/MassivePlugin.java @@ -10,6 +10,7 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; +import com.massivecraft.massivecore.cmd.MassiveCommand; import com.massivecraft.massivecore.integration.IntegrationGlue; import com.massivecraft.massivecore.integration.Integration; import com.massivecraft.massivecore.store.Coll; @@ -77,7 +78,10 @@ public abstract class MassivePlugin extends JavaPlugin implements Listener @Override public void onDisable() { - // Collection shutdowns. + // Commands + MassiveCommand.unregister(this); + + // Collections for (Coll coll : Coll.getInstances()) { if (coll.getPlugin() != this) continue; diff --git a/src/main/java/com/massivecraft/massivecore/cmd/MassiveCommand.java b/src/main/java/com/massivecraft/massivecore/cmd/MassiveCommand.java index 9de8c897..6ef89303 100644 --- a/src/main/java/com/massivecraft/massivecore/cmd/MassiveCommand.java +++ b/src/main/java/com/massivecraft/massivecore/cmd/MassiveCommand.java @@ -5,8 +5,10 @@ import java.util.Map.Entry; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; import com.massivecraft.massivecore.Lang; +import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.cmd.arg.ArgReader; import com.massivecraft.massivecore.cmd.arg.ArgResult; import com.massivecraft.massivecore.cmd.req.Req; @@ -33,10 +35,56 @@ public class MassiveCommand // This task unregisters /all/ registered MCommands and then register them all again. // When registering again we use the fresh and current aliases. - private static transient Set registeredCommands = new LinkedHashSet(); - public static Set getRegisteredCommands() { return registeredCommands; } - public void register() { getRegisteredCommands().add(this); } - public void unregister() { getRegisteredCommands().remove(this); } + private static transient Map registry = new LinkedHashMap(); + + public static Set getRegisteredCommands() + { + return registry.keySet(); + } + + public static Map getRegistry() + { + return registry; + } + + public static void unregister(Plugin plugin) + { + Iterator> iter = registry.entrySet().iterator(); + while (iter.hasNext()) + { + Entry entry = iter.next(); + if (plugin.equals(entry.getValue())) + { + iter.remove(); + } + } + } + + @Deprecated + public void register() + { + this.register(MassiveCore.get()); + } + + public Plugin register(Plugin plugin) + { + return registry.put(this, plugin); + } + + public void unregister() + { + registry.remove(this); + } + + public boolean isRegistered() + { + return registry.containsKey(this); + } + + public Plugin getRegisteredPlugin() + { + return registry.get(this); + } // -------------------------------------------- // // COMMAND BEHAVIOR