From 1d5b0f086d653b5b757aced61c9012dd2eaafa8f Mon Sep 17 00:00:00 2001 From: mrkirby153 Date: Tue, 18 Jul 2017 15:45:26 -0700 Subject: [PATCH] Rework how help is generated --- .../aikar/commands/BukkitCommandManager.java | 37 ++++++++++--------- .../co/aikar/commands/BukkitRootCommand.java | 4 ++ .../co/aikar/commands/ForwardingCommand.java | 4 ++ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java index 3414c69a..d81328bc 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -26,6 +26,7 @@ package co.aikar.commands; import co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil; import co.aikar.timings.lib.MCTiming; import co.aikar.timings.lib.TimingManager; +import com.google.common.collect.SetMultimap; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; @@ -42,7 +43,10 @@ import org.jetbrains.annotations.NotNull; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Parameter; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -276,25 +280,22 @@ public class BukkitCommandManager extends CommandManager { @Override List getHelp(String command) { - BukkitRootCommand cmd = this.registeredCommands.get(command); - Map cmds = cmd.getSubCommands(); - HashSet helpSet = new HashSet<>(); - for(Map.Entry e : cmds.entrySet()){ - e.getValue().subCommands.entries().forEach(a -> { - StringBuilder builder = new StringBuilder(); - builder.append("/"); - builder.append(command); - builder.append(" ").append(a.getKey()); - builder.append(" ").append(a.getValue().syntaxText.trim()); - if(a.getValue().helpText != null){ - builder.append(" - ").append(a.getValue().helpText); - } - helpSet.add(builder.toString()); - }); + BukkitRootCommand cmd = (BukkitRootCommand) obtainRootCommand(command); + BaseCommand defCommand = cmd.getDefCommand(); + if (defCommand instanceof ForwardingCommand) { + command = defCommand.commandName; + ForwardingCommand fwdCmd = (ForwardingCommand) defCommand; + defCommand = fwdCmd.getCommand(); } + SetMultimap cmds = defCommand.subCommands; List help = new ArrayList<>(); - help.addAll(helpSet); - Collections.sort(help); + String finalCommand = command; + cmds.entries().forEach(e -> { + if (e.getKey().equals("__default")) + return; + help.add("/" + finalCommand + " " + e.getKey() + " " + e.getValue().syntaxText + ( + (e.getValue().helpText != null && !e.getValue().helpText.isEmpty())?" - " + e.getValue().helpText: "")); + }); return help; } } diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java b/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java index 9278d48f..f4524b4a 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java @@ -103,4 +103,8 @@ public class BukkitRootCommand extends Command implements RootCommand { public Map getSubCommands() { return this.subCommands; } + + BaseCommand getDefCommand(){ + return defCommand; + } } diff --git a/core/src/main/java/co/aikar/commands/ForwardingCommand.java b/core/src/main/java/co/aikar/commands/ForwardingCommand.java index de18429c..fcea968a 100644 --- a/core/src/main/java/co/aikar/commands/ForwardingCommand.java +++ b/core/src/main/java/co/aikar/commands/ForwardingCommand.java @@ -51,4 +51,8 @@ public class ForwardingCommand extends BaseCommand { public void execute(CommandIssuer issuer, String commandLabel, String[] args) { command.execute(issuer, commandLabel, ApacheCommonsLangUtil.addAll(baseArgs, args)); } + + BaseCommand getCommand(){ + return command; + } }