diff --git a/cloud-minecraft/cloud-brigadier/src/main/java/com/intellectualsites/commands/brigadier/CloudBrigadierManager.java b/cloud-minecraft/cloud-brigadier/src/main/java/com/intellectualsites/commands/brigadier/CloudBrigadierManager.java index 12030160..f3c4e451 100644 --- a/cloud-minecraft/cloud-brigadier/src/main/java/com/intellectualsites/commands/brigadier/CloudBrigadierManager.java +++ b/cloud-minecraft/cloud-brigadier/src/main/java/com/intellectualsites/commands/brigadier/CloudBrigadierManager.java @@ -257,8 +257,10 @@ public final class CloudBrigadierManager { @Nonnull final com.mojang.brigadier.Command executor, @Nonnull final BiPredicate permissionChecker) { final LiteralArgumentBuilder literalArgumentBuilder = LiteralArgumentBuilder.literal(root.getLiteral()) - .requires(sender -> permissionChecker.test(sender, cloudCommand.getNodeMeta().getOrDefault("permission", ""))) - .executes(executor); + .requires(sender -> permissionChecker.test(sender, cloudCommand.getNodeMeta().getOrDefault("permission", ""))); + if (cloudCommand.isLeaf() && cloudCommand.getValue() != null) { + literalArgumentBuilder.executes(executor); + } final LiteralCommandNode constructedRoot = literalArgumentBuilder.build(); for (final CommandTree.Node> child : cloudCommand.getChildren()) { constructedRoot.addChild(this.constructCommandNode(child, permissionChecker, executor, suggestionProvider).build()); @@ -283,8 +285,10 @@ public final class CloudBrigadierManager { argumentBuilder = RequiredArgumentBuilder .argument(root.getValue().getName(), (ArgumentType) pair.getLeft()) .suggests(provider) - .requires(sender -> permissionChecker.test(sender, root.getNodeMeta().getOrDefault("permission", ""))) - .executes(executor); + .requires(sender -> permissionChecker.test(sender, root.getNodeMeta().getOrDefault("permission", ""))); + } + if (root.isLeaf() || !root.getValue().isRequired()) { + argumentBuilder.executes(executor); } for (final CommandTree.Node> node : root.getChildren()) { argumentBuilder.then(constructCommandNode(node, permissionChecker, executor, suggestionProvider)); diff --git a/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java b/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java index c53c9658..d3a79853 100644 --- a/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java +++ b/cloud-minecraft/cloud-bukkit-test/src/main/java/com/intellectualsites/commands/BukkitTest.java @@ -25,7 +25,10 @@ package com.intellectualsites.commands; import com.intellectualsites.commands.components.StaticComponent; import com.intellectualsites.commands.components.parser.ComponentParseResult; +import com.intellectualsites.commands.components.standard.BooleanComponent; +import com.intellectualsites.commands.components.standard.DoubleComponent; import com.intellectualsites.commands.components.standard.EnumComponent; +import com.intellectualsites.commands.components.standard.FloatComponent; import com.intellectualsites.commands.components.standard.IntegerComponent; import com.intellectualsites.commands.components.standard.StringComponent; import com.intellectualsites.commands.execution.CommandExecutionCoordinator; @@ -136,6 +139,13 @@ public final class BukkitTest extends JavaPlugin { c.getSender().asPlayer().teleport(world.getSpawnLocation()); c.getSender().sendMessage("Teleported."); }) + .build()) + .command(mgr.commandBuilder("brigadier") + .component(FloatComponent.required("float")) + .component(DoubleComponent.required("double")) + .component(IntegerComponent.required("int")) + .component(BooleanComponent.required("bool")) + .component(StringComponent.required("string")) .build()); } catch (final Exception e) { e.printStackTrace();