From 146bbc2db3be2eafa292cc48db332228bb604996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Tue, 22 Sep 2020 15:52:32 +0200 Subject: [PATCH] Make the generated help menu a little prettier and add command insertions --- cloud-minecraft/cloud-bukkit-test/pom.xml | 6 +++ .../commands/BukkitTest.java | 4 +- .../commands/MinecraftHelp.java | 49 +++++++++++++------ 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/cloud-minecraft/cloud-bukkit-test/pom.xml b/cloud-minecraft/cloud-bukkit-test/pom.xml index 239f1bdb..13ff3a6c 100644 --- a/cloud-minecraft/cloud-bukkit-test/pom.xml +++ b/cloud-minecraft/cloud-bukkit-test/pom.xml @@ -98,6 +98,12 @@ net.kyori adventure-platform-bukkit 4.0.0-SNAPSHOT + + + 4.0.0-SNAPSHOT + adventure-platform-viaversion + + diff --git a/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java b/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java index 630a27ae..b8347acb 100644 --- a/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java +++ b/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java @@ -84,7 +84,9 @@ public final class BukkitTest extends JavaPlugin { ); final BukkitAudiences bukkitAudiences = BukkitAudiences.create(this); - final MinecraftHelp minecraftHelp = new MinecraftHelp<>(bukkitAudiences::audience, mgr); + final MinecraftHelp minecraftHelp = new MinecraftHelp<>("/cloud help", + bukkitAudiences::audience, + mgr); try { ((PaperCommandManager) mgr).registerBrigadier(); diff --git a/cloud-minecraft/cloud-minecraft-extras/src/main/java/com/intellectualsites/commands/MinecraftHelp.java b/cloud-minecraft/cloud-minecraft-extras/src/main/java/com/intellectualsites/commands/MinecraftHelp.java index 89f10fdb..c796b959 100644 --- a/cloud-minecraft/cloud-minecraft-extras/src/main/java/com/intellectualsites/commands/MinecraftHelp.java +++ b/cloud-minecraft/cloud-minecraft-extras/src/main/java/com/intellectualsites/commands/MinecraftHelp.java @@ -64,15 +64,19 @@ public final class MinecraftHelp { private final AudienceProvider audienceProvider; private final CommandManager commandManager; + private final String commandPrefix; /** * Construct a new Minecraft help instance * + * @param commandPrefix Command that was used to trigger the help menu. Used to help insertion generation * @param audienceProvider Provider that maps the command sender type to {@link Audience} * @param commandManager Command manager instance */ - public MinecraftHelp(@Nonnull final AudienceProvider audienceProvider, + public MinecraftHelp(@Nonnull final String commandPrefix, + @Nonnull final AudienceProvider audienceProvider, @Nonnull final CommandManager commandManager) { + this.commandPrefix = commandPrefix; this.audienceProvider = audienceProvider; this.commandManager = commandManager; /* Default messages */ @@ -81,11 +85,13 @@ public final class MinecraftHelp { this.messageMap.put(MESSAGE_QUERY_QUERY, "Showing search results for query: \"/\""); this.messageMap.put(MESSAGE_QUERY_AVAILABLE_COMMANDS, "└─ Available Commands:"); this.messageMap.put(MESSAGE_QUERY_COMMAND_SYNTAX, " ├─ " - + "\">/"); + + "\">/"); this.messageMap.put(MESSAGE_QUERY_COMMAND_SYNTAX_LAST, " └─ " - + "\">/"); + + "\">/"); this.messageMap.put(MESSAGE_QUERY_LONGEST_PATH, "└─ /"); - this.messageMap.put(MESSAGE_QUERY_SUGGESTION, " "); + this.messageMap.put(MESSAGE_QUERY_SUGGESTION, " >Click to show help for this command\">" + + ""); this.messageMap.put(MESSAGE_QUERY_VERBOSE_SYNTAX, "└─ Command:" + " /"); this.messageMap.put(MESSAGE_QUERY_VERBOSE_DESCRIPTION, " ├─" @@ -175,15 +181,24 @@ public final class MinecraftHelp { final Iterator> iterator = helpTopic.getEntries().iterator(); while (iterator.hasNext()) { final CommandHelpHandler.VerboseHelpEntry entry = iterator.next(); - if (iterator.hasNext()) { - audience.sendMessage(this.miniMessage.parse(this.messageMap.get(MESSAGE_QUERY_COMMAND_SYNTAX), - Template.of("command", entry.getSyntaxString()), - Template.of("description", entry.getDescription()))); - } else { - audience.sendMessage(this.miniMessage.parse(this.messageMap.get(MESSAGE_QUERY_COMMAND_SYNTAX_LAST), - Template.of("command", entry.getSyntaxString()), - Template.of("description", entry.getDescription()))); - } + + final String description = entry.getDescription().isEmpty() ? "Click to show help for this command" + : entry.getDescription(); + + String message = this.messageMap.get(iterator.hasNext() ? MESSAGE_QUERY_COMMAND_SYNTAX + : MESSAGE_QUERY_COMMAND_SYNTAX_LAST); + + final String suggestedCommand = entry.getSyntaxString() + .replace("<", "") + .replace(">", "") + .replace("[", "") + .replace("]", ""); + + message = message.replace("", entry.getSyntaxString()) + .replace("", description) + .replace("cmdprefix", this.commandPrefix + ' ' + suggestedCommand); + + audience.sendMessage(this.miniMessage.parse(message)); } } @@ -208,10 +223,16 @@ public final class MinecraftHelp { prefix = "└─"; } + final String suggestedCommand = suggestion.replace("<", "") + .replace(">", "") + .replace("[", "") + .replace("]", ""); + audience.sendMessage(this.miniMessage.parse(this.messageMap.get(MESSAGE_QUERY_SUGGESTION), Template.of("indentation", indentation.toString()), Template.of("prefix", prefix), - Template.of("suggestion", suggestion))); + Template.of("suggestion", suggestion), + Template.of("cmdprefix", this.commandPrefix + ' ' + suggestedCommand))); } }