TagParser.java

net.minecraft.nbt.TagParser

信息

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

    TODO

字段/常量

  • ERROR_TRAILING_DATA

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

      TODO

  • ERROR_EXPECTED_COMPOUND

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

      TODO

  • ELEMENT_SEPARATOR

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

      TODO

  • NAME_VALUE_SEPARATOR

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

      TODO

  • NBT_OPS_PARSER

    • 类型: TagParser<Tag>
    • 修饰符: private static final
    • 源码定位: L20
    • 说明:

      TODO

  • FLATTENED_CODEC

    • 类型: Codec<CompoundTag>
    • 修饰符: public static final
    • 源码定位: L21
    • 说明:

      TODO

  • LENIENT_CODEC

    • 类型: Codec<CompoundTag>
    • 修饰符: public static final
    • 源码定位: L35
    • 说明:

      TODO

  • ops

    • 类型: DynamicOps<T>
    • 修饰符: private final
    • 源码定位: L36
    • 说明:

      TODO

  • grammar

    • 类型: Grammar<T>
    • 修饰符: private final
    • 源码定位: L37
    • 说明:

      TODO

内部类/嵌套类型

构造器

private TagParser(DynamicOps<T> ops, Grammar<T> grammar) @ L39

  • 构造器名:TagParser
  • 源码定位:L39
  • 修饰符:private

参数:

  • ops: DynamicOps
  • grammar: Grammar

说明:

TODO

方法

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

public DynamicOps<T> getOps() @ L44

  • 方法名:getOps
  • 源码定位:L44
  • 返回类型:DynamicOps
  • 修饰符:public

参数:

说明:

TODO

public static <T> TagParser<T> create(DynamicOps<T> ops) @ L48

  • 方法名:create
  • 源码定位:L48
  • 返回类型: TagParser
  • 修饰符:public static

参数:

  • ops: DynamicOps

说明:

TODO

private static CompoundTag castToCompoundOrThrow(StringReader reader, Tag result) @ L52

  • 方法名:castToCompoundOrThrow
  • 源码定位:L52
  • 返回类型:CompoundTag
  • 修饰符:private static

参数:

  • reader: StringReader
  • result: Tag

说明:

TODO

public static CompoundTag parseCompoundFully(String input) @ L60

  • 方法名:parseCompoundFully
  • 源码定位:L60
  • 返回类型:CompoundTag
  • 修饰符:public static

参数:

  • input: String

说明:

TODO

public T parseFully(String input) @ L65

  • 方法名:parseFully
  • 源码定位:L65
  • 返回类型:T
  • 修饰符:public

参数:

  • input: String

说明:

TODO

public T parseFully(StringReader reader) @ L69

  • 方法名:parseFully
  • 源码定位:L69
  • 返回类型:T
  • 修饰符:public

参数:

  • reader: StringReader

说明:

TODO

public T parseAsArgument(StringReader reader) @ L79

  • 方法名:parseAsArgument
  • 源码定位:L79
  • 返回类型:T
  • 修饰符:public

参数:

  • reader: StringReader

说明:

TODO

public static CompoundTag parseCompoundAsArgument(StringReader reader) @ L83

  • 方法名:parseCompoundAsArgument
  • 源码定位:L83
  • 返回类型:CompoundTag
  • 修饰符:public static

参数:

  • reader: StringReader

说明:

TODO

代码

public class TagParser<T> {
    public static final SimpleCommandExceptionType ERROR_TRAILING_DATA = new SimpleCommandExceptionType(Component.translatable("argument.nbt.trailing"));
    public static final SimpleCommandExceptionType ERROR_EXPECTED_COMPOUND = new SimpleCommandExceptionType(
        Component.translatable("argument.nbt.expected.compound")
    );
    public static final char ELEMENT_SEPARATOR = ',';
    public static final char NAME_VALUE_SEPARATOR = ':';
    private static final TagParser<Tag> NBT_OPS_PARSER = create(NbtOps.INSTANCE);
    public static final Codec<CompoundTag> FLATTENED_CODEC = Codec.STRING
        .comapFlatMap(
            s -> {
                try {
                    Tag result = NBT_OPS_PARSER.parseFully(s);
                    return result instanceof CompoundTag compoundTag
                        ? DataResult.success(compoundTag, Lifecycle.stable())
                        : DataResult.error(() -> "Expected compound tag, got " + result);
                } catch (CommandSyntaxException var3) {
                    return DataResult.error(var3::getMessage);
                }
            },
            CompoundTag::toString
        );
    public static final Codec<CompoundTag> LENIENT_CODEC = Codec.withAlternative(FLATTENED_CODEC, CompoundTag.CODEC);
    private final DynamicOps<T> ops;
    private final Grammar<T> grammar;
 
    private TagParser(DynamicOps<T> ops, Grammar<T> grammar) {
        this.ops = ops;
        this.grammar = grammar;
    }
 
    public DynamicOps<T> getOps() {
        return this.ops;
    }
 
    public static <T> TagParser<T> create(DynamicOps<T> ops) {
        return new TagParser<>(ops, SnbtGrammar.createParser(ops));
    }
 
    private static CompoundTag castToCompoundOrThrow(StringReader reader, Tag result) throws CommandSyntaxException {
        if (result instanceof CompoundTag compoundTag) {
            return compoundTag;
        } else {
            throw ERROR_EXPECTED_COMPOUND.createWithContext(reader);
        }
    }
 
    public static CompoundTag parseCompoundFully(String input) throws CommandSyntaxException {
        StringReader reader = new StringReader(input);
        return castToCompoundOrThrow(reader, NBT_OPS_PARSER.parseFully(reader));
    }
 
    public T parseFully(String input) throws CommandSyntaxException {
        return this.parseFully(new StringReader(input));
    }
 
    public T parseFully(StringReader reader) throws CommandSyntaxException {
        T result = this.grammar.parseForCommands(reader);
        reader.skipWhitespace();
        if (reader.canRead()) {
            throw ERROR_TRAILING_DATA.createWithContext(reader);
        } else {
            return result;
        }
    }
 
    public T parseAsArgument(StringReader reader) throws CommandSyntaxException {
        return this.grammar.parseForCommands(reader);
    }
 
    public static CompoundTag parseCompoundAsArgument(StringReader reader) throws CommandSyntaxException {
        Tag result = NBT_OPS_PARSER.parseAsArgument(reader);
        return castToCompoundOrThrow(reader, result);
    }
}

引用的其他类

  • CompoundTag

    • 引用位置: 字段/返回值
  • SnbtGrammar

    • 引用位置: 方法调用
    • 关联成员: SnbtGrammar.createParser()
  • Tag

    • 引用位置: 参数/字段
  • Component

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

    • 引用位置: 参数/字段