From 431e81c3c93716a96d6850ff6b550ab8fd1c813a Mon Sep 17 00:00:00 2001 From: Reflxction Dev Date: Sun, 16 Oct 2022 22:29:12 +0300 Subject: [PATCH] Fix commands with no arguments not working (#30) --- .../commands/bukkit/BukkitBrigadier.java | 8 ++++++ ...er.java => BukkitBrigadierTreeParser.java} | 25 +++++++++++-------- .../brigadier/CommodoreBukkitBrigadier.java | 8 ++++-- 3 files changed, 28 insertions(+), 13 deletions(-) rename bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/{BrigadierTreeParser.java => BukkitBrigadierTreeParser.java} (92%) diff --git a/bukkit/src/main/java/revxrsal/commands/bukkit/BukkitBrigadier.java b/bukkit/src/main/java/revxrsal/commands/bukkit/BukkitBrigadier.java index 138a1a6c..b75d883f 100644 --- a/bukkit/src/main/java/revxrsal/commands/bukkit/BukkitBrigadier.java +++ b/bukkit/src/main/java/revxrsal/commands/bukkit/BukkitBrigadier.java @@ -88,4 +88,12 @@ public interface BukkitBrigadier { */ void register(); + /** + * Returns the command handler that instantiated this Brigadier + * instance. + * + * @return The command handler + */ + @NotNull BukkitCommandHandler getCommandHandler(); + } diff --git a/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/BrigadierTreeParser.java b/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/BukkitBrigadierTreeParser.java similarity index 92% rename from bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/BrigadierTreeParser.java rename to bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/BukkitBrigadierTreeParser.java index 30e3968a..48e05691 100644 --- a/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/BrigadierTreeParser.java +++ b/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/BukkitBrigadierTreeParser.java @@ -45,12 +45,13 @@ import static com.mojang.brigadier.builder.LiteralArgumentBuilder.literal; import static com.mojang.brigadier.builder.RequiredArgumentBuilder.argument; +import static revxrsal.commands.autocomplete.SuggestionProvider.EMPTY; /** * A utility class for parsing Lamp's components into Brigadier's. */ @SuppressWarnings("rawtypes") -public final class BrigadierTreeParser { +public final class BukkitBrigadierTreeParser { /** * Parses all the registered commands and categories in the given {@link CommandHandler} @@ -119,13 +120,13 @@ public static LiteralArgumentBuilder parse(BukkitBrigadier brigadier, if (parameter.isFlag()) break; ArgumentBuilder builder = getBuilder(brigadier, command, parameter); if (!isLast && sortedParameters.get(i + 1).isOptional()) - builder.executes(generateAction(brigadier, parameter)); + builder.executes(generateAction(brigadier)); if (lastParameter == null) { if (parameter.isOptional()) - into.executes(generateAction(brigadier, parameter)); - into.then(lastParameter = builder.executes(generateAction(brigadier, parameter)).build()); + into.executes(generateAction(brigadier)); + into.then(lastParameter = builder.executes(generateAction(brigadier)).build()); } else { - lastParameter.addChild(lastParameter = builder.executes(generateAction(brigadier, parameter)).build()); + lastParameter.addChild(lastParameter = builder.executes(generateAction(brigadier)).build()); } } sortedParameters.removeIf(parameter -> !parameter.isFlag()); @@ -142,20 +143,22 @@ public static LiteralArgumentBuilder parse(BukkitBrigadier brigadier, next.addChild(next = getBuilder(brigadier, command, parameter).build()); } into.requires(a -> command.hasPermission(brigadier.wrapSource(a))); + if (command.getValueParameters().size() == 0) + into.executes(generateAction(brigadier)); return (LiteralArgumentBuilder) into; } - @NotNull private static Command generateAction(BukkitBrigadier brigadier, CommandParameter parameter) { + @NotNull private static Command generateAction(BukkitBrigadier brigadier) { return a -> { String input = a.getInput(); - ArgumentStack args = parameter.getCommandHandler().parseArgumentsForCompletion( + ArgumentStack args = brigadier.getCommandHandler().parseArgumentsForCompletion( input.startsWith("/") ? input.substring(1) : input ); CommandActor actor = brigadier.wrapSource(a.getSource()); try { - parameter.getCommandHandler().dispatch(actor, args); + brigadier.getCommandHandler().dispatch(actor, args); } catch (Throwable t) { - parameter.getCommandHandler().getExceptionHandler().handleException(t, actor); + brigadier.getCommandHandler().getExceptionHandler().handleException(t, actor); } return Command.SINGLE_SUCCESS; }; @@ -172,7 +175,7 @@ private static ArgumentBuilder getBuilder(BukkitBrigadier brigadier, return argument(parameter.getName(), argumentType) .requires(a -> parameter.hasPermission(brigadier.wrapSource(a))) .suggests(createSuggestionProvider(brigadier, command, parameter)) - .executes(isLast ? generateAction(brigadier, parameter) : null); + .executes(isLast ? generateAction(brigadier) : null); } private static SuggestionProvider createSuggestionProvider( @@ -180,7 +183,7 @@ private static SuggestionProvider createSuggestionProvider( ExecutableCommand command, CommandParameter parameter ) { - if (parameter.getSuggestionProvider() == revxrsal.commands.autocomplete.SuggestionProvider.EMPTY) + if (parameter.getSuggestionProvider() == EMPTY) return null; if (parameter.getSuggestionProvider() == BukkitHandler.playerSuggestionProvider) return null; diff --git a/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/CommodoreBukkitBrigadier.java b/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/CommodoreBukkitBrigadier.java index 953be200..bcfe4301 100644 --- a/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/CommodoreBukkitBrigadier.java +++ b/bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/CommodoreBukkitBrigadier.java @@ -38,8 +38,8 @@ import revxrsal.commands.command.CommandParameter; import revxrsal.commands.util.ClassMap; -import static revxrsal.commands.bukkit.brigadier.DefaultArgTypeResolvers.*; import static revxrsal.commands.bukkit.brigadier.CommodoreProvider.isSupported; +import static revxrsal.commands.bukkit.brigadier.DefaultArgTypeResolvers.*; import static revxrsal.commands.util.Preconditions.notNull; public final class CommodoreBukkitBrigadier implements BukkitBrigadier { @@ -101,7 +101,11 @@ private void checkSupported() { @Override public void register() { if (!isSupported()) return; - BrigadierTreeParser.parse(this, handler).forEach(n -> register(n.build())); + BukkitBrigadierTreeParser.parse(this, handler).forEach(n -> register(n.build())); + } + + @Override public @NotNull BukkitCommandHandler getCommandHandler() { + return handler; } private void register(@NotNull LiteralCommandNode node) {