From 6f7d9537f3b8e6fdf5705f50f13f48a5f38bf4c9 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot 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 By: rmichela --- .../craftbukkit/help/SimpleHelpMap.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java b/paper-server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java index a8424aab3f..b4843a9415 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java +++ b/paper-server/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); }