From 0b24134dc4534a3d87abb6a59f27718969c29140 Mon Sep 17 00:00:00 2001 From: mworzala Date: Wed, 23 Oct 2024 21:52:37 -0400 Subject: [PATCH] feat: convert command parser string to generated enum --- .../java/net/minestom/codegen/Generators.java | 2 + .../codegen/MinestomCodeGenerator.java | 4 +- gradle/libs.versions.toml | 2 +- .../minestom/server/MinecraftConstants.java | 4 +- .../server/command/ArgumentParserType.java | 141 ++++++++++++++++++ .../command/builder/arguments/Argument.java | 21 +-- .../builder/arguments/ArgumentBoolean.java | 5 +- .../builder/arguments/ArgumentCommand.java | 4 +- .../builder/arguments/ArgumentEnum.java | 3 +- .../builder/arguments/ArgumentGroup.java | 3 +- .../builder/arguments/ArgumentLiteral.java | 3 +- .../builder/arguments/ArgumentLoop.java | 3 +- .../builder/arguments/ArgumentString.java | 5 +- .../arguments/ArgumentStringArray.java | 5 +- .../builder/arguments/ArgumentWord.java | 5 +- .../minecraft/ArgumentBlockState.java | 5 +- .../arguments/minecraft/ArgumentColor.java | 5 +- .../minecraft/ArgumentComponent.java | 5 +- .../arguments/minecraft/ArgumentEntity.java | 5 +- .../minecraft/ArgumentFloatRange.java | 5 +- .../arguments/minecraft/ArgumentIntRange.java | 5 +- .../minecraft/ArgumentItemStack.java | 5 +- .../minecraft/ArgumentNbtCompoundTag.java | 5 +- .../arguments/minecraft/ArgumentNbtTag.java | 5 +- .../arguments/minecraft/ArgumentResource.java | 5 +- .../minecraft/ArgumentResourceLocation.java | 5 +- .../minecraft/ArgumentResourceOrTag.java | 5 +- .../arguments/minecraft/ArgumentTime.java | 5 +- .../arguments/minecraft/ArgumentUUID.java | 5 +- .../registry/ArgumentEntityType.java | 5 +- .../minecraft/registry/ArgumentParticle.java | 5 +- .../arguments/number/ArgumentDouble.java | 3 +- .../arguments/number/ArgumentFloat.java | 3 +- .../arguments/number/ArgumentInteger.java | 3 +- .../arguments/number/ArgumentLong.java | 3 +- .../arguments/number/ArgumentNumber.java | 7 +- .../ArgumentRelativeBlockPosition.java | 5 +- .../relative/ArgumentRelativeVec2.java | 5 +- .../relative/ArgumentRelativeVec3.java | 5 +- .../server/play/DeclareCommandsPacket.java | 30 ++-- .../minestom/server/registry/Registry.java | 1 - .../server/command/CommandPacketTest.java | 19 ++- .../packet/DeclareCommandsPacketTest.java | 5 +- 43 files changed, 273 insertions(+), 106 deletions(-) create mode 100644 src/autogenerated/java/net/minestom/server/command/ArgumentParserType.java diff --git a/code-generators/src/main/java/net/minestom/codegen/Generators.java b/code-generators/src/main/java/net/minestom/codegen/Generators.java index cc8229009..1c0194a1c 100644 --- a/code-generators/src/main/java/net/minestom/codegen/Generators.java +++ b/code-generators/src/main/java/net/minestom/codegen/Generators.java @@ -34,6 +34,8 @@ public class Generators { resource("recipe_book_categories.json"), outputFolder).generate(); new GenericEnumGenerator("net.minestom.server.item.component", "ConsumeEffectType", resource("consume_effects.json"), outputFolder).packagePrivate().generate(); + new GenericEnumGenerator("net.minestom.server.command", "ArgumentParserType", + resource("command_arguments.json"), outputFolder).generate(); var generator = new CodeGenerator(outputFolder); diff --git a/code-generators/src/main/java/net/minestom/codegen/MinestomCodeGenerator.java b/code-generators/src/main/java/net/minestom/codegen/MinestomCodeGenerator.java index a56248de3..0ba176ded 100644 --- a/code-generators/src/main/java/net/minestom/codegen/MinestomCodeGenerator.java +++ b/code-generators/src/main/java/net/minestom/codegen/MinestomCodeGenerator.java @@ -29,6 +29,8 @@ public abstract class MinestomCodeGenerator { } protected static String toConstant(String namespace) { - return namespace.replace("minecraft:", "").toUpperCase(Locale.ROOT); + return namespace.replace("minecraft:", "") + .replace("brigadier:", "") + .toUpperCase(Locale.ROOT); } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b7fb8ce7c..47ed88dfc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ metadata.format.version = "1.1" [versions] # Important dependencies -data = "1.21.2-rv1" +data = "1.21.3-dev" adventure = "4.17.0" jetbrainsAnnotations = "24.1.0" slf4j = "2.0.7" diff --git a/src/autogenerated/java/net/minestom/server/MinecraftConstants.java b/src/autogenerated/java/net/minestom/server/MinecraftConstants.java index 193fb3bd3..3c9b0b8d0 100644 --- a/src/autogenerated/java/net/minestom/server/MinecraftConstants.java +++ b/src/autogenerated/java/net/minestom/server/MinecraftConstants.java @@ -4,11 +4,11 @@ package net.minestom.server; * AUTOGENERATED by ConstantsGenerator */ interface MinecraftConstants { - String VERSION_NAME = "1.21.2"; + String VERSION_NAME = "1.21.3"; int PROTOCOL_VERSION = 768; - int DATA_VERSION = 4080; + int DATA_VERSION = 4082; int RESOURCE_PACK_VERSION = 42; diff --git a/src/autogenerated/java/net/minestom/server/command/ArgumentParserType.java b/src/autogenerated/java/net/minestom/server/command/ArgumentParserType.java new file mode 100644 index 000000000..cd27b3e8b --- /dev/null +++ b/src/autogenerated/java/net/minestom/server/command/ArgumentParserType.java @@ -0,0 +1,141 @@ +package net.minestom.server.command; + +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.registry.StaticProtocolObject; +import net.minestom.server.utils.NamespaceID; +import net.minestom.server.utils.nbt.BinaryTagSerializer; +import org.jetbrains.annotations.NotNull; + +/** + * AUTOGENERATED by GenericEnumGenerator + */ +public enum ArgumentParserType implements StaticProtocolObject { + BOOL(NamespaceID.from("brigadier:bool")), + + FLOAT(NamespaceID.from("brigadier:float")), + + DOUBLE(NamespaceID.from("brigadier:double")), + + INTEGER(NamespaceID.from("brigadier:integer")), + + LONG(NamespaceID.from("brigadier:long")), + + STRING(NamespaceID.from("brigadier:string")), + + ENTITY(NamespaceID.from("minecraft:entity")), + + GAME_PROFILE(NamespaceID.from("minecraft:game_profile")), + + BLOCK_POS(NamespaceID.from("minecraft:block_pos")), + + COLUMN_POS(NamespaceID.from("minecraft:column_pos")), + + VEC3(NamespaceID.from("minecraft:vec3")), + + VEC2(NamespaceID.from("minecraft:vec2")), + + BLOCK_STATE(NamespaceID.from("minecraft:block_state")), + + BLOCK_PREDICATE(NamespaceID.from("minecraft:block_predicate")), + + ITEM_STACK(NamespaceID.from("minecraft:item_stack")), + + ITEM_PREDICATE(NamespaceID.from("minecraft:item_predicate")), + + COLOR(NamespaceID.from("minecraft:color")), + + COMPONENT(NamespaceID.from("minecraft:component")), + + STYLE(NamespaceID.from("minecraft:style")), + + MESSAGE(NamespaceID.from("minecraft:message")), + + NBT_COMPOUND_TAG(NamespaceID.from("minecraft:nbt_compound_tag")), + + NBT_TAG(NamespaceID.from("minecraft:nbt_tag")), + + NBT_PATH(NamespaceID.from("minecraft:nbt_path")), + + OBJECTIVE(NamespaceID.from("minecraft:objective")), + + OBJECTIVE_CRITERIA(NamespaceID.from("minecraft:objective_criteria")), + + OPERATION(NamespaceID.from("minecraft:operation")), + + PARTICLE(NamespaceID.from("minecraft:particle")), + + ANGLE(NamespaceID.from("minecraft:angle")), + + ROTATION(NamespaceID.from("minecraft:rotation")), + + SCOREBOARD_SLOT(NamespaceID.from("minecraft:scoreboard_slot")), + + SCORE_HOLDER(NamespaceID.from("minecraft:score_holder")), + + SWIZZLE(NamespaceID.from("minecraft:swizzle")), + + TEAM(NamespaceID.from("minecraft:team")), + + ITEM_SLOT(NamespaceID.from("minecraft:item_slot")), + + ITEM_SLOTS(NamespaceID.from("minecraft:item_slots")), + + RESOURCE_LOCATION(NamespaceID.from("minecraft:resource_location")), + + FUNCTION(NamespaceID.from("minecraft:function")), + + ENTITY_ANCHOR(NamespaceID.from("minecraft:entity_anchor")), + + INT_RANGE(NamespaceID.from("minecraft:int_range")), + + FLOAT_RANGE(NamespaceID.from("minecraft:float_range")), + + DIMENSION(NamespaceID.from("minecraft:dimension")), + + GAMEMODE(NamespaceID.from("minecraft:gamemode")), + + TIME(NamespaceID.from("minecraft:time")), + + RESOURCE_OR_TAG(NamespaceID.from("minecraft:resource_or_tag")), + + RESOURCE_OR_TAG_KEY(NamespaceID.from("minecraft:resource_or_tag_key")), + + RESOURCE(NamespaceID.from("minecraft:resource")), + + RESOURCE_KEY(NamespaceID.from("minecraft:resource_key")), + + TEMPLATE_MIRROR(NamespaceID.from("minecraft:template_mirror")), + + TEMPLATE_ROTATION(NamespaceID.from("minecraft:template_rotation")), + + HEIGHTMAP(NamespaceID.from("minecraft:heightmap")), + + LOOT_TABLE(NamespaceID.from("minecraft:loot_table")), + + LOOT_PREDICATE(NamespaceID.from("minecraft:loot_predicate")), + + LOOT_MODIFIER(NamespaceID.from("minecraft:loot_modifier")), + + UUID(NamespaceID.from("minecraft:uuid")); + + public static final NetworkBuffer.Type NETWORK_TYPE = NetworkBuffer.Enum(ArgumentParserType.class); + + public static final BinaryTagSerializer NBT_TYPE = BinaryTagSerializer.fromEnumKeyed(ArgumentParserType.class); + + private final NamespaceID namespace; + + ArgumentParserType(@NotNull NamespaceID namespace) { + this.namespace = namespace; + } + + @NotNull + @Override + public NamespaceID namespace() { + return this.namespace; + } + + @Override + public int id() { + return this.ordinal(); + } +} diff --git a/src/main/java/net/minestom/server/command/builder/arguments/Argument.java b/src/main/java/net/minestom/server/command/builder/arguments/Argument.java index 497924a2e..945508bf1 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/Argument.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/Argument.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.ArgumentCallback; import net.minestom.server.command.builder.Command; @@ -7,9 +8,6 @@ import net.minestom.server.command.builder.CommandExecutor; import net.minestom.server.command.builder.arguments.minecraft.SuggestionType; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.command.builder.suggestion.SuggestionCallback; -import net.minestom.server.registry.Registry; -import net.minestom.server.registry.StaticProtocolObject; -import net.minestom.server.utils.NamespaceID; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,17 +27,6 @@ import java.util.function.Supplier; * @param the type of this parsed argument */ public abstract class Argument { - @ApiStatus.Internal - public static final Registry.Container CONTAINER = Registry.createStaticContainer(Registry.Resource.COMMAND_ARGUMENTS, - (namespace, properties) -> new ArgumentImpl(NamespaceID.from(namespace), properties.getInt("id"))); - - record ArgumentImpl(NamespaceID namespace, int id) implements StaticProtocolObject { - @Override - public String toString() { - return name(); - } - } - private final String id; protected final boolean allowSpace; protected final boolean useRemaining; @@ -105,7 +92,7 @@ public abstract class Argument { */ public abstract @NotNull T parse(@NotNull CommandSender sender, @NotNull String input) throws ArgumentSyntaxException; - public abstract String parser(); + public abstract ArgumentParserType parser(); public byte @Nullable [] nodeProperties() { return null; @@ -325,7 +312,7 @@ public abstract class Argument { } @Override - public String parser() { + public ArgumentParserType parser() { return argument.parser(); } @@ -359,7 +346,7 @@ public abstract class Argument { } @Override - public String parser() { + public ArgumentParserType parser() { return argument.parser(); } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentBoolean.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentBoolean.java index 92f1d9f06..5e9dfc7d1 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentBoolean.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentBoolean.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import org.jetbrains.annotations.NotNull; @@ -29,8 +30,8 @@ public class ArgumentBoolean extends Argument { } @Override - public String parser() { - return "brigadier:bool"; + public ArgumentParserType parser() { + return ArgumentParserType.BOOL; } @Override public String toString() { diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentCommand.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentCommand.java index 5ffe90d35..6f5608faa 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentCommand.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentCommand.java @@ -1,6 +1,7 @@ package net.minestom.server.command.builder.arguments; import net.minestom.server.MinecraftServer; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.CommandDispatcher; import net.minestom.server.command.builder.CommandResult; @@ -8,6 +9,7 @@ import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.utils.StringUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class ArgumentCommand extends Argument { @@ -36,7 +38,7 @@ public class ArgumentCommand extends Argument { } @Override - public String parser() { + public ArgumentParserType parser() { return null; } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentEnum.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentEnum.java index da100c8c5..f88d49789 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentEnum.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentEnum.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import org.jetbrains.annotations.NotNull; @@ -41,7 +42,7 @@ public class ArgumentEnum extends Argument { } @Override - public String parser() { + public ArgumentParserType parser() { return null; } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentGroup.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentGroup.java index f65b28e5c..6a1c6c732 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentGroup.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentGroup.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.CommandContext; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; @@ -39,7 +40,7 @@ public class ArgumentGroup extends Argument { } @Override - public String parser() { + public ArgumentParserType parser() { return null; } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLiteral.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLiteral.java index 7f45dadae..dd0ffcb13 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLiteral.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLiteral.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import org.jetbrains.annotations.NotNull; @@ -22,7 +23,7 @@ public class ArgumentLiteral extends Argument { } @Override - public String parser() { + public ArgumentParserType parser() { return null; } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLoop.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLoop.java index aa5065da1..a7ac36b61 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLoop.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentLoop.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.utils.StringUtils; @@ -62,7 +63,7 @@ public class ArgumentLoop extends Argument> { } @Override - public String parser() { + public ArgumentParserType parser() { return null; } } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java index d9b6b6aa9..0f408948e 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.network.NetworkBuffer; @@ -31,8 +32,8 @@ public class ArgumentString extends Argument { } @Override - public String parser() { - return "brigadier:string"; + public ArgumentParserType parser() { + return ArgumentParserType.STRING; } @Override diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentStringArray.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentStringArray.java index f9e164b19..d02c31547 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentStringArray.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentStringArray.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.utils.StringUtils; @@ -26,8 +27,8 @@ public class ArgumentStringArray extends Argument { } @Override - public String parser() { - return "brigadier:string"; + public ArgumentParserType parser() { + return ArgumentParserType.STRING; } @Override diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentWord.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentWord.java index 59acab818..27f1e6633 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentWord.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentWord.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.network.NetworkBuffer; @@ -69,8 +70,8 @@ public class ArgumentWord extends Argument { } @Override - public String parser() { - return "brigadier:string"; + public ArgumentParserType parser() { + return ArgumentParserType.STRING; } @Override diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentBlockState.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentBlockState.java index 94637ec97..6a5a2f59c 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentBlockState.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentBlockState.java @@ -1,5 +1,6 @@ package net.minestom.server.command.builder.arguments.minecraft; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.arguments.Argument; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; @@ -24,8 +25,8 @@ public class ArgumentBlockState extends Argument { } @Override - public String parser() { - return "minecraft:block_state"; + public @NotNull ArgumentParserType parser() { + return ArgumentParserType.BLOCK_STATE; } /** diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentColor.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentColor.java index 1163dc3fe..c38f7d51d 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentColor.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentColor.java @@ -2,6 +2,7 @@ package net.minestom.server.command.builder.arguments.minecraft; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.Style; +import net.minestom.server.command.ArgumentParserType; import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.arguments.Argument; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; @@ -40,8 +41,8 @@ public class ArgumentColor extends Argument