SnbtOperations.java

net.minecraft.nbt.SnbtOperations

信息

  • 全限定名:net.minecraft.nbt.SnbtOperations
  • 类型:public class
  • 包:net.minecraft.nbt
  • 源码路径:src/main/java/net/minecraft/nbt/SnbtOperations.java
  • 起始行号:L22
  • 职责:

    TODO

字段/常量

  • ERROR_EXPECTED_STRING_UUID

    • 类型: DelayedException<CommandSyntaxException>
    • 修饰符: private static final
    • 源码定位: L23
    • 说明:

      TODO

  • ERROR_EXPECTED_NUMBER_OR_BOOLEAN

    • 类型: DelayedException<CommandSyntaxException>
    • 修饰符: private static final
    • 源码定位: L26
    • 说明:

      TODO

  • BUILTIN_TRUE

    • 类型: String
    • 修饰符: public static final
    • 源码定位: L29
    • 说明:

      TODO

  • BUILTIN_FALSE

    • 类型: String
    • 修饰符: public static final
    • 源码定位: L30
    • 说明:

      TODO

  • BUILTIN_OPERATIONS

    • 类型: Map<SnbtOperations.BuiltinKey,SnbtOperations.BuiltinOperation>
    • 修饰符: public static final public private static public
    • 源码定位: L31
    • 说明:

      TODO

  • BUILTIN_IDS

    • 类型: SuggestionSupplier<StringReader>
    • 修饰符: public static final private final public
    • 源码定位: L74
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.nbt.SnbtOperations.BuiltinKey

    • 类型: record
    • 修饰符: public
    • 源码定位: L86
    • 说明:

      TODO

  • net.minecraft.nbt.SnbtOperations.BuiltinOperation

    • 类型: interface
    • 修饰符: public
    • 源码定位: L93
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

代码

public class SnbtOperations {
    private static final DelayedException<CommandSyntaxException> ERROR_EXPECTED_STRING_UUID = DelayedException.create(
        new SimpleCommandExceptionType(Component.translatable("snbt.parser.expected_string_uuid"))
    );
    private static final DelayedException<CommandSyntaxException> ERROR_EXPECTED_NUMBER_OR_BOOLEAN = DelayedException.create(
        new SimpleCommandExceptionType(Component.translatable("snbt.parser.expected_number_or_boolean"))
    );
    public static final String BUILTIN_TRUE = "true";
    public static final String BUILTIN_FALSE = "false";
    public static final Map<SnbtOperations.BuiltinKey, SnbtOperations.BuiltinOperation> BUILTIN_OPERATIONS = Map.of(
        new SnbtOperations.BuiltinKey("bool", 1), new SnbtOperations.BuiltinOperation() {
            @Override
            public <T> T run(DynamicOps<T> ops, List<T> arguments, ParseState<StringReader> state) {
                Boolean result = convert(ops, arguments.getFirst());
                if (result == null) {
                    state.errorCollector().store(state.mark(), SnbtOperations.ERROR_EXPECTED_NUMBER_OR_BOOLEAN);
                    return null;
                } else {
                    return ops.createBoolean(result);
                }
            }
 
            private static <T> @Nullable Boolean convert(DynamicOps<T> ops, T arg) {
                Optional<Boolean> asBoolean = ops.getBooleanValue(arg).result();
                if (asBoolean.isPresent()) {
                    return asBoolean.get();
                } else {
                    Optional<Number> asNumber = ops.getNumberValue(arg).result();
                    return asNumber.isPresent() ? asNumber.get().doubleValue() != 0.0 : null;
                }
            }
        }, new SnbtOperations.BuiltinKey("uuid", 1), new SnbtOperations.BuiltinOperation() {
            @Override
            public <T> T run(DynamicOps<T> ops, List<T> arguments, ParseState<StringReader> state) {
                Optional<String> arg = ops.getStringValue(arguments.getFirst()).result();
                if (arg.isEmpty()) {
                    state.errorCollector().store(state.mark(), SnbtOperations.ERROR_EXPECTED_STRING_UUID);
                    return null;
                } else {
                    UUID uuid;
                    try {
                        uuid = UUID.fromString(arg.get());
                    } catch (IllegalArgumentException var7) {
                        state.errorCollector().store(state.mark(), SnbtOperations.ERROR_EXPECTED_STRING_UUID);
                        return null;
                    }
 
                    return ops.createIntList(IntStream.of(UUIDUtil.uuidToIntArray(uuid)));
                }
            }
        }
    );
    public static final SuggestionSupplier<StringReader> BUILTIN_IDS = new SuggestionSupplier<StringReader>() {
        private final Set<String> keys = Stream.concat(
                Stream.of("false", "true"), SnbtOperations.BUILTIN_OPERATIONS.keySet().stream().map(SnbtOperations.BuiltinKey::id)
            )
            .collect(Collectors.toSet());
 
        @Override
        public Stream<String> possibleValues(ParseState<StringReader> state) {
            return this.keys.stream();
        }
    };
 
    public record BuiltinKey(String id, int argCount) {
        @Override
        public String toString() {
            return this.id + "/" + this.argCount;
        }
    }
 
    public interface BuiltinOperation {
        <T> @Nullable T run(DynamicOps<T> ops, List<T> arguments, ParseState<StringReader> state);
    }
}

引用的其他类

  • UUIDUtil

    • 引用位置: 方法调用
    • 关联成员: UUIDUtil.uuidToIntArray()
  • Component

    • 引用位置: 方法调用
    • 关联成员: Component.translatable()
  • DelayedException

    • 引用位置: 字段/方法调用
    • 关联成员: DelayedException.create()
  • SuggestionSupplier

    • 引用位置: 字段