feat: convert command parser string to generated enum

This commit is contained in:
mworzala 2024-10-23 21:52:37 -04:00 committed by Matt Worzala
parent 5c6fd7e849
commit 0b24134dc4
43 changed files with 273 additions and 106 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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"

View File

@ -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;

View File

@ -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<ArgumentParserType> NETWORK_TYPE = NetworkBuffer.Enum(ArgumentParserType.class);
public static final BinaryTagSerializer<ArgumentParserType> 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();
}
}

View File

@ -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 <T> the type of this parsed argument
*/
public abstract class Argument<T> {
@ApiStatus.Internal
public static final Registry.Container<ArgumentImpl> 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<T> {
*/
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<T> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return argument.parser();
}
@ -359,7 +346,7 @@ public abstract class Argument<T> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return argument.parser();
}

View File

@ -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<Boolean> {
}
@Override
public String parser() {
return "brigadier:bool";
public ArgumentParserType parser() {
return ArgumentParserType.BOOL;
}
@Override
public String toString() {

View File

@ -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<CommandResult> {
@ -36,7 +38,7 @@ public class ArgumentCommand extends Argument<CommandResult> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return null;
}

View File

@ -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<E extends Enum> extends Argument<E> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return null;
}

View File

@ -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<CommandContext> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return null;
}

View File

@ -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<String> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return null;
}

View File

@ -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<T> extends Argument<List<T>> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return null;
}
}

View File

@ -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<String> {
}
@Override
public String parser() {
return "brigadier:string";
public ArgumentParserType parser() {
return ArgumentParserType.STRING;
}
@Override

View File

@ -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<String[]> {
}
@Override
public String parser() {
return "brigadier:string";
public ArgumentParserType parser() {
return ArgumentParserType.STRING;
}
@Override

View File

@ -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<String> {
}
@Override
public String parser() {
return "brigadier:string";
public ArgumentParserType parser() {
return ArgumentParserType.STRING;
}
@Override

View File

@ -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<Block> {
}
@Override
public String parser() {
return "minecraft:block_state";
public @NotNull ArgumentParserType parser() {
return ArgumentParserType.BLOCK_STATE;
}
/**

View File

@ -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<Style> {
}
@Override
public String parser() {
return "minecraft:color";
public ArgumentParserType parser() {
return ArgumentParserType.COLOR;
}
@Override

View File

@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments.minecraft;
import com.google.gson.JsonParseException;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
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;
@ -27,8 +28,8 @@ public class ArgumentComponent extends Argument<Component> {
}
@Override
public String parser() {
return "minecraft:component";
public ArgumentParserType parser() {
return ArgumentParserType.COMPONENT;
}
@Override

View File

@ -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;
@ -72,8 +73,8 @@ public class ArgumentEntity extends Argument<EntityFinder> {
}
@Override
public String parser() {
return "minecraft:entity";
public ArgumentParserType parser() {
return ArgumentParserType.ENTITY;
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.minecraft;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.utils.Range;
/**
@ -14,8 +15,8 @@ public class ArgumentFloatRange extends ArgumentRange<Range.Float, Float> {
}
@Override
public String parser() {
return "minecraft:float_range";
public ArgumentParserType parser() {
return ArgumentParserType.FLOAT_RANGE;
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.minecraft;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.utils.Range;
/**
@ -14,8 +15,8 @@ public class ArgumentIntRange extends ArgumentRange<Range.Int, Integer> {
}
@Override
public String parser() {
return "minecraft:int_range";
public ArgumentParserType parser() {
return ArgumentParserType.INT_RANGE;
}
@Override

View File

@ -4,6 +4,7 @@ import net.kyori.adventure.nbt.BinaryTag;
import net.kyori.adventure.nbt.CompoundBinaryTag;
import net.kyori.adventure.nbt.TagStringIOExt;
import net.minestom.server.MinecraftServer;
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;
@ -44,8 +45,8 @@ public class ArgumentItemStack extends Argument<ItemStack> {
}
@Override
public String parser() {
return "minecraft:item_stack";
public ArgumentParserType parser() {
return ArgumentParserType.ITEM_STACK;
}
/**

View File

@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments.minecraft;
import net.kyori.adventure.nbt.BinaryTag;
import net.kyori.adventure.nbt.CompoundBinaryTag;
import net.kyori.adventure.nbt.TagStringIO;
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;
@ -39,8 +40,8 @@ public class ArgumentNbtCompoundTag extends Argument<CompoundBinaryTag> {
}
@Override
public String parser() {
return "minecraft:nbt_compound_tag";
public ArgumentParserType parser() {
return ArgumentParserType.NBT_COMPOUND_TAG;
}
@Override

View File

@ -2,6 +2,7 @@ package net.minestom.server.command.builder.arguments.minecraft;
import net.kyori.adventure.nbt.BinaryTag;
import net.kyori.adventure.nbt.TagStringIOExt;
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;
@ -35,8 +36,8 @@ public class ArgumentNbtTag extends Argument<BinaryTag> {
}
@Override
public String parser() {
return "minecraft:nbt_tag";
public ArgumentParserType parser() {
return ArgumentParserType.NBT_TAG;
}
@Override

View File

@ -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;
@ -28,8 +29,8 @@ public class ArgumentResource extends Argument<String> {
}
@Override
public String parser() {
return "minecraft:resource";
public ArgumentParserType parser() {
return ArgumentParserType.RESOURCE;
}
@Override

View File

@ -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 ArgumentResourceLocation extends Argument<String> {
}
@Override
public String parser() {
return "minecraft:resource_location";
public ArgumentParserType parser() {
return ArgumentParserType.RESOURCE_LOCATION;
}
@Override

View File

@ -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;
@ -28,8 +29,8 @@ public class ArgumentResourceOrTag extends Argument<String> {
}
@Override
public String parser() {
return "minecraft:resource_or_tag";
public ArgumentParserType parser() {
return ArgumentParserType.RESOURCE_OR_TAG;
}
@Override

View File

@ -2,6 +2,7 @@ package net.minestom.server.command.builder.arguments.minecraft;
import it.unimi.dsi.fastutil.chars.CharArrayList;
import it.unimi.dsi.fastutil.chars.CharList;
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;
@ -74,8 +75,8 @@ public class ArgumentTime extends Argument<Duration> {
}
@Override
public String parser() {
return "minecraft:time";
public ArgumentParserType parser() {
return ArgumentParserType.TIME;
}
@Override

View File

@ -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;
@ -26,8 +27,8 @@ public class ArgumentUUID extends Argument<UUID> {
}
@Override
public String parser() {
return "minecraft:uuid";
public ArgumentParserType parser() {
return ArgumentParserType.UUID;
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.minecraft.registry;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.command.builder.arguments.minecraft.SuggestionType;
import net.minestom.server.entity.EntityType;
import org.jetbrains.annotations.NotNull;
@ -15,8 +16,8 @@ public class ArgumentEntityType extends ArgumentRegistry<EntityType> {
}
@Override
public String parser() {
return "minecraft:resource_location";
public ArgumentParserType parser() {
return ArgumentParserType.RESOURCE_LOCATION;
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.minecraft.registry;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.particle.Particle;
import org.jetbrains.annotations.NotNull;
@ -13,8 +14,8 @@ public class ArgumentParticle extends ArgumentRegistry<Particle> {
}
@Override
public String parser() {
return "minecraft:particle";
public ArgumentParserType parser() {
return ArgumentParserType.PARTICLE;
}
@Override

View File

@ -1,11 +1,12 @@
package net.minestom.server.command.builder.arguments.number;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.network.NetworkBuffer;
public class ArgumentDouble extends ArgumentNumber<Double> {
public ArgumentDouble(String id) {
super(id, "brigadier:double", Double::parseDouble, ((s, radix) -> (double) Long.parseLong(s, radix)),
super(id, ArgumentParserType.DOUBLE, Double::parseDouble, ((s, radix) -> (double) Long.parseLong(s, radix)),
NetworkBuffer.DOUBLE, Double::compare);
}

View File

@ -1,11 +1,12 @@
package net.minestom.server.command.builder.arguments.number;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.network.NetworkBuffer;
public class ArgumentFloat extends ArgumentNumber<Float> {
public ArgumentFloat(String id) {
super(id, "brigadier:float", Float::parseFloat, (s, radix) -> (float) Integer.parseInt(s, radix),
super(id, ArgumentParserType.FLOAT, Float::parseFloat, (s, radix) -> (float) Integer.parseInt(s, radix),
NetworkBuffer.FLOAT, Float::compare);
}

View File

@ -1,11 +1,12 @@
package net.minestom.server.command.builder.arguments.number;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.network.NetworkBuffer;
public class ArgumentInteger extends ArgumentNumber<Integer> {
public ArgumentInteger(String id) {
super(id, "brigadier:integer", Integer::parseInt, Integer::parseInt,
super(id, ArgumentParserType.INTEGER, Integer::parseInt, Integer::parseInt,
NetworkBuffer.INT, Integer::compare);
}

View File

@ -1,11 +1,12 @@
package net.minestom.server.command.builder.arguments.number;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.network.NetworkBuffer;
public class ArgumentLong extends ArgumentNumber<Long> {
public ArgumentLong(String id) {
super(id, "brigadier:long", Long::parseLong, Long::parseLong,
super(id, ArgumentParserType.LONG, Long::parseLong, Long::parseLong,
NetworkBuffer.LONG, Long::compare);
}

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.number;
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;
@ -22,13 +23,13 @@ public class ArgumentNumber<T extends Number> extends Argument<T> {
protected boolean hasMin, hasMax;
protected T min, max;
protected final String parserName;
protected final ArgumentParserType parserName;
protected final BiFunction<String, Integer, T> radixParser;
protected final Function<String, T> parser;
protected final NetworkBuffer.Type<T> networkType;
protected final Comparator<T> comparator;
ArgumentNumber(@NotNull String id, String parserName, Function<String, T> parser,
ArgumentNumber(@NotNull String id, ArgumentParserType parserName, Function<String, T> parser,
BiFunction<String, Integer, T> radixParser, NetworkBuffer.Type<T> networkType,
Comparator<T> comparator) {
super(id);
@ -65,7 +66,7 @@ public class ArgumentNumber<T extends Number> extends Argument<T> {
}
@Override
public String parser() {
public ArgumentParserType parser() {
return parserName;
}

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.relative;
import net.minestom.server.command.ArgumentParserType;
import org.jetbrains.annotations.NotNull;
import java.util.function.Function;
@ -16,8 +17,8 @@ public class ArgumentRelativeBlockPosition extends ArgumentRelativeVec {
}
@Override
public String parser() {
return "minecraft:block_pos";
public ArgumentParserType parser() {
return ArgumentParserType.BLOCK_POS;
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.relative;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.coordinate.Vec;
import org.jetbrains.annotations.NotNull;
@ -17,8 +18,8 @@ public class ArgumentRelativeVec2 extends ArgumentRelativeVec {
}
@Override
public String parser() {
return "minecraft:vec2";
public ArgumentParserType parser() {
return ArgumentParserType.VEC2;
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.command.builder.arguments.relative;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.coordinate.Vec;
import org.jetbrains.annotations.NotNull;
@ -17,8 +18,8 @@ public class ArgumentRelativeVec3 extends ArgumentRelativeVec {
}
@Override
public String parser() {
return "minecraft:vec3";
public ArgumentParserType parser() {
return ArgumentParserType.VEC3;
}
@Override

View File

@ -1,10 +1,9 @@
package net.minestom.server.network.packet.server.play;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.network.NetworkBuffer;
import net.minestom.server.network.NetworkBufferTemplate;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.registry.StaticProtocolObject;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@ -36,7 +35,7 @@ public record DeclareCommandsPacket(@NotNull List<Node> nodes,
public int[] children = new int[0];
public int redirectedNode; // Only if flags & 0x08
public String name = ""; // Only for literal and argument
public String parser; // Only for argument
public ArgumentParserType parser; // Only for argument
public byte[] properties; // Only for argument
public String suggestionsType = ""; // Only if flags 0x10
@ -59,8 +58,7 @@ public record DeclareCommandsPacket(@NotNull List<Node> nodes,
}
if (value.isArgument()) {
final int parserId = Argument.CONTAINER.toId(value.parser);
writer.write(VAR_INT, parserId);
writer.write(ArgumentParserType.NETWORK_TYPE, value.parser);
if (value.properties != null) {
writer.write(RAW_BYTES, value.properties);
}
@ -84,8 +82,7 @@ public record DeclareCommandsPacket(@NotNull List<Node> nodes,
}
if (node.isArgument()) {
final StaticProtocolObject object = Argument.CONTAINER.getId(reader.read(VAR_INT));
node.parser = object.name();
node.parser = reader.read(ArgumentParserType.NETWORK_TYPE);
node.properties = node.getProperties(reader, node.parser);
}
@ -96,7 +93,7 @@ public record DeclareCommandsPacket(@NotNull List<Node> nodes,
}
};
private byte[] getProperties(@NotNull NetworkBuffer reader, String parser) {
private byte[] getProperties(@NotNull NetworkBuffer reader, @NotNull ArgumentParserType parser) {
final Function<Function<NetworkBuffer, ?>, byte[]> minMaxExtractor = (via) -> reader.extractBytes((extractor) -> {
byte flags = extractor.read(BYTE);
if ((flags & 0x01) == 0x01) {
@ -107,15 +104,14 @@ public record DeclareCommandsPacket(@NotNull List<Node> nodes,
}
});
return switch (parser) {
case "brigadier:double" -> minMaxExtractor.apply(b -> b.read(DOUBLE));
case "brigadier:integer" -> minMaxExtractor.apply(b -> b.read(INT));
case "brigadier:float" -> minMaxExtractor.apply(b -> b.read(FLOAT));
case "brigadier:long" -> minMaxExtractor.apply(b -> b.read(LONG));
case "brigadier:string" -> reader.extractBytes(b -> b.read(VAR_INT));
case "minecraft:entity", "minecraft:score_holder" -> reader.extractBytes(b -> b.read(BYTE));
case "minecraft:range" ->
reader.extractBytes(b -> b.read(BOOLEAN)); // https://wiki.vg/Command_Data#minecraft:range, looks fishy
case "minecraft:resource_or_tag", "minecraft:registry" -> reader.extractBytes(b -> b.read(STRING));
case DOUBLE -> minMaxExtractor.apply(b -> b.read(DOUBLE));
case INTEGER -> minMaxExtractor.apply(b -> b.read(INT));
case FLOAT -> minMaxExtractor.apply(b -> b.read(FLOAT));
case LONG -> minMaxExtractor.apply(b -> b.read(LONG));
case STRING -> reader.extractBytes(b -> b.read(VAR_INT));
case ENTITY, SCORE_HOLDER -> reader.extractBytes(b -> b.read(BYTE));
case TIME -> reader.extractBytes(b -> b.read(INT));
case RESOURCE_OR_TAG, RESOURCE_OR_TAG_KEY, RESOURCE, RESOURCE_KEY -> reader.extractBytes(b -> b.read(STRING));
default -> new byte[0]; // unknown
};
}

View File

@ -214,7 +214,6 @@ public final class Registry {
ENTITIES("entities.json"),
FEATURE_FLAGS("feature_flags.json"),
SOUNDS("sounds.json"),
COMMAND_ARGUMENTS("command_arguments.json"),
STATISTICS("custom_statistics.json"),
POTION_EFFECTS("potion_effects.json"),
POTION_TYPES("potions.json"),

View File

@ -1,5 +1,6 @@
package net.minestom.server.command;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
@ -10,6 +11,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
public class CommandPacketTest {
static {
MinecraftServer.init();
}
@Test
public void singleCommandWithOneSyntax() {
final Command foo = new Command("foo");
@ -49,12 +54,12 @@ public class CommandPacketTest {
execute facing at as in run=%
overworld the_nether the_end=§
0->execute
atEnt asEnt=targets minecraft:entity 0
atEnt asEnt=targets ENTITY 0
execute->facing at as in run
at->atEnt
as->asEnt
in->overworld the_nether the_end
pos=! minecraft:vec3
pos=! VEC3
facing->pos
pos atEnt asEnt overworld the_nether the_end+>execute
run+>0
@ -95,7 +100,7 @@ public class CommandPacketTest {
.build();
assertPacketGraph("""
foo=%
bar=! brigadier:string 0
bar=! STRING 0
0->foo
foo->bar
""", graph);
@ -128,7 +133,7 @@ public class CommandPacketTest {
foo bar=%
0->foo bar
a b c d e f=§
int1 int2 int3 int4=! brigadier:integer 0
int1 int2 int3 int4=! INTEGER 0
foo->int1
bar->int3
int1->a b c
@ -146,7 +151,7 @@ public class CommandPacketTest {
.build();
assertPacketGraph("""
foo=%
int1 int2 int3 int4=! brigadier:integer 0
int1 int2 int3 int4=! INTEGER 0
0->foo
foo->int1
int1->int2
@ -205,7 +210,7 @@ public class CommandPacketTest {
bar->cmd
cmd+>foo
foo->msg
msg=! brigadier:string 1
msg=! STRING 1
""", foo, bar);
}
@ -223,7 +228,7 @@ public class CommandPacketTest {
bar->cmd
cmd+>foo
foo->msg
msg=! brigadier:string 1
msg=! STRING 1
""", foo, bar);
}

View File

@ -1,5 +1,6 @@
package net.minestom.server.network.packet;
import net.minestom.server.command.ArgumentParserType;
import net.minestom.server.network.NetworkBuffer;
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
import org.junit.jupiter.api.Test;
@ -15,11 +16,11 @@ public class DeclareCommandsPacketTest {
void testWriteGameProfileArg() {
var root = new DeclareCommandsPacket.Node();
root.flags = getFlag(DeclareCommandsPacket.NodeType.ARGUMENT, false, false, false);
root.parser = "minecraft:game_profile";
root.parser = ArgumentParserType.GAME_PROFILE;
var packet = new DeclareCommandsPacket(List.of(root), 0);
var array = NetworkBuffer.makeArray(DeclareCommandsPacket.SERIALIZER, packet);
var readPacket = NetworkBuffer.wrap(array, 0, array.length).read(DeclareCommandsPacket.SERIALIZER);
assertEquals("minecraft:game_profile", readPacket.nodes().getFirst().parser);
assertEquals(ArgumentParserType.GAME_PROFILE, readPacket.nodes().getFirst().parser);
}
}