From 6db6f97c01745e062f60dd5f333678da27627d7c Mon Sep 17 00:00:00 2001 From: DeathRealms Date: Sun, 9 Jan 2022 18:51:08 -0500 Subject: [PATCH] Fixed tab completion for @Default method when using brigadier --- .../ACFBrigadierManager.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/brigadier/src/main/java/co.aikar.commands/ACFBrigadierManager.java b/brigadier/src/main/java/co.aikar.commands/ACFBrigadierManager.java index 1787abd8..40ca5a27 100644 --- a/brigadier/src/main/java/co.aikar.commands/ACFBrigadierManager.java +++ b/brigadier/src/main/java/co.aikar.commands/ACFBrigadierManager.java @@ -89,6 +89,30 @@ public class ACFBrigadierManager { root = rootBuilder.build(); boolean isForwardingCommand = rootCommand.getDefCommand() instanceof ForwardingCommand; + if (rootCommand.getDefaultRegisteredCommand() != null) { + CommandNode paramNode = root; + CommandParameter[] parameters = rootCommand.getDefaultRegisteredCommand().parameters; + for (int i = 0; i < parameters.length; i++) { + CommandParameter param = parameters[i]; + CommandParameter nextParam = param.getNextParam(); + if (param.isCommandIssuer() || (param.canExecuteWithoutInput() && nextParam != null && !nextParam.canExecuteWithoutInput())) { + continue; + } + RequiredArgumentBuilder builder = RequiredArgumentBuilder + .argument(param.getName(), getArgumentTypeByClazz(param)) + .suggests(suggestionProvider) + .requires(sender -> permCheckerRoot.test(rootCommand, sender)); + + if (nextParam != null && nextParam.canExecuteWithoutInput()) { + builder.executes(executor); + } + + CommandNode subSubCommand = builder.build(); + paramNode.addChild(subSubCommand); + paramNode = subSubCommand; + } + } + for (Map.Entry subCommand : rootCommand.getSubCommands().entries()) { if ((BaseCommand.isSpecialSubcommand(subCommand.getKey()) && !isForwardingCommand) || (!subCommand.getKey().equals("help") && subCommand.getValue().prefSubCommand.equals("help"))) { // don't register stuff like __catchunknown and don't help command aliases