Cloner.java

net.minecraft.core.Cloner

信息

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

    TODO

字段/常量

  • directCodec
    • 类型: Codec<T>
    • 修饰符: private final
    • 源码定位: L12
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.core.Cloner.Factory
    • 类型: class
    • 修饰符: public static
    • 源码定位: L25
    • 说明:

      TODO

构造器

private Cloner(Codec<T> directCodec) @ L14

  • 构造器名:Cloner
  • 源码定位:L14
  • 修饰符:private

参数:

  • directCodec: Codec

说明:

TODO

方法

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

public T clone(T value, HolderLookup.Provider from, HolderLookup.Provider to) @ L18

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

参数:

  • value: T
  • from: HolderLookup.Provider
  • to: HolderLookup.Provider

说明:

TODO

代码

public class Cloner<T> {
    private final Codec<T> directCodec;
 
    private Cloner(Codec<T> directCodec) {
        this.directCodec = directCodec;
    }
 
    public T clone(T value, HolderLookup.Provider from, HolderLookup.Provider to) {
        DynamicOps<Object> sourceOps = from.createSerializationContext(JavaOps.INSTANCE);
        DynamicOps<Object> targetOps = to.createSerializationContext(JavaOps.INSTANCE);
        Object serialized = this.directCodec.encodeStart(sourceOps, value).getOrThrow(error -> new IllegalStateException("Failed to encode: " + error));
        return this.directCodec.parse(targetOps, serialized).getOrThrow(error -> new IllegalStateException("Failed to decode: " + error));
    }
 
    public static class Factory {
        private final Map<ResourceKey<? extends Registry<?>>, Cloner<?>> codecs = new HashMap<>();
 
        public <T> Cloner.Factory addCodec(ResourceKey<? extends Registry<? extends T>> key, Codec<T> codec) {
            this.codecs.put(key, new Cloner<>(codec));
            return this;
        }
 
        public <T> @Nullable Cloner<T> cloner(ResourceKey<? extends Registry<? extends T>> key) {
            return (Cloner<T>)this.codecs.get(key);
        }
    }
}

引用的其他类