Register each alias as individual subcommand

such that brigadier can properly autocomplete / highlight
This commit is contained in:
Frank van der Heijden 2021-12-20 19:55:36 +01:00
parent 51df8e35f1
commit 3589d9870e
No known key found for this signature in database
GPG key ID: B808721C2DD5B5B8
3 changed files with 35 additions and 21 deletions

View file

@ -78,17 +78,17 @@ public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, P
.withSuggestionsProvider((context, s) -> supportedConfigNames) .withSuggestionsProvider((context, s) -> supportedConfigNames)
.build()); .build());
manager.command(buildSubcommand(builder, "enableplugin") registerSubcommand(manager, builder, "enableplugin", subcommandBuilder -> subcommandBuilder
.argument(getArgument("plugins")) .argument(getArgument("plugins"))
.handler(this::handleEnablePlugin)); .handler(this::handleEnablePlugin));
manager.command(buildSubcommand(builder, "disableplugin") registerSubcommand(manager, builder, "disableplugin", subcommandBuilder -> subcommandBuilder
.argument(new PluginsArgument<>( .argument(new PluginsArgument<>(
true, true,
"plugins", "plugins",
new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("disableplugin")) new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("disableplugin"))
)) ))
.handler(this::handleDisablePlugin)); .handler(this::handleDisablePlugin));
manager.command(buildSubcommand(builder, "reloadconfig") registerSubcommand(manager, builder, "reloadconfig", subcommandBuilder -> subcommandBuilder
.argument(getArgument("config")) .argument(getArgument("config"))
.handler(this::handleReloadConfig)); .handler(this::handleReloadConfig));
} }

View file

@ -56,43 +56,43 @@ public abstract class CommandServerUtils<U extends ServerUtilsPlugin<P, ?, C, ?,
manager.command(builder manager.command(builder
.handler(this::handleHelpCommand)); .handler(this::handleHelpCommand));
manager.command(buildSubcommand(builder, "help") registerSubcommand(manager, builder, "help", subcommandBuilder -> subcommandBuilder
.handler(this::handleHelpCommand)); .handler(this::handleHelpCommand));
manager.command(buildSubcommand(builder, "reload") registerSubcommand(manager, builder, "reload", subcommandBuilder -> subcommandBuilder
.handler(this::handleReload)); .handler(this::handleReload));
manager.command(buildSubcommand(builder, "restart") registerSubcommand(manager, builder, "restart", subcommandBuilder -> subcommandBuilder
.handler(this::handleRestart)); .handler(this::handleRestart));
manager.command(buildSubcommand(builder, "loadplugin") registerSubcommand(manager, builder, "loadplugin", subcommandBuilder -> subcommandBuilder
.argument(getArgument("jarFiles")) .argument(getArgument("jarFiles"))
.handler(this::handleLoadPlugin)); .handler(this::handleLoadPlugin));
manager.command(buildSubcommand(builder, "unloadplugin") registerSubcommand(manager, builder, "unloadplugin", subcommandBuilder -> subcommandBuilder
.argument(new PluginsArgument<>( .argument(new PluginsArgument<>(
true, true,
"plugins", "plugins",
new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("unloadplugin")) new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("unloadplugin"))
)) ))
.handler(this::handleUnloadPlugin)); .handler(this::handleUnloadPlugin));
manager.command(buildSubcommand(builder, "reloadplugin") registerSubcommand(manager, builder, "reloadplugin", subcommandBuilder -> subcommandBuilder
.argument(new PluginsArgument<>( .argument(new PluginsArgument<>(
true, true,
"plugins", "plugins",
new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("reloadplugin")) new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("reloadplugin"))
)) ))
.handler(this::handleReloadPlugin)); .handler(this::handleReloadPlugin));
manager.command(buildSubcommand(builder, "watchplugin") registerSubcommand(manager, builder, "watchplugin", subcommandBuilder -> subcommandBuilder
.argument(new PluginsArgument<>( .argument(new PluginsArgument<>(
true, true,
"plugins", "plugins",
new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("watchplugin")) new PluginsArgument.PluginsParser<>(plugin, arrayCreator, getRawPath("watchplugin"))
)) ))
.handler(this::handleWatchPlugin)); .handler(this::handleWatchPlugin));
manager.command(buildSubcommand(builder, "unwatchplugin") registerSubcommand(manager, builder, "unwatchplugin", subcommandBuilder -> subcommandBuilder
.argument(getArgument("plugin")) .argument(getArgument("plugin"))
.handler(this::handleUnwatchPlugin)); .handler(this::handleUnwatchPlugin));
manager.command(buildSubcommand(builder, "plugininfo") registerSubcommand(manager, builder, "plugininfo", subcommandBuilder -> subcommandBuilder
.argument(getArgument("plugin")) .argument(getArgument("plugin"))
.handler(this::handlePluginInfo)); .handler(this::handlePluginInfo));
manager.command(buildSubcommand(builder, "commandinfo") registerSubcommand(manager, builder, "commandinfo", subcommandBuilder -> subcommandBuilder
.argument(getArgument("command")) .argument(getArgument("command"))
.handler(this::handleCommandInfo)); .handler(this::handleCommandInfo));
} }

View file

@ -8,9 +8,12 @@ import cloud.commandframework.arguments.flags.CommandFlag;
import cloud.commandframework.permission.CommandPermission; import cloud.commandframework.permission.CommandPermission;
import cloud.commandframework.permission.Permission; import cloud.commandframework.permission.Permission;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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.config.ServerUtilsConfig;
import net.frankheijden.serverutils.common.entities.ServerUtilsAudience; import net.frankheijden.serverutils.common.entities.ServerUtilsAudience;
import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin; import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin;
@ -58,16 +61,27 @@ public abstract class ServerUtilsCommand<U extends ServerUtilsPlugin<?, ?, C, ?,
/** /**
* Builds a subcommand from the config. * Builds a subcommand from the config.
*/ */
public Command.Builder<C> buildSubcommand(Command.Builder<C> builder, String subcommandName) { public void registerSubcommand(
CommandManager<C> manager,
Command.Builder<C> builder,
String subcommandName,
UnaryOperator<Command.Builder<C>> builderUnaryOperator
) {
CommandElement subcommand = parseSubcommand(subcommandName); CommandElement subcommand = parseSubcommand(subcommandName);
builder = builder Stream.concat(
.literal(subcommand.getMain(), subcommand.getDescription(), subcommand.getAliases()) Stream.of(subcommand.getMain()),
.permission(subcommand.getPermission()); Arrays.stream(subcommand.getAliases())
for (CommandElement flagElement : subcommand.getFlags()) { ).map(cmd -> {
builder = builder.flag(createFlag(flagElement)); Command.Builder<C> subcommandBuilder = builder
} .literal(cmd, subcommand.getDescription())
return builder; .permission(subcommand.getPermission());
for (CommandElement flagElement : subcommand.getFlags()) {
subcommandBuilder = subcommandBuilder.flag(createFlag(flagElement));
}
return builderUnaryOperator.apply(subcommandBuilder).build();
}).forEach(manager::command);
} }
/** /**