From 3589d9870e0eb93cddb7975776cbc885e689b942 Mon Sep 17 00:00:00 2001 From: Frank van der Heijden Date: Mon, 20 Dec 2021 19:55:36 +0100 Subject: [PATCH] Register each alias as individual subcommand such that brigadier can properly autocomplete / highlight --- .../commands/BukkitCommandServerUtils.java | 6 ++-- .../common/commands/CommandServerUtils.java | 20 ++++++------- .../common/commands/ServerUtilsCommand.java | 30 ++++++++++++++----- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/BukkitCommandServerUtils.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/BukkitCommandServerUtils.java index e83d9fc..ffaa7f4 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/BukkitCommandServerUtils.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/BukkitCommandServerUtils.java @@ -78,17 +78,17 @@ public class BukkitCommandServerUtils extends CommandServerUtils supportedConfigNames) .build()); - manager.command(buildSubcommand(builder, "enableplugin") + registerSubcommand(manager, builder, "enableplugin", subcommandBuilder -> subcommandBuilder .argument(getArgument("plugins")) .handler(this::handleEnablePlugin)); - manager.command(buildSubcommand(builder, "disableplugin") + registerSubcommand(manager, builder, "disableplugin", subcommandBuilder -> subcommandBuilder .argument(new PluginsArgument<>( true, "plugins", new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("disableplugin")) )) .handler(this::handleDisablePlugin)); - manager.command(buildSubcommand(builder, "reloadconfig") + registerSubcommand(manager, builder, "reloadconfig", subcommandBuilder -> subcommandBuilder .argument(getArgument("config")) .handler(this::handleReloadConfig)); } diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/commands/CommandServerUtils.java b/Common/src/main/java/net/frankheijden/serverutils/common/commands/CommandServerUtils.java index 199f2b4..0af37a0 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/commands/CommandServerUtils.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/commands/CommandServerUtils.java @@ -56,43 +56,43 @@ public abstract class CommandServerUtils subcommandBuilder .handler(this::handleHelpCommand)); - manager.command(buildSubcommand(builder, "reload") + registerSubcommand(manager, builder, "reload", subcommandBuilder -> subcommandBuilder .handler(this::handleReload)); - manager.command(buildSubcommand(builder, "restart") + registerSubcommand(manager, builder, "restart", subcommandBuilder -> subcommandBuilder .handler(this::handleRestart)); - manager.command(buildSubcommand(builder, "loadplugin") + registerSubcommand(manager, builder, "loadplugin", subcommandBuilder -> subcommandBuilder .argument(getArgument("jarFiles")) .handler(this::handleLoadPlugin)); - manager.command(buildSubcommand(builder, "unloadplugin") + registerSubcommand(manager, builder, "unloadplugin", subcommandBuilder -> subcommandBuilder .argument(new PluginsArgument<>( true, "plugins", new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("unloadplugin")) )) .handler(this::handleUnloadPlugin)); - manager.command(buildSubcommand(builder, "reloadplugin") + registerSubcommand(manager, builder, "reloadplugin", subcommandBuilder -> subcommandBuilder .argument(new PluginsArgument<>( true, "plugins", new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("reloadplugin")) )) .handler(this::handleReloadPlugin)); - manager.command(buildSubcommand(builder, "watchplugin") + registerSubcommand(manager, builder, "watchplugin", subcommandBuilder -> subcommandBuilder .argument(new PluginsArgument<>( true, "plugins", new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("watchplugin")) )) .handler(this::handleWatchPlugin)); - manager.command(buildSubcommand(builder, "unwatchplugin") + registerSubcommand(manager, builder, "unwatchplugin", subcommandBuilder -> subcommandBuilder .argument(getArgument("plugin")) .handler(this::handleUnwatchPlugin)); - manager.command(buildSubcommand(builder, "plugininfo") + registerSubcommand(manager, builder, "plugininfo", subcommandBuilder -> subcommandBuilder .argument(getArgument("plugin")) .handler(this::handlePluginInfo)); - manager.command(buildSubcommand(builder, "commandinfo") + registerSubcommand(manager, builder, "commandinfo", subcommandBuilder -> subcommandBuilder .argument(getArgument("command")) .handler(this::handleCommandInfo)); } diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/commands/ServerUtilsCommand.java b/Common/src/main/java/net/frankheijden/serverutils/common/commands/ServerUtilsCommand.java index 0a61633..b917307 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/commands/ServerUtilsCommand.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/commands/ServerUtilsCommand.java @@ -8,9 +8,12 @@ import cloud.commandframework.arguments.flags.CommandFlag; import cloud.commandframework.permission.CommandPermission; import cloud.commandframework.permission.Permission; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.UnaryOperator; +import java.util.stream.Stream; import net.frankheijden.serverutils.common.config.ServerUtilsConfig; import net.frankheijden.serverutils.common.entities.ServerUtilsAudience; import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin; @@ -58,16 +61,27 @@ public abstract class ServerUtilsCommand buildSubcommand(Command.Builder builder, String subcommandName) { + public void registerSubcommand( + CommandManager manager, + Command.Builder builder, + String subcommandName, + UnaryOperator> builderUnaryOperator + ) { CommandElement subcommand = parseSubcommand(subcommandName); - builder = builder - .literal(subcommand.getMain(), subcommand.getDescription(), subcommand.getAliases()) - .permission(subcommand.getPermission()); - for (CommandElement flagElement : subcommand.getFlags()) { - builder = builder.flag(createFlag(flagElement)); - } - return builder; + Stream.concat( + Stream.of(subcommand.getMain()), + Arrays.stream(subcommand.getAliases()) + ).map(cmd -> { + Command.Builder subcommandBuilder = builder + .literal(cmd, subcommand.getDescription()) + .permission(subcommand.getPermission()); + for (CommandElement flagElement : subcommand.getFlags()) { + subcommandBuilder = subcommandBuilder.flag(createFlag(flagElement)); + } + + return builderUnaryOperator.apply(subcommandBuilder).build(); + }).forEach(manager::command); } /**