StringTagVisitor.java

net.minecraft.nbt.StringTagVisitor

信息

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

    TODO

字段/常量

  • UNQUOTED_KEY_MATCH

    • 类型: Pattern
    • 修饰符: private static final
    • 源码定位: L9
    • 说明:

      TODO

  • builder

    • 类型: StringBuilder
    • 修饰符: private final
    • 源码定位: L10
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

public String build() @ L12

  • 方法名:build
  • 源码定位:L12
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public void visitString(StringTag tag) @ L16

  • 方法名:visitString
  • 源码定位:L16
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: StringTag

说明:

TODO

public void visitByte(ByteTag tag) @ L21

  • 方法名:visitByte
  • 源码定位:L21
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: ByteTag

说明:

TODO

public void visitShort(ShortTag tag) @ L26

  • 方法名:visitShort
  • 源码定位:L26
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: ShortTag

说明:

TODO

public void visitInt(IntTag tag) @ L31

  • 方法名:visitInt
  • 源码定位:L31
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: IntTag

说明:

TODO

public void visitLong(LongTag tag) @ L36

  • 方法名:visitLong
  • 源码定位:L36
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: LongTag

说明:

TODO

public void visitFloat(FloatTag tag) @ L41

  • 方法名:visitFloat
  • 源码定位:L41
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: FloatTag

说明:

TODO

public void visitDouble(DoubleTag tag) @ L46

  • 方法名:visitDouble
  • 源码定位:L46
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: DoubleTag

说明:

TODO

public void visitByteArray(ByteArrayTag tag) @ L51

  • 方法名:visitByteArray
  • 源码定位:L51
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: ByteArrayTag

说明:

TODO

public void visitIntArray(IntArrayTag tag) @ L67

  • 方法名:visitIntArray
  • 源码定位:L67
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: IntArrayTag

说明:

TODO

public void visitLongArray(LongArrayTag tag) @ L83

  • 方法名:visitLongArray
  • 源码定位:L83
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: LongArrayTag

说明:

TODO

public void visitList(ListTag tag) @ L99

  • 方法名:visitList
  • 源码定位:L99
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: ListTag

说明:

TODO

public void visitCompound(CompoundTag tag) @ L114

  • 方法名:visitCompound
  • 源码定位:L114
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: CompoundTag

说明:

TODO

private void handleKeyEscape(String input) @ L134

  • 方法名:handleKeyEscape
  • 源码定位:L134
  • 返回类型:void
  • 修饰符:private

参数:

  • input: String

说明:

TODO

public void visitEnd(EndTag tag) @ L142

  • 方法名:visitEnd
  • 源码定位:L142
  • 返回类型:void
  • 修饰符:public

参数:

  • tag: EndTag

说明:

TODO

代码

public class StringTagVisitor implements TagVisitor {
    private static final Pattern UNQUOTED_KEY_MATCH = Pattern.compile("[A-Za-z._]+[A-Za-z0-9._+-]*");
    private final StringBuilder builder = new StringBuilder();
 
    public String build() {
        return this.builder.toString();
    }
 
    @Override
    public void visitString(StringTag tag) {
        this.builder.append(StringTag.quoteAndEscape(tag.value()));
    }
 
    @Override
    public void visitByte(ByteTag tag) {
        this.builder.append(tag.value()).append('b');
    }
 
    @Override
    public void visitShort(ShortTag tag) {
        this.builder.append(tag.value()).append('s');
    }
 
    @Override
    public void visitInt(IntTag tag) {
        this.builder.append(tag.value());
    }
 
    @Override
    public void visitLong(LongTag tag) {
        this.builder.append(tag.value()).append('L');
    }
 
    @Override
    public void visitFloat(FloatTag tag) {
        this.builder.append(tag.value()).append('f');
    }
 
    @Override
    public void visitDouble(DoubleTag tag) {
        this.builder.append(tag.value()).append('d');
    }
 
    @Override
    public void visitByteArray(ByteArrayTag tag) {
        this.builder.append("[B;");
        byte[] data = tag.getAsByteArray();
 
        for (int i = 0; i < data.length; i++) {
            if (i != 0) {
                this.builder.append(',');
            }
 
            this.builder.append(data[i]).append('B');
        }
 
        this.builder.append(']');
    }
 
    @Override
    public void visitIntArray(IntArrayTag tag) {
        this.builder.append("[I;");
        int[] data = tag.getAsIntArray();
 
        for (int i = 0; i < data.length; i++) {
            if (i != 0) {
                this.builder.append(',');
            }
 
            this.builder.append(data[i]);
        }
 
        this.builder.append(']');
    }
 
    @Override
    public void visitLongArray(LongArrayTag tag) {
        this.builder.append("[L;");
        long[] data = tag.getAsLongArray();
 
        for (int i = 0; i < data.length; i++) {
            if (i != 0) {
                this.builder.append(',');
            }
 
            this.builder.append(data[i]).append('L');
        }
 
        this.builder.append(']');
    }
 
    @Override
    public void visitList(ListTag tag) {
        this.builder.append('[');
 
        for (int i = 0; i < tag.size(); i++) {
            if (i != 0) {
                this.builder.append(',');
            }
 
            tag.get(i).accept(this);
        }
 
        this.builder.append(']');
    }
 
    @Override
    public void visitCompound(CompoundTag tag) {
        this.builder.append('{');
        List<Entry<String, Tag>> entries = new ArrayList<>(tag.entrySet());
        entries.sort(Entry.comparingByKey());
 
        for (int i = 0; i < entries.size(); i++) {
            Entry<String, Tag> entry = entries.get(i);
            if (i != 0) {
                this.builder.append(',');
            }
 
            this.handleKeyEscape(entry.getKey());
            this.builder.append(':');
            entry.getValue().accept(this);
        }
 
        this.builder.append('}');
    }
 
    private void handleKeyEscape(String input) {
        if (!input.equalsIgnoreCase("true") && !input.equalsIgnoreCase("false") && UNQUOTED_KEY_MATCH.matcher(input).matches()) {
            this.builder.append(input);
        } else {
            StringTag.quoteAndEscape(input, this.builder);
        }
    }
 
    @Override
    public void visitEnd(EndTag tag) {
        this.builder.append("END");
    }
}

引用的其他类