vanilla types laid out
This commit is contained in:
1 parent
945578fd89
commit
faf4d7b7db
1 file changed
+136
-14
@@ -10,10 +10,11 @@ import carpet.script.value.StringValue;
|
|||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
import carpet.script.value.ValueConversions;
|
import carpet.script.value.ValueConversions;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.mojang.brigadier.StringReader;
|
|
||||||
import com.mojang.brigadier.arguments.ArgumentType;
|
import com.mojang.brigadier.arguments.ArgumentType;
|
||||||
import com.mojang.brigadier.arguments.BoolArgumentType;
|
import com.mojang.brigadier.arguments.BoolArgumentType;
|
||||||
import com.mojang.brigadier.arguments.DoubleArgumentType;
|
import com.mojang.brigadier.arguments.DoubleArgumentType;
|
||||||
|
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||||
|
import com.mojang.brigadier.arguments.LongArgumentType;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||||
import com.mojang.brigadier.context.CommandContext;
|
import com.mojang.brigadier.context.CommandContext;
|
||||||
@@ -22,13 +23,14 @@ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
|||||||
import com.mojang.brigadier.suggestion.Suggestions;
|
import com.mojang.brigadier.suggestion.Suggestions;
|
||||||
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||||
import net.minecraft.command.argument.AngleArgumentType;
|
import net.minecraft.command.argument.AngleArgumentType;
|
||||||
import net.minecraft.command.argument.BlockArgumentParser;
|
|
||||||
import net.minecraft.command.argument.BlockPosArgumentType;
|
import net.minecraft.command.argument.BlockPosArgumentType;
|
||||||
import net.minecraft.command.argument.BlockStateArgument;
|
import net.minecraft.command.argument.BlockStateArgument;
|
||||||
import net.minecraft.command.argument.BlockStateArgumentType;
|
import net.minecraft.command.argument.BlockStateArgumentType;
|
||||||
import net.minecraft.command.argument.ColorArgumentType;
|
import net.minecraft.command.argument.ColorArgumentType;
|
||||||
import net.minecraft.command.argument.RotationArgumentType;
|
import net.minecraft.command.argument.RotationArgumentType;
|
||||||
import net.minecraft.command.argument.SwizzleArgumentType;
|
import net.minecraft.command.argument.SwizzleArgumentType;
|
||||||
|
import net.minecraft.command.argument.TimeArgumentType;
|
||||||
|
import net.minecraft.command.argument.Vec3ArgumentType;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.LiteralText;
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
@@ -53,9 +55,11 @@ import static net.minecraft.server.command.CommandManager.argument;
|
|||||||
public abstract class CommandArgument
|
public abstract class CommandArgument
|
||||||
{
|
{
|
||||||
private static final List<? extends CommandArgument> baseTypes = Lists.newArrayList(
|
private static final List<? extends CommandArgument> baseTypes = Lists.newArrayList(
|
||||||
|
// default
|
||||||
new StringArgument(),
|
new StringArgument(),
|
||||||
// custom arguments
|
// other customizable string arguments
|
||||||
new WordArgument(), new GreedyStringArgument(), new BlockPosArgument(), new FloatArgument(),
|
new WordArgument(), new GreedyStringArgument(),
|
||||||
|
new BlockPosArgument(), new FloatArgument(), new IntArgument(),
|
||||||
// etc...
|
// etc...
|
||||||
// vanilla arguments
|
// vanilla arguments
|
||||||
new VanillaUnconfigurableArgument( "bool",
|
new VanillaUnconfigurableArgument( "bool",
|
||||||
@@ -84,12 +88,30 @@ public abstract class CommandArgument
|
|||||||
return ListValue.of(StringValue.of(format.getName()), new NumericValue(format.getColorValue()*256+255));
|
return ListValue.of(StringValue.of(format.getName()), new NumericValue(format.getColorValue()*256+255));
|
||||||
},
|
},
|
||||||
false
|
false
|
||||||
),
|
|
||||||
new VanillaUnconfigurableArgument("swizzle",
|
|
||||||
SwizzleArgumentType::swizzle,
|
|
||||||
(c, p) -> StringValue.of(SwizzleArgumentType.getSwizzle(c, p).stream().map(Direction.Axis::asString).collect(Collectors.joining())),
|
|
||||||
true
|
|
||||||
),
|
),
|
||||||
|
// columnpos
|
||||||
|
// component // raw json
|
||||||
|
// dimension
|
||||||
|
// entity
|
||||||
|
// anchor // entity_anchor
|
||||||
|
// entitytype // entity_summon
|
||||||
|
// floatrange
|
||||||
|
// function??
|
||||||
|
// player // game_profile
|
||||||
|
// intrange
|
||||||
|
// enchantment
|
||||||
|
// item_predicate ?? //same as item but accepts tags, not sure right now
|
||||||
|
// slot // item_slot
|
||||||
|
// item // no tags item_stack
|
||||||
|
// message ?? isn't it just because you can't do shit with texts in vanilla?
|
||||||
|
// effect // mob_effect
|
||||||
|
// tag // for nbt_compound_tag and nbt_tag
|
||||||
|
// nbtpath
|
||||||
|
// objective
|
||||||
|
// criterion
|
||||||
|
// operation // not sure if we need it, you have scarpet for that
|
||||||
|
// particle
|
||||||
|
// resource ??
|
||||||
new VanillaUnconfigurableArgument("rotation",
|
new VanillaUnconfigurableArgument("rotation",
|
||||||
RotationArgumentType::rotation,
|
RotationArgumentType::rotation,
|
||||||
(c, p) -> {
|
(c, p) -> {
|
||||||
@@ -97,11 +119,25 @@ public abstract class CommandArgument
|
|||||||
return ListValue.of(new NumericValue(rot.x), new NumericValue(rot.y));
|
return ListValue.of(new NumericValue(rot.x), new NumericValue(rot.y));
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
)
|
),
|
||||||
//etc...
|
// scoreholder
|
||||||
|
// scoreboardslot
|
||||||
|
new VanillaUnconfigurableArgument("swizzle",
|
||||||
);
|
SwizzleArgumentType::swizzle,
|
||||||
|
(c, p) -> StringValue.of(SwizzleArgumentType.getSwizzle(c, p).stream().map(Direction.Axis::asString).collect(Collectors.joining())),
|
||||||
|
true
|
||||||
|
),
|
||||||
|
// team
|
||||||
|
new VanillaUnconfigurableArgument("time",
|
||||||
|
TimeArgumentType::time,
|
||||||
|
(c, p) -> new NumericValue(IntegerArgumentType.getInteger(c, p)),
|
||||||
|
false
|
||||||
|
),
|
||||||
|
// uuid
|
||||||
|
// columnlocation // vec2
|
||||||
|
new LocationArgument()
|
||||||
|
// location // vec3
|
||||||
|
);
|
||||||
|
|
||||||
public static final Map<String, CommandArgument> builtIns = baseTypes.stream().collect(Collectors.toMap(CommandArgument::getTypeSuffix, a -> a));
|
public static final Map<String, CommandArgument> builtIns = baseTypes.stream().collect(Collectors.toMap(CommandArgument::getTypeSuffix, a -> a));
|
||||||
|
|
||||||
@@ -323,6 +359,41 @@ public abstract class CommandArgument
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class LocationArgument extends CommandArgument
|
||||||
|
{
|
||||||
|
boolean blockCentered;
|
||||||
|
|
||||||
|
private LocationArgument()
|
||||||
|
{
|
||||||
|
super("location", Vec3ArgumentType.vec3().getExamples(), false);
|
||||||
|
blockCentered = true;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected ArgumentType<?> getArgumentType()
|
||||||
|
{
|
||||||
|
return Vec3ArgumentType.vec3(blockCentered);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Value getValueFromContext(CommandContext<ServerCommandSource> context, String param) throws CommandSyntaxException
|
||||||
|
{
|
||||||
|
return ValueConversions.fromVec(Vec3ArgumentType.getVec3(context, param));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(Map<String, Value> config)
|
||||||
|
{
|
||||||
|
super.configure(config);
|
||||||
|
blockCentered = config.getOrDefault("block_centered", Value.TRUE).getBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Supplier<CommandArgument> builder()
|
||||||
|
{
|
||||||
|
return LocationArgument::new;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class FloatArgument extends CommandArgument
|
private static class FloatArgument extends CommandArgument
|
||||||
{
|
{
|
||||||
private Double min = null;
|
private Double min = null;
|
||||||
@@ -374,6 +445,57 @@ public abstract class CommandArgument
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class IntArgument extends CommandArgument
|
||||||
|
{
|
||||||
|
private Long min = null;
|
||||||
|
private Long max = null;
|
||||||
|
private IntArgument()
|
||||||
|
{
|
||||||
|
super("int", LongArgumentType.longArg().getExamples(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArgumentType<?> getArgumentType()
|
||||||
|
{
|
||||||
|
if (min != null)
|
||||||
|
{
|
||||||
|
if (max != null)
|
||||||
|
{
|
||||||
|
return LongArgumentType.longArg(min, max);
|
||||||
|
}
|
||||||
|
return LongArgumentType.longArg(min);
|
||||||
|
}
|
||||||
|
return LongArgumentType.longArg();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value getValueFromContext(CommandContext<ServerCommandSource> context, String param) throws CommandSyntaxException
|
||||||
|
{
|
||||||
|
return new NumericValue(LongArgumentType.getLong(context, param));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(Map<String, Value> config)
|
||||||
|
{
|
||||||
|
super.configure(config);
|
||||||
|
if (config.containsKey("min"))
|
||||||
|
{
|
||||||
|
min = NumericValue.asNumber(config.get("min"), "min").getLong();
|
||||||
|
}
|
||||||
|
if (config.containsKey("max"))
|
||||||
|
{
|
||||||
|
max = NumericValue.asNumber(config.get("max"), "max").getLong();
|
||||||
|
}
|
||||||
|
if (max != null && min == null) throw new InternalExpressionException("Double types cannot be only upper-bounded");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Supplier<CommandArgument> builder()
|
||||||
|
{
|
||||||
|
return FloatArgument::new;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class VanillaUnconfigurableArgument extends CommandArgument
|
public static class VanillaUnconfigurableArgument extends CommandArgument
|
||||||
{
|
{
|
||||||
private Supplier<ArgumentType<?>> argumentTypeSupplier;
|
private Supplier<ArgumentType<?>> argumentTypeSupplier;
|
||||||
|
|||||||
Reference in new issue
Block a user