EncoderCache.java
net.minecraft.util.EncoderCache
信息
- 全限定名:net.minecraft.util.EncoderCache
- 类型:public class
- 包:net.minecraft.util
- 源码路径:src/main/java/net/minecraft/util/EncoderCache.java
- 起始行号:L13
- 职责:
TODO
字段/常量
cache- 类型:
LoadingCache<EncoderCache.Key<?,?>,DataResult<?>> - 修饰符:
private final - 源码定位:
L14 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.util.EncoderCache.Key- 类型:
record - 修饰符:
private - 源码定位:
L52 - 说明:
TODO
- 类型:
构造器
public EncoderCache(int maximumSize) @ L16
- 构造器名:EncoderCache
- 源码定位:L16
- 修饰符:public
参数:
- maximumSize: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
public <A> Codec<A> wrap(Codec<A> codec) @ L32
- 方法名:wrap
- 源码定位:L32
- 返回类型: Codec
- 修饰符:public
参数:
说明:
TODO
代码
public class EncoderCache {
private final LoadingCache<EncoderCache.Key<?, ?>, DataResult<?>> cache;
public EncoderCache(int maximumSize) {
this.cache = CacheBuilder.newBuilder()
.maximumSize(maximumSize)
.concurrencyLevel(1)
.softValues()
.build(new CacheLoader<EncoderCache.Key<?, ?>, DataResult<?>>() {
{
Objects.requireNonNull(EncoderCache.this);
}
public DataResult<?> load(EncoderCache.Key<?, ?> key) {
return key.resolve();
}
});
}
public <A> Codec<A> wrap(Codec<A> codec) {
return new Codec<A>() {
{
Objects.requireNonNull(EncoderCache.this);
}
@Override
public <T> DataResult<Pair<A, T>> decode(DynamicOps<T> ops, T input) {
return codec.decode(ops, input);
}
@Override
public <T> DataResult<T> encode(A input, DynamicOps<T> ops, T prefix) {
return EncoderCache.this.cache
.getUnchecked(new EncoderCache.Key<>(codec, input, ops))
.map(value -> (T)(value instanceof Tag tag ? tag.copy() : value));
}
};
}
private record Key<A, T>(Codec<A> codec, A value, DynamicOps<T> ops) {
public DataResult<T> resolve() {
return this.codec.encodeStart(this.ops, this.value);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else {
return !(obj instanceof EncoderCache.Key<?, ?> key)
? false
: this.codec == key.codec && this.value.equals(key.value) && this.ops.equals(key.ops);
}
}
@Override
public int hashCode() {
int result = System.identityHashCode(this.codec);
result = 31 * result + this.value.hashCode();
return 31 * result + this.ops.hashCode();
}
}
}引用的其他类
- LoggedChatMessage
- 引用位置:
方法调用 - 关联成员:
System.identityHashCode()
- 引用位置: