diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java index e1fb03f3..ab913bff 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -353,4 +353,9 @@ public class BukkitCommandManager extends CommandManager< this.autoDetectFromClient = autoDetectFromClient; return old; } + + @Override + public String getCommandPrefix(CommandIssuer issuer) { + return issuer.isPlayer() ? "/" : ""; + } } diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java index d8cd689c..c8a14347 100644 --- a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java +++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java @@ -207,4 +207,10 @@ public class BungeeCommandManager extends CommandManager< } } } + + + @Override + public String getCommandPrefix(CommandIssuer issuer) { + return issuer.isPlayer() ? "/" : ""; + } } diff --git a/core/src/main/java/co/aikar/commands/CommandHelp.java b/core/src/main/java/co/aikar/commands/CommandHelp.java index e626dc49..c3ab1e29 100644 --- a/core/src/main/java/co/aikar/commands/CommandHelp.java +++ b/core/src/main/java/co/aikar/commands/CommandHelp.java @@ -50,7 +50,7 @@ public class CommandHelp { this.manager = manager; this.issuer = issuer; this.perPage = manager.defaultHelpPerPage; - this.commandName = "/" + rootCommand.getCommandName(); + this.commandName = manager.getCommandPrefix(issuer) + rootCommand.getCommandName(); SetMultimap subCommands = rootCommand.getSubCommands(); Set seen = new HashSet<>(); @@ -175,21 +175,24 @@ public class CommandHelp { } } - public void showDetailedHelp(HelpEntry page, CommandIssuer issuer) { + public void showDetailedHelp(HelpEntry entry, CommandIssuer issuer) { // header - manager.getHelpFormatter().printDetailedHelpHeader(issuer, commandName, page); + CommandHelpFormatter formatter = manager.getHelpFormatter(); + formatter.printDetailedHelpHeader(issuer, commandName, entry); // normal help line - manager.getHelpFormatter().printHelpLine(issuer, commandName, page); + formatter.printHelpLine(issuer, commandName, entry); // additionally detailed help for params - for (CommandParameter param : page.getParameters()) { - manager.getHelpFormatter().printDetailedHelpLine(issuer, commandName, page, param.getName(), param.getDescription()); + for (CommandParameter param : entry.getParameters()) { + String description = param.getDescription(); + if (description != null && !description.isEmpty()) { + formatter.printDetailedHelpLine(issuer, commandName, entry, param.getName(), description); + } } - // footer - manager.getHelpFormatter().printDetailedHelpFooter(issuer, commandName, page); + formatter.printDetailedHelpFooter(issuer, commandName, entry); } public List getHelpEntries() { diff --git a/core/src/main/java/co/aikar/commands/CommandHelpFormatter.java b/core/src/main/java/co/aikar/commands/CommandHelpFormatter.java index 1de111c7..44203c0c 100644 --- a/core/src/main/java/co/aikar/commands/CommandHelpFormatter.java +++ b/core/src/main/java/co/aikar/commands/CommandHelpFormatter.java @@ -39,23 +39,31 @@ public class CommandHelpFormatter { // # help # // ######## - public void printHelpHeader(CommandIssuer issuer, String commandName, int page, int totalPages, int totalResults) { - issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_HEADER, "{command}", commandName); + public void printHelpHeader(CommandIssuer issuer, String command, int page, int totalPages, int totalResults) { + issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_HEADER, + "{page}", "" + page, + "{totalpages}", "" + totalPages, + "{results}", "" + totalResults, + "{command}", "" + command + ); } - public void printHelpLine(CommandIssuer issuer, String commandName, HelpEntry page) { - String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getFormatReplacements(page)); + public void printHelpLine(CommandIssuer issuer, String command, HelpEntry page) { + String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getFormatReplacements(page, command)); for (String msg : ACFPatterns.NEWLINE.split(formatted)) { issuer.sendMessageInternal(ACFUtil.rtrim(msg)); } } - public void printHelpFooter(CommandIssuer issuer, String commandName, int page, int totalPages, int totalResults, boolean lastPage) { - if(lastPage)return; + public void printHelpFooter(CommandIssuer issuer, String command, int page, int totalPages, int totalResults, boolean lastPage) { + if (lastPage) { + return; + } issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, "{page}", "" + page, - "{totalpages}", ""+ totalPages, - "{results}", "" + totalResults + "{totalpages}", "" + totalPages, + "{results}", "" + totalResults, + "{command}", "" + command ); } @@ -63,57 +71,72 @@ public class CommandHelpFormatter { // # search # // ########## - public void printSearchHeader(CommandIssuer issuer, String commandName, int page, int totalPages, int totalResults, List search) { - issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_SEARCH_HEADER, - "{command}", commandName, - "{search}", String.join(" ", search)); + public void printSearchHeader(CommandIssuer issuer, String command, int page, int totalPages, int totalResults, List search) { + issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_SEARCH_HEADER, getPaginationFormatReplacements(command, page, totalPages, totalResults, search)); } - public void printSearchLine(CommandIssuer issuer, String commandName, HelpEntry page, int score) { - String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getFormatReplacements(page)); + public void printSearchLine(CommandIssuer issuer, String command, HelpEntry page, int score) { + String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getFormatReplacements(page, command)); for (String msg : ACFPatterns.NEWLINE.split(formatted)) { issuer.sendMessageInternal(ACFUtil.rtrim(msg)); } } - public void printSearchFooter(CommandIssuer issuer, String commandName, int page, int totalPages, int totalResults, List search, boolean lastPage) { - if(lastPage)return; - issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, - "{page}", "" + page, - "{totalpages}", ""+ totalPages, - "{results}", "" + totalResults + public void printSearchFooter(CommandIssuer issuer, String command, int page, int totalPages, int totalResults, List search, boolean lastPage) { + if (lastPage) { + return; + } + issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, getPaginationFormatReplacements(command, page, totalPages, totalResults, search) ); } + // ############ // # detailed # // ############ - public void printDetailedHelpHeader(CommandIssuer issuer, String commandName, HelpEntry page) { - issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_DETAILED_HEADER, "{command}", page.getCommand()); + public void printDetailedHelpHeader(CommandIssuer issuer, String command, HelpEntry entry) { + issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_DETAILED_HEADER, + "{command}", entry.getCommand(), + "{command}", command + ); } - public void printDetailedHelpLine(CommandIssuer issuer, String commandName, HelpEntry page, String subCommand, String paramDescription) { - String formattedMsg = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_DETAILED_FORMAT, getDetailedFormatReplacements(subCommand, paramDescription, page)); + public void printDetailedHelpLine(CommandIssuer issuer, String rootCommand, HelpEntry entry, String subCommand, String paramDescription) { + String formattedMsg = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_DETAILED_FORMAT, getDetailedFormatReplacements(subCommand, paramDescription, entry, rootCommand)); for (String msg : ACFPatterns.NEWLINE.split(formattedMsg)) { issuer.sendMessageInternal(ACFUtil.rtrim(msg)); } } - public void printDetailedHelpFooter(CommandIssuer issuer, String commandName, HelpEntry page) { + public void printDetailedHelpFooter(CommandIssuer issuer, String command, HelpEntry page) { // default doesn't have a footer } + @NotNull + public String[] getPaginationFormatReplacements(String command, int page, int totalPages, int totalResults, List search) { + return new String[]{ + "{search}", String.join(" ", search), + "{command}", command, + "{rootcommand}", command, + "{page}", "" + page, + "{totalpages}", "" + totalPages, + "{results}", "" + totalResults + }; + } + /** * Override this to control replacements + * * @param e + * @param command * @return */ - @NotNull - public String[] getFormatReplacements(HelpEntry e) { + public String[] getFormatReplacements(HelpEntry e, String command) { //{command} {parameters} {separator} {description} - return new String[] { + return new String[]{ "{command}", e.getCommand(), + "{rootcommand}", command, "{parameters}", e.getParameterSyntax(), "{separator}", e.getDescription().isEmpty() ? "" : "-", "{description}", e.getDescription() @@ -122,17 +145,21 @@ public class CommandHelpFormatter { /** * Override this to control replacements - * @param cmd - * @param help + * + * @param name + * @param description * @param page + * @param rootCommand * @return */ @NotNull - public String[] getDetailedFormatReplacements(String cmd, String help, HelpEntry page) { + public String[] getDetailedFormatReplacements(String name, String description, HelpEntry page, String rootCommand) { //{name} {description} - return new String[] { - "{name}", cmd, - "{description}", help + return new String[]{ + "{name}", name, + "{command}", page.getCommand(), + "{rootcommand}", rootCommand, + "{description}", description }; } } diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 2977fe63..96277a18 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -504,4 +504,8 @@ public abstract class CommandManager < Annotations getAnnotations() { return annotations; } + + public String getCommandPrefix(CommandIssuer issuer) { + return ""; + } } diff --git a/jda/src/main/java/co/aikar/commands/JDACommandManager.java b/jda/src/main/java/co/aikar/commands/JDACommandManager.java index df336b59..19d13c71 100644 --- a/jda/src/main/java/co/aikar/commands/JDACommandManager.java +++ b/jda/src/main/java/co/aikar/commands/JDACommandManager.java @@ -220,13 +220,7 @@ public class JDACommandManager extends CommandManager< Message message = event.getMessage(); String msg = message.getContentDisplay(); - CommandConfig config = this.defaultConfig; - if (this.configProvider != null) { - CommandConfig provided = this.configProvider.provide(event); - if (provided != null) { - config = provided; - } - } + CommandConfig config = getCommandConfig(event); String prefixFound = null; for (String prefix : config.getCommandPrefixes()) { @@ -255,4 +249,24 @@ public class JDACommandManager extends CommandManager< } rootCommand.execute(this.getCommandIssuer(event), cmd, args); } + + private CommandConfig getCommandConfig(MessageReceivedEvent event) { + CommandConfig config = this.defaultConfig; + if (this.configProvider != null) { + CommandConfig provided = this.configProvider.provide(event); + if (provided != null) { + config = provided; + } + } + return config; + } + + + @Override + public String getCommandPrefix(CommandIssuer issuer) { + MessageReceivedEvent event = ((JDACommandEvent) issuer).getEvent(); + CommandConfig commandConfig = getCommandConfig(event); + List prefixes = commandConfig.getCommandPrefixes(); + return prefixes.isEmpty() ? "" : prefixes.get(0); + } } diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java index 811c25d6..383711bd 100644 --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java @@ -197,4 +197,9 @@ public class SpongeCommandManager extends CommandManager< public SpongeConditionContext createConditionContext(CommandIssuer issuer, String config) { return new SpongeConditionContext((SpongeCommandIssuer) issuer, config); } + + @Override + public String getCommandPrefix(CommandIssuer issuer) { + return issuer.isPlayer() ? "/" : ""; + } }