From fe7b48df4890b32ffe2b7c7e13244bab4600e8cc Mon Sep 17 00:00:00 2001 From: themode Date: Wed, 24 Mar 2021 13:58:44 +0100 Subject: [PATCH 1/2] Added ArgumentResourceLocation --- .../builder/arguments/ArgumentType.java | 7 ++++ .../minecraft/ArgumentResourceLocation.java | 34 +++++++++++++++++++ src/test/java/demo/commands/TestCommand.java | 15 ++------ 3 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentResourceLocation.java diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java index 9d3942014..e5eff2866 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java @@ -134,6 +134,13 @@ public class ArgumentType { return new ArgumentParticle(id); } + /** + * @see ArgumentResourceLocation + */ + public static ArgumentResourceLocation ResourceLocation(@NotNull String id) { + return new ArgumentResourceLocation(id); + } + /** * @see ArgumentPotionEffect */ diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentResourceLocation.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentResourceLocation.java new file mode 100644 index 000000000..7bf8b410a --- /dev/null +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentResourceLocation.java @@ -0,0 +1,34 @@ +package net.minestom.server.command.builder.arguments.minecraft; + +import net.minestom.server.command.builder.NodeMaker; +import net.minestom.server.command.builder.arguments.Argument; +import net.minestom.server.command.builder.exception.ArgumentSyntaxException; +import net.minestom.server.network.packet.server.play.DeclareCommandsPacket; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; + +public class ArgumentResourceLocation extends Argument { + + public static final int SPACE_ERROR = 1; + + public ArgumentResourceLocation(@NotNull String id) { + super(id); + } + + @NotNull + @Override + public String parse(@NotNull String input) throws ArgumentSyntaxException { + if (input.contains(StringUtils.SPACE)) + throw new ArgumentSyntaxException("Resource location cannot contain space character", input, SPACE_ERROR); + + return input; + } + + @Override + public void processNodes(@NotNull NodeMaker nodeMaker, boolean executable) { + DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false); + argumentNode.parser = "minecraft:resource_location"; + + nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode}); + } +} diff --git a/src/test/java/demo/commands/TestCommand.java b/src/test/java/demo/commands/TestCommand.java index de7c3b936..88332aee3 100644 --- a/src/test/java/demo/commands/TestCommand.java +++ b/src/test/java/demo/commands/TestCommand.java @@ -14,22 +14,11 @@ public class TestCommand extends Command { super("testcmd"); setDefaultExecutor(this::usage); - var test1 = Word("msg").setSuggestionCallback((sender, context, suggestion) -> { - suggestion.addEntry(new SuggestionEntry("test")); - }); - - var test2 = String("msg2").setSuggestionCallback((sender, context, suggestion) -> { - suggestion.addEntry(new SuggestionEntry("greer")); - }); + var test = ResourceLocation("msg"); addSyntax((sender, context) -> { System.out.println("executed"); - }, Literal("test"), test1, test2); - - addSyntax((sender, context) -> { - System.out.println("cmd syntax"); - }, Literal("debug"), Command("cmd").setShortcut("testcmd test")); - + },test); } private void usage(CommandSender sender, CommandContext context) { From 5320beddb86d5e8ef361f2e17a77062ae72b29ba Mon Sep 17 00:00:00 2001 From: themode Date: Wed, 24 Mar 2021 15:13:25 +0100 Subject: [PATCH 2/2] Added ArgumentUUID --- .../builder/arguments/ArgumentType.java | 7 ++++ .../arguments/minecraft/ArgumentUUID.java | 36 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentUUID.java diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java index e5eff2866..bf244ba8d 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java @@ -197,6 +197,13 @@ public class ArgumentType { return new ArgumentComponent(id); } + /** + * @see ArgumentUUID + */ + public static ArgumentUUID UUID(@NotNull String id) { + return new ArgumentUUID(id); + } + /** * @see ArgumentNbtTag */ diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentUUID.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentUUID.java new file mode 100644 index 000000000..9521f9245 --- /dev/null +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentUUID.java @@ -0,0 +1,36 @@ +package net.minestom.server.command.builder.arguments.minecraft; + +import net.minestom.server.command.builder.NodeMaker; +import net.minestom.server.command.builder.arguments.Argument; +import net.minestom.server.command.builder.exception.ArgumentSyntaxException; +import net.minestom.server.network.packet.server.play.DeclareCommandsPacket; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class ArgumentUUID extends Argument { + + public static final int INVALID_UUID = -1; + + public ArgumentUUID(@NotNull String id) { + super(id); + } + + @NotNull + @Override + public UUID parse(@NotNull String input) throws ArgumentSyntaxException { + try { + return UUID.fromString(input); + } catch (IllegalArgumentException exception) { + throw new ArgumentSyntaxException("Invalid UUID", input, INVALID_UUID); + } + } + + @Override + public void processNodes(@NotNull NodeMaker nodeMaker, boolean executable) { + DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false); + argumentNode.parser = "minecraft:uuid"; + + nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode}); + } +}