From 378424a1a17b7c1e6f2a6b3395a5fc875729a4dd Mon Sep 17 00:00:00 2001 From: rmichela Date: Fri, 9 Mar 2012 01:17:45 -0500 Subject: [PATCH] [Bleeding] Added support for linking custom CommandExecutor types to a HelpTopicFactory. Fixes BUKKIT-1027 --- .../craftbukkit/help/SimpleHelpMap.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java b/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java index a8424aab3f..b4843a9415 100644 --- a/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java +++ b/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java @@ -1,7 +1,9 @@ package org.bukkit.craftbukkit.help; import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; import org.bukkit.command.MultipleCommandAlias; +import org.bukkit.command.PluginCommand; import org.bukkit.command.defaults.VanillaCommand; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.help.HelpMap; @@ -71,12 +73,18 @@ public class SimpleHelpMap implements HelpMap { // ** Load topics from highest to lowest priority order ** // Initialize help topics from the server's command map - for (Command command : server.getCommandMap().getCommands()) { - if (topicFactoryMap.containsKey(command.getClass())) { - addTopic(topicFactoryMap.get(command.getClass()).createTopic(command)); - } else { - addTopic(new GenericCommandHelpTopic(command)); + outer: for (Command command : server.getCommandMap().getCommands()) { + for (Class c : topicFactoryMap.keySet()) { + if (c.isAssignableFrom(command.getClass())) { + addTopic(topicFactoryMap.get(c).createTopic(command)); + continue outer; + } + if (command instanceof PluginCommand && c.isAssignableFrom(((PluginCommand)command).getExecutor().getClass())) { + addTopic(topicFactoryMap.get(c).createTopic(command)); + continue outer; + } } + addTopic(new GenericCommandHelpTopic(command)); } // Initialize help topics from the server's fallback commands @@ -94,8 +102,8 @@ public class SimpleHelpMap implements HelpMap { } public void registerHelpTopicFactory(Class commandClass, HelpTopicFactory factory) { - if (!Command.class.isAssignableFrom(commandClass)) { - throw new IllegalArgumentException("commandClass must implement Command"); + if (!Command.class.isAssignableFrom(commandClass) && !CommandExecutor.class.isAssignableFrom(commandClass)) { + throw new IllegalArgumentException("commandClass must implement either Command or CommandExecutor!"); } topicFactoryMap.put(commandClass, factory); }