HashedPatchMap.java
net.minecraft.network.HashedPatchMap
信息
- 全限定名:net.minecraft.network.HashedPatchMap
- 类型:public record
- 包:net.minecraft.network
- 源码路径:src/main/java/net/minecraft/network/HashedPatchMap.java
- 起始行号:L16
- 职责:
TODO
字段/常量
STREAM_CODEC- 类型:
StreamCodec<RegistryFriendlyByteBuf,HashedPatchMap> - 修饰符:
public static final - 源码定位:
L17 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.network.HashedPatchMap.HashGenerator- 类型:
interface - 修饰符:
public - 源码定位:
L56 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static HashedPatchMap create(DataComponentPatch patch, HashedPatchMap.HashGenerator hasher) @ L25
- 方法名:create
- 源码定位:L25
- 返回类型:HashedPatchMap
- 修饰符:public static
参数:
- patch: DataComponentPatch
- hasher: HashedPatchMap.HashGenerator
说明:
TODO
public boolean matches(DataComponentPatch patch, HashedPatchMap.HashGenerator hasher) @ L32
- 方法名:matches
- 源码定位:L32
- 返回类型:boolean
- 修饰符:public
参数:
- patch: DataComponentPatch
- hasher: HashedPatchMap.HashGenerator
说明:
TODO
代码
public record HashedPatchMap(Map<DataComponentType<?>, Integer> addedComponents, Set<DataComponentType<?>> removedComponents) {
public static final StreamCodec<RegistryFriendlyByteBuf, HashedPatchMap> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.map(HashMap::new, ByteBufCodecs.registry(Registries.DATA_COMPONENT_TYPE), ByteBufCodecs.INT, 256),
HashedPatchMap::addedComponents,
ByteBufCodecs.collection(HashSet::new, ByteBufCodecs.registry(Registries.DATA_COMPONENT_TYPE), 256),
HashedPatchMap::removedComponents,
HashedPatchMap::new
);
public static HashedPatchMap create(DataComponentPatch patch, HashedPatchMap.HashGenerator hasher) {
DataComponentPatch.SplitResult split = patch.split();
Map<DataComponentType<?>, Integer> setComponentHashes = new IdentityHashMap<>(split.added().size());
split.added().forEach(e -> setComponentHashes.put(e.type(), hasher.apply((TypedDataComponent<?>)e)));
return new HashedPatchMap(setComponentHashes, split.removed());
}
public boolean matches(DataComponentPatch patch, HashedPatchMap.HashGenerator hasher) {
DataComponentPatch.SplitResult split = patch.split();
if (!split.removed().equals(this.removedComponents)) {
return false;
} else if (this.addedComponents.size() != split.added().size()) {
return false;
} else {
for (TypedDataComponent<?> typedDataComponent : split.added()) {
Integer expectedHash = this.addedComponents.get(typedDataComponent.type());
if (expectedHash == null) {
return false;
}
Integer actualHash = hasher.apply(typedDataComponent);
if (!actualHash.equals(expectedHash)) {
return false;
}
}
return true;
}
}
@FunctionalInterface
public interface HashGenerator extends Function<TypedDataComponent<?>, Integer> {
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ByteBufCodecs.collection(), ByteBufCodecs.map(), ByteBufCodecs.registry()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
StreamCodec.composite()
- 引用位置: