NbtOps.java

net.minecraft.nbt.NbtOps

信息

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

    TODO

字段/常量

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

      TODO

内部类/嵌套类型

  • net.minecraft.nbt.NbtOps.ByteListCollector

    • 类型: class
    • 修饰符: private static
    • 源码定位: L388
    • 说明:

      TODO

  • net.minecraft.nbt.NbtOps.GenericListCollector

    • 类型: class
    • 修饰符: private static
    • 源码定位: L411
    • 说明:

      TODO

  • net.minecraft.nbt.NbtOps.IntListCollector

    • 类型: class
    • 修饰符: private static
    • 源码定位: L445
    • 说明:

      TODO

  • net.minecraft.nbt.NbtOps.ListCollector

    • 类型: interface
    • 修饰符: private
    • 源码定位: L468
    • 说明:

      TODO

  • net.minecraft.nbt.NbtOps.LongListCollector

    • 类型: class
    • 修饰符: private static
    • 源码定位: L484
    • 说明:

      TODO

  • net.minecraft.nbt.NbtOps.NbtRecordBuilder

    • 类型: class
    • 修饰符: private
    • 源码定位: L507
    • 说明:

      TODO

构造器

private NbtOps() @ L32

  • 构造器名:NbtOps
  • 源码定位:L32
  • 修饰符:private

参数:

说明:

TODO

方法

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

public Tag empty() @ L35

  • 方法名:empty
  • 源码定位:L35
  • 返回类型:Tag
  • 修饰符:public

参数:

说明:

TODO

public Tag emptyList() @ L39

  • 方法名:emptyList
  • 源码定位:L39
  • 返回类型:Tag
  • 修饰符:public

参数:

说明:

TODO

public Tag emptyMap() @ L43

  • 方法名:emptyMap
  • 源码定位:L43
  • 返回类型:Tag
  • 修饰符:public

参数:

说明:

TODO

public <U> U convertTo(DynamicOps<U> outOps, Tag input) @ L47

  • 方法名:convertTo
  • 源码定位:L47
  • 返回类型: U
  • 修饰符:public

参数:

  • outOps: DynamicOps
  • input: Tag

说明:

TODO

public DataResult<Number> getNumberValue(Tag input) @ L137

  • 方法名:getNumberValue
  • 源码定位:L137
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public Tag createNumeric(Number i) @ L141

  • 方法名:createNumeric
  • 源码定位:L141
  • 返回类型:Tag
  • 修饰符:public

参数:

  • i: Number

说明:

TODO

public Tag createByte(byte value) @ L145

  • 方法名:createByte
  • 源码定位:L145
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: byte

说明:

TODO

public Tag createShort(short value) @ L149

  • 方法名:createShort
  • 源码定位:L149
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: short

说明:

TODO

public Tag createInt(int value) @ L153

  • 方法名:createInt
  • 源码定位:L153
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: int

说明:

TODO

public Tag createLong(long value) @ L157

  • 方法名:createLong
  • 源码定位:L157
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: long

说明:

TODO

public Tag createFloat(float value) @ L161

  • 方法名:createFloat
  • 源码定位:L161
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: float

说明:

TODO

public Tag createDouble(double value) @ L165

  • 方法名:createDouble
  • 源码定位:L165
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: double

说明:

TODO

public Tag createBoolean(boolean value) @ L169

  • 方法名:createBoolean
  • 源码定位:L169
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: boolean

说明:

TODO

public DataResult<String> getStringValue(Tag input) @ L173

  • 方法名:getStringValue
  • 源码定位:L173
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public Tag createString(String value) @ L177

  • 方法名:createString
  • 源码定位:L177
  • 返回类型:Tag
  • 修饰符:public

参数:

  • value: String

说明:

TODO

public DataResult<Tag> mergeToList(Tag list, Tag value) @ L181

  • 方法名:mergeToList
  • 源码定位:L181
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • list: Tag
  • value: Tag

说明:

TODO

public DataResult<Tag> mergeToList(Tag list, List<Tag> values) @ L187

  • 方法名:mergeToList
  • 源码定位:L187
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • list: Tag
  • values: List

说明:

TODO

public DataResult<Tag> mergeToMap(Tag map, Tag key, Tag value) @ L193

  • 方法名:mergeToMap
  • 源码定位:L193
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • map: Tag
  • key: Tag
  • value: Tag

说明:

TODO

public DataResult<Tag> mergeToMap(Tag map, MapLike<Tag> values) @ L206

  • 方法名:mergeToMap
  • 源码定位:L206
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • map: Tag
  • values: MapLike

说明:

TODO

public DataResult<Tag> mergeToMap(Tag map, Map<Tag,Tag> values) @ L229

  • 方法名:mergeToMap
  • 源码定位:L229
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • map: Tag
  • values: Map<Tag,Tag>

说明:

TODO

public DataResult<Stream<Pair<Tag,Tag>>> getMapValues(Tag input) @ L251

  • 方法名:getMapValues
  • 源码定位:L251
  • 返回类型:DataResult<Stream<Pair<Tag,Tag>>>
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public DataResult<Consumer<BiConsumer<Tag,Tag>>> getMapEntries(Tag input) @ L257

  • 方法名:getMapEntries
  • 源码定位:L257
  • 返回类型:DataResult<Consumer<BiConsumer<Tag,Tag>>>
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public DataResult<MapLike<Tag>> getMap(Tag input) @ L265

  • 方法名:getMap
  • 源码定位:L265
  • 返回类型:DataResult<MapLike>
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public Tag createMap(Stream<Pair<Tag,Tag>> map) @ L295

  • 方法名:createMap
  • 源码定位:L295
  • 返回类型:Tag
  • 修饰符:public

参数:

  • map: Stream<Pair<Tag,Tag>>

说明:

TODO

public DataResult<Stream<Tag>> getStream(Tag input) @ L309

  • 方法名:getStream
  • 源码定位:L309
  • 返回类型:DataResult<Stream>
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public DataResult<Consumer<Consumer<Tag>>> getList(Tag input) @ L313

  • 方法名:getList
  • 源码定位:L313
  • 返回类型:DataResult<Consumer<Consumer>>
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public DataResult<ByteBuffer> getByteBuffer(Tag input) @ L317

  • 方法名:getByteBuffer
  • 源码定位:L317
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public Tag createByteList(ByteBuffer input) @ L321

  • 方法名:createByteList
  • 源码定位:L321
  • 返回类型:Tag
  • 修饰符:public

参数:

  • input: ByteBuffer

说明:

TODO

public DataResult<IntStream> getIntStream(Tag input) @ L328

  • 方法名:getIntStream
  • 源码定位:L328
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public Tag createIntList(IntStream input) @ L332

  • 方法名:createIntList
  • 源码定位:L332
  • 返回类型:Tag
  • 修饰符:public

参数:

  • input: IntStream

说明:

TODO

public DataResult<LongStream> getLongStream(Tag input) @ L336

  • 方法名:getLongStream
  • 源码定位:L336
  • 返回类型:DataResult
  • 修饰符:public

参数:

  • input: Tag

说明:

TODO

public Tag createLongList(LongStream input) @ L340

  • 方法名:createLongList
  • 源码定位:L340
  • 返回类型:Tag
  • 修饰符:public

参数:

  • input: LongStream

说明:

TODO

public Tag createList(Stream<Tag> input) @ L344

  • 方法名:createList
  • 源码定位:L344
  • 返回类型:Tag
  • 修饰符:public

参数:

  • input: Stream

说明:

TODO

public Tag remove(Tag input, String key) @ L348

  • 方法名:remove
  • 源码定位:L348
  • 返回类型:Tag
  • 修饰符:public

参数:

  • input: Tag
  • key: String

说明:

TODO

public String toString() @ L358

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

参数:

说明:

TODO

public RecordBuilder<Tag> mapBuilder() @ L363

  • 方法名:mapBuilder
  • 源码定位:L363
  • 返回类型:RecordBuilder
  • 修饰符:public

参数:

说明:

TODO

private static Optional<NbtOps.ListCollector> createCollector(Tag tag) @ L368

  • 方法名:createCollector
  • 源码定位:L368
  • 返回类型:Optional<NbtOps.ListCollector>
  • 修饰符:private static

参数:

  • tag: Tag

说明:

TODO

代码

public class NbtOps implements DynamicOps<Tag> {
    public static final NbtOps INSTANCE = new NbtOps();
 
    private NbtOps() {
    }
 
    public Tag empty() {
        return EndTag.INSTANCE;
    }
 
    public Tag emptyList() {
        return new ListTag();
    }
 
    public Tag emptyMap() {
        return new CompoundTag();
    }
 
    public <U> U convertTo(DynamicOps<U> outOps, Tag input) {
        Objects.requireNonNull(input);
        Object var3 = input;
 
        while (true) {
            Object var10000;
            switch (var3) {
                case EndTag ignored:
                    var10000 = outOps.empty();
                    break;
                case ByteTag(byte var54):
                    byte var34 = var54;
                    if (false) {
                        byte var59 = 2;
                        continue;
                    }
 
                    var10000 = outOps.createByte(var34);
                    break;
                case ShortTag(short var52):
                    short var35 = var52;
                    if (false) {
                        byte var58 = 3;
                        continue;
                    }
 
                    var10000 = outOps.createShort(var35);
                    break;
                case IntTag(int var50):
                    int var36 = var50;
                    if (false) {
                        byte var57 = 4;
                        continue;
                    }
 
                    var10000 = outOps.createInt(var36);
                    break;
                case LongTag(long var48):
                    long var37 = var48;
                    if (false) {
                        byte var56 = 5;
                        continue;
                    }
 
                    var10000 = outOps.createLong(var37);
                    break;
                case FloatTag(float var46):
                    float var38 = var46;
                    if (false) {
                        byte var55 = 6;
                        continue;
                    }
 
                    var10000 = outOps.createFloat(var38);
                    break;
                case DoubleTag(double var44):
                    double var39 = var44;
                    if (false) {
                        byte var4 = 7;
                        continue;
                    }
 
                    var10000 = outOps.createDouble(var39);
                    break;
                case ByteArrayTag byteArrayTag:
                    var10000 = outOps.createByteList(ByteBuffer.wrap(byteArrayTag.getAsByteArray()));
                    break;
                case StringTag(String var40):
                    var10000 = outOps.createString(var40);
                    break;
                case ListTag listTag:
                    var10000 = this.convertList(outOps, listTag);
                    break;
                case CompoundTag compoundTag:
                    var10000 = this.convertMap(outOps, compoundTag);
                    break;
                case IntArrayTag intArrayTag:
                    var10000 = outOps.createIntList(Arrays.stream(intArrayTag.getAsIntArray()));
                    break;
                case LongArrayTag longArrayTag:
                    var10000 = outOps.createLongList(Arrays.stream(longArrayTag.getAsLongArray()));
                    break;
                default:
                    throw new MatchException(null, null);
            }
 
            return (U)var10000;
        }
    }
 
    public DataResult<Number> getNumberValue(Tag input) {
        return input.asNumber().map(DataResult::success).orElseGet(() -> DataResult.error(() -> "Not a number"));
    }
 
    public Tag createNumeric(Number i) {
        return DoubleTag.valueOf(i.doubleValue());
    }
 
    public Tag createByte(byte value) {
        return ByteTag.valueOf(value);
    }
 
    public Tag createShort(short value) {
        return ShortTag.valueOf(value);
    }
 
    public Tag createInt(int value) {
        return IntTag.valueOf(value);
    }
 
    public Tag createLong(long value) {
        return LongTag.valueOf(value);
    }
 
    public Tag createFloat(float value) {
        return FloatTag.valueOf(value);
    }
 
    public Tag createDouble(double value) {
        return DoubleTag.valueOf(value);
    }
 
    public Tag createBoolean(boolean value) {
        return ByteTag.valueOf(value);
    }
 
    public DataResult<String> getStringValue(Tag input) {
        return input instanceof StringTag(String var4) ? DataResult.success(var4) : DataResult.error(() -> "Not a string");
    }
 
    public Tag createString(String value) {
        return StringTag.valueOf(value);
    }
 
    public DataResult<Tag> mergeToList(Tag list, Tag value) {
        return createCollector(list)
            .map(collector -> DataResult.success(collector.accept(value).result()))
            .orElseGet(() -> DataResult.error(() -> "mergeToList called with not a list: " + list, list));
    }
 
    public DataResult<Tag> mergeToList(Tag list, List<Tag> values) {
        return createCollector(list)
            .map(collector -> DataResult.success(collector.acceptAll(values).result()))
            .orElseGet(() -> DataResult.error(() -> "mergeToList called with not a list: " + list, list));
    }
 
    public DataResult<Tag> mergeToMap(Tag map, Tag key, Tag value) {
        if (!(map instanceof CompoundTag) && !(map instanceof EndTag)) {
            return DataResult.error(() -> "mergeToMap called with not a map: " + map, map);
        } else if (key instanceof StringTag(String var10)) {
            String tag = var10;
            CompoundTag output = map instanceof CompoundTag tagx ? tagx.shallowCopy() : new CompoundTag();
            output.put(tag, value);
            return DataResult.success(output);
        } else {
            return DataResult.error(() -> "key is not a string: " + key, map);
        }
    }
 
    public DataResult<Tag> mergeToMap(Tag map, MapLike<Tag> values) {
        if (!(map instanceof CompoundTag) && !(map instanceof EndTag)) {
            return DataResult.error(() -> "mergeToMap called with not a map: " + map, map);
        } else {
            Iterator<Pair<Tag, Tag>> valuesIterator = values.entries().iterator();
            if (!valuesIterator.hasNext()) {
                return map == this.empty() ? DataResult.success(this.emptyMap()) : DataResult.success(map);
            } else {
                CompoundTag output = map instanceof CompoundTag tag ? tag.shallowCopy() : new CompoundTag();
                List<Tag> missed = new ArrayList<>();
                valuesIterator.forEachRemaining(entry -> {
                    Tag key = entry.getFirst();
                    if (key instanceof StringTag(String patt1$temp)) {
                        output.put(patt1$temp, entry.getSecond());
                    } else {
                        missed.add(key);
                    }
                });
                return !missed.isEmpty() ? DataResult.error(() -> "some keys are not strings: " + missed, output) : DataResult.success(output);
            }
        }
    }
 
    public DataResult<Tag> mergeToMap(Tag map, Map<Tag, Tag> values) {
        if (!(map instanceof CompoundTag) && !(map instanceof EndTag)) {
            return DataResult.error(() -> "mergeToMap called with not a map: " + map, map);
        } else if (values.isEmpty()) {
            return map == this.empty() ? DataResult.success(this.emptyMap()) : DataResult.success(map);
        } else {
            CompoundTag output = map instanceof CompoundTag tag ? tag.shallowCopy() : new CompoundTag();
            List<Tag> missed = new ArrayList<>();
 
            for (Entry<Tag, Tag> entry : values.entrySet()) {
                Tag key = entry.getKey();
                if (key instanceof StringTag(String var10)) {
                    output.put(var10, entry.getValue());
                } else {
                    missed.add(key);
                }
            }
 
            return !missed.isEmpty() ? DataResult.error(() -> "some keys are not strings: " + missed, output) : DataResult.success(output);
        }
    }
 
    public DataResult<Stream<Pair<Tag, Tag>>> getMapValues(Tag input) {
        return input instanceof CompoundTag tag
            ? DataResult.success(tag.entrySet().stream().map(entry -> Pair.of(this.createString(entry.getKey()), entry.getValue())))
            : DataResult.error(() -> "Not a map: " + input);
    }
 
    public DataResult<Consumer<BiConsumer<Tag, Tag>>> getMapEntries(Tag input) {
        return input instanceof CompoundTag tag ? DataResult.success(c -> {
            for (Entry<String, Tag> entry : tag.entrySet()) {
                c.accept(this.createString(entry.getKey()), entry.getValue());
            }
        }) : DataResult.error(() -> "Not a map: " + input);
    }
 
    public DataResult<MapLike<Tag>> getMap(Tag input) {
        return input instanceof CompoundTag tag ? DataResult.success(new MapLike<Tag>() {
            {
                Objects.requireNonNull(NbtOps.this);
            }
 
            public @Nullable Tag get(Tag key) {
                if (key instanceof StringTag(String var4)) {
                    return tag.get(var4);
                } else {
                    throw new UnsupportedOperationException("Cannot get map entry with non-string key: " + key);
                }
            }
 
            public @Nullable Tag get(String key) {
                return tag.get(key);
            }
 
            @Override
            public Stream<Pair<Tag, Tag>> entries() {
                return tag.entrySet().stream().map(entry -> Pair.of(NbtOps.this.createString(entry.getKey()), entry.getValue()));
            }
 
            @Override
            public String toString() {
                return "MapLike[" + tag + "]";
            }
        }) : DataResult.error(() -> "Not a map: " + input);
    }
 
    public Tag createMap(Stream<Pair<Tag, Tag>> map) {
        CompoundTag tag = new CompoundTag();
        map.forEach(entry -> {
            Tag key = entry.getFirst();
            Tag value = entry.getSecond();
            if (key instanceof StringTag(String patt1$temp)) {
                tag.put(patt1$temp, value);
            } else {
                throw new UnsupportedOperationException("Cannot create map with non-string key: " + key);
            }
        });
        return tag;
    }
 
    public DataResult<Stream<Tag>> getStream(Tag input) {
        return input instanceof CollectionTag collection ? DataResult.success(collection.stream()) : DataResult.error(() -> "Not a list");
    }
 
    public DataResult<Consumer<Consumer<Tag>>> getList(Tag input) {
        return input instanceof CollectionTag collection ? DataResult.success(collection::forEach) : DataResult.error(() -> "Not a list: " + input);
    }
 
    public DataResult<ByteBuffer> getByteBuffer(Tag input) {
        return input instanceof ByteArrayTag array ? DataResult.success(ByteBuffer.wrap(array.getAsByteArray())) : DynamicOps.super.getByteBuffer(input);
    }
 
    public Tag createByteList(ByteBuffer input) {
        ByteBuffer wholeBuffer = input.duplicate().clear();
        byte[] bytes = new byte[input.capacity()];
        wholeBuffer.get(0, bytes, 0, bytes.length);
        return new ByteArrayTag(bytes);
    }
 
    public DataResult<IntStream> getIntStream(Tag input) {
        return input instanceof IntArrayTag array ? DataResult.success(Arrays.stream(array.getAsIntArray())) : DynamicOps.super.getIntStream(input);
    }
 
    public Tag createIntList(IntStream input) {
        return new IntArrayTag(input.toArray());
    }
 
    public DataResult<LongStream> getLongStream(Tag input) {
        return input instanceof LongArrayTag array ? DataResult.success(Arrays.stream(array.getAsLongArray())) : DynamicOps.super.getLongStream(input);
    }
 
    public Tag createLongList(LongStream input) {
        return new LongArrayTag(input.toArray());
    }
 
    public Tag createList(Stream<Tag> input) {
        return new ListTag(input.collect(Util.toMutableList()));
    }
 
    public Tag remove(Tag input, String key) {
        if (input instanceof CompoundTag tag) {
            CompoundTag result = tag.shallowCopy();
            result.remove(key);
            return result;
        } else {
            return input;
        }
    }
 
    @Override
    public String toString() {
        return "NBT";
    }
 
    @Override
    public RecordBuilder<Tag> mapBuilder() {
        return new NbtOps.NbtRecordBuilder();
    }
 
    private static Optional<NbtOps.ListCollector> createCollector(Tag tag) {
        if (tag instanceof EndTag) {
            return Optional.of(new NbtOps.GenericListCollector());
        } else if (tag instanceof CollectionTag collection) {
            if (collection.isEmpty()) {
                return Optional.of(new NbtOps.GenericListCollector());
            } else {
                return switch (collection) {
                    case ListTag list -> Optional.of(new NbtOps.GenericListCollector(list));
                    case ByteArrayTag array -> Optional.of(new NbtOps.ByteListCollector(array.getAsByteArray()));
                    case IntArrayTag arrayx -> Optional.of(new NbtOps.IntListCollector(arrayx.getAsIntArray()));
                    case LongArrayTag arrayxx -> Optional.of(new NbtOps.LongListCollector(arrayxx.getAsLongArray()));
                    default -> throw new MatchException(null, null);
                };
            }
        } else {
            return Optional.empty();
        }
    }
 
    private static class ByteListCollector implements NbtOps.ListCollector {
        private final ByteArrayList values = new ByteArrayList();
 
        public ByteListCollector(byte[] initialValues) {
            this.values.addElements(0, initialValues);
        }
 
        @Override
        public NbtOps.ListCollector accept(Tag tag) {
            if (tag instanceof ByteTag byteTag) {
                this.values.add(byteTag.byteValue());
                return this;
            } else {
                return new NbtOps.GenericListCollector(this.values).accept(tag);
            }
        }
 
        @Override
        public Tag result() {
            return new ByteArrayTag(this.values.toByteArray());
        }
    }
 
    private static class GenericListCollector implements NbtOps.ListCollector {
        private final ListTag result = new ListTag();
 
        private GenericListCollector() {
        }
 
        private GenericListCollector(ListTag initial) {
            this.result.addAll(initial);
        }
 
        public GenericListCollector(IntArrayList initials) {
            initials.forEach(v -> this.result.add(IntTag.valueOf(v)));
        }
 
        public GenericListCollector(ByteArrayList initials) {
            initials.forEach(v -> this.result.add(ByteTag.valueOf(v)));
        }
 
        public GenericListCollector(LongArrayList initials) {
            initials.forEach(v -> this.result.add(LongTag.valueOf(v)));
        }
 
        @Override
        public NbtOps.ListCollector accept(Tag tag) {
            this.result.add(tag);
            return this;
        }
 
        @Override
        public Tag result() {
            return this.result;
        }
    }
 
    private static class IntListCollector implements NbtOps.ListCollector {
        private final IntArrayList values = new IntArrayList();
 
        public IntListCollector(int[] initialValues) {
            this.values.addElements(0, initialValues);
        }
 
        @Override
        public NbtOps.ListCollector accept(Tag tag) {
            if (tag instanceof IntTag intTag) {
                this.values.add(intTag.intValue());
                return this;
            } else {
                return new NbtOps.GenericListCollector(this.values).accept(tag);
            }
        }
 
        @Override
        public Tag result() {
            return new IntArrayTag(this.values.toIntArray());
        }
    }
 
    private interface ListCollector {
        NbtOps.ListCollector accept(Tag t);
 
        default NbtOps.ListCollector acceptAll(Iterable<Tag> tags) {
            NbtOps.ListCollector collector = this;
 
            for (Tag tag : tags) {
                collector = collector.accept(tag);
            }
 
            return collector;
        }
 
        Tag result();
    }
 
    private static class LongListCollector implements NbtOps.ListCollector {
        private final LongArrayList values = new LongArrayList();
 
        public LongListCollector(long[] initialValues) {
            this.values.addElements(0, initialValues);
        }
 
        @Override
        public NbtOps.ListCollector accept(Tag tag) {
            if (tag instanceof LongTag longTag) {
                this.values.add(longTag.longValue());
                return this;
            } else {
                return new NbtOps.GenericListCollector(this.values).accept(tag);
            }
        }
 
        @Override
        public Tag result() {
            return new LongArrayTag(this.values.toLongArray());
        }
    }
 
    private class NbtRecordBuilder extends AbstractStringBuilder<Tag, CompoundTag> {
        protected NbtRecordBuilder() {
            Objects.requireNonNull(NbtOps.this);
            super(NbtOps.this);
        }
 
        protected CompoundTag initBuilder() {
            return new CompoundTag();
        }
 
        protected CompoundTag append(String key, Tag value, CompoundTag builder) {
            builder.put(key, value);
            return builder;
        }
 
        protected DataResult<Tag> build(CompoundTag builder, Tag prefix) {
            if (prefix == null || prefix == EndTag.INSTANCE) {
                return DataResult.success(builder);
            } else if (!(prefix instanceof CompoundTag compound)) {
                return DataResult.error(() -> "mergeToMap called with not a map: " + prefix, prefix);
            } else {
                CompoundTag result = compound.shallowCopy();
 
                for (Entry<String, Tag> entry : builder.entrySet()) {
                    result.put(entry.getKey(), entry.getValue());
                }
 
                return DataResult.success(result);
            }
        }
    }
}

引用的其他类

  • ByteArrayTag

    • 引用位置: 构造调用
    • 关联成员: ByteArrayTag()
  • ByteTag

    • 引用位置: 方法调用
    • 关联成员: ByteTag.valueOf()
  • CompoundTag

    • 引用位置: 构造调用
    • 关联成员: CompoundTag()
  • DoubleTag

    • 引用位置: 方法调用
    • 关联成员: DoubleTag.valueOf()
  • FloatTag

    • 引用位置: 方法调用
    • 关联成员: FloatTag.valueOf()
  • IntArrayTag

    • 引用位置: 构造调用
    • 关联成员: IntArrayTag()
  • IntTag

    • 引用位置: 方法调用
    • 关联成员: IntTag.valueOf()
  • ListTag

    • 引用位置: 构造调用
    • 关联成员: ListTag()
  • LongArrayTag

    • 引用位置: 构造调用
    • 关联成员: LongArrayTag()
  • LongTag

    • 引用位置: 方法调用
    • 关联成员: LongTag.valueOf()
  • ShortTag

    • 引用位置: 方法调用
    • 关联成员: ShortTag.valueOf()
  • StringTag

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

    • 引用位置: 参数/实现/返回值
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.toMutableList()