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> {
    }
}

引用的其他类