From 0b1c8013817be9ce6f7d73fc1276753d25570629 Mon Sep 17 00:00:00 2001 From: Jorel Ali Date: Wed, 7 Dec 2022 18:38:39 +0000 Subject: [PATCH] Initial commit for usage implementation for #363 --- .../jorel/commandapi/CommandAPIHandler.java | 22 ++++++++++--------- .../dev/jorel/commandapi/CommandMetaData.java | 10 +++++++-- .../jorel/commandapi/ExecutableCommand.java | 20 +++++++++++++++++ .../jorel/commandapi/RegisteredCommand.java | 5 +++++ .../dev/jorel/commandapi/CommandAPIMain.java | 16 ++++++++++++++ 5 files changed, 61 insertions(+), 12 deletions(-) diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIHandler.java b/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIHandler.java index 6a7c42e512..ce27328d0e 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIHandler.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIHandler.java @@ -732,8 +732,6 @@ void register(CommandMetaData meta, final Argument[] args, CommandPermission permission = meta.permission; String[] aliases = meta.aliases; Predicate requirements = meta.requirements; - Optional shortDescription = meta.shortDescription; - Optional fullDescription = meta.fullDescription; // Handle command conflicts boolean hasRegisteredCommand = false; @@ -747,7 +745,7 @@ void register(CommandMetaData meta, final Argument[] args, for (Argument arg : args) { argumentsString.add(arg.getNodeName() + ":" + arg.getClass().getSimpleName()); } - registeredCommands.add(new RegisteredCommand(commandName, argumentsString, shortDescription, fullDescription, aliases, permission)); + registeredCommands.add(new RegisteredCommand(commandName, argumentsString, meta.shortDescription, meta.fullDescription, meta.usage, aliases, permission)); } // Handle previewable arguments @@ -1032,14 +1030,18 @@ private void generateHelpUsage(StringBuilder sb, RegisteredCommand command) { // Generate usages List usages = new ArrayList<>(); - for (RegisteredCommand rCommand : registeredCommands) { - if (rCommand.commandName().equals(command.commandName())) { - StringBuilder usageString = new StringBuilder(); - usageString.append("/" + command.commandName() + " "); - for (String arg : rCommand.argsAsStr()) { - usageString.append("<" + arg.split(":")[0] + "> "); + if(command.usage().isPresent()) { + usages = Arrays.asList(command.usage().get()); + } else { + for (RegisteredCommand rCommand : registeredCommands) { + if (rCommand.commandName().equals(command.commandName())) { + StringBuilder usageString = new StringBuilder(); + usageString.append("/" + command.commandName() + " "); + for (String arg : rCommand.argsAsStr()) { + usageString.append("<" + arg.split(":")[0] + "> "); + } + usages.add(usageString.toString()); } - usages.add(usageString.toString()); } } diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/CommandMetaData.java b/commandapi-core/src/main/java/dev/jorel/commandapi/CommandMetaData.java index 5c62d2e586..8e0a25b9d8 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/CommandMetaData.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/CommandMetaData.java @@ -33,14 +33,19 @@ final class CommandMetaData { Predicate requirements = s -> true; /** - * An optional short description for the command + * An optional short description for the command's help */ Optional shortDescription = Optional.empty(); /** - * An optional full description for the command + * An optional full description for the command's help */ Optional fullDescription = Optional.empty(); + + /** + * An optional usage text for the command's help + */ + Optional usage = Optional.empty();; /** * Create command metadata @@ -63,6 +68,7 @@ public CommandMetaData(CommandMetaData original) { this.requirements = original.requirements; this.shortDescription = original.shortDescription.isPresent() ? Optional.of(original.shortDescription.get()) : Optional.empty(); this.fullDescription = original.fullDescription.isPresent() ? Optional.of(original.fullDescription.get()) : Optional.empty(); + this.usage = original.usage.isPresent() ? Optional.of(original.usage.get()) : Optional.empty(); } } \ No newline at end of file diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/ExecutableCommand.java b/commandapi-core/src/main/java/dev/jorel/commandapi/ExecutableCommand.java index 2704237ecb..783286a2fc 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/ExecutableCommand.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/ExecutableCommand.java @@ -191,6 +191,26 @@ public T withFullDescription(String description) { this.meta.fullDescription = Optional.ofNullable(description); return (T) this; } + + /** + * Returns the usage help text for this command + * @return the usage help text for this command + */ + public String[] getUsage() { + return this.meta.usage.isPresent() ? this.meta.usage.get() : null; + } + + /** + * Sets the usage text for this command. This is shown in the help which is + * shown in the specific /help page for this command (e.g. /help mycommand) and is designed to help users understand the syntax of your command. + * @param usage a list entry of usage commands + * @return this command builder + */ + @SuppressWarnings("unchecked") + public T withUsage(String... usage) { + this.meta.usage = Optional.ofNullable(usage); + return (T) this; + } /** * Sets the short and full description for this command. This is a short-hand diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/RegisteredCommand.java b/commandapi-core/src/main/java/dev/jorel/commandapi/RegisteredCommand.java index 32fae97446..0de5bb7a93 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/RegisteredCommand.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/RegisteredCommand.java @@ -38,6 +38,11 @@ public record RegisteredCommand( */ Optional fullDescription, + /** + * @return An {@link Optional} containing this command's usage text + */ + Optional usage, + /** * @return a {@link String}{@code []} of aliases for this command */ diff --git a/commandapi-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java b/commandapi-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java index 896ace8982..2e5241cf80 100644 --- a/commandapi-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java +++ b/commandapi-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java @@ -67,5 +67,21 @@ public void onLoad() { @Override public void onEnable() { CommandAPI.onEnable(this); + + new CommandTree("configcommands") + .withUsage( + "configcommands help", + "configcommands help
", + "configcommands ", + "configcommands <(non)static> ", + "configcommands ", + "configcommands ", + "configcommands ", + "configcommands ", + "configcommands ", + "configcommands " + ) + .executes((sender, args) -> {}) + .register(); } } \ No newline at end of file