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);
}
}
}引用的其他类
- HolderLookup
- 引用位置:
参数
- 引用位置: