Skip to content

Commit

Permalink
Fix commands with no arguments not working (#30)
Browse files Browse the repository at this point in the history
  • Loading branch information
Revxrsal committed Oct 16, 2022
1 parent 75e80f3 commit 431e81c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 13 deletions.
Expand Up @@ -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();

}
Expand Up @@ -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}
Expand Down Expand Up @@ -119,13 +120,13 @@ public static <T> LiteralArgumentBuilder<T> 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());
Expand All @@ -142,20 +143,22 @@ public static <T> LiteralArgumentBuilder<T> 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<T>) 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;
};
Expand All @@ -172,15 +175,15 @@ 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<Object> createSuggestionProvider(
BukkitBrigadier brigadier,
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;
Expand Down
Expand Up @@ -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 {
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 431e81c

Please sign in to comment.