HashedStack.java

net.minecraft.network.HashedStack

信息

  • 全限定名:net.minecraft.network.HashedStack
  • 类型:public interface
  • 包:net.minecraft.network
  • 源码路径:src/main/java/net/minecraft/network/HashedStack.java
  • 起始行号:L12
  • 职责:

    TODO

字段/常量

  • EMPTY

    • 类型: HashedStack
    • 修饰符: public public
    • 源码定位: L13
    • 说明:

      TODO

  • STREAM_CODEC

    • 类型: StreamCodec<RegistryFriendlyByteBuf,HashedStack>
    • 修饰符: package-private
    • 源码定位: L24
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.network.HashedStack.ActualItem
    • 类型: record
    • 修饰符: public
    • 源码定位: L38
    • 说明:

      TODO

构造器

方法

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

boolean matches(ItemStack stack, HashedPatchMap.HashGenerator hasher) @ L30

  • 方法名:matches
  • 源码定位:L30
  • 返回类型:boolean
  • 修饰符:package-private

参数:

  • stack: ItemStack
  • hasher: HashedPatchMap.HashGenerator

说明:

TODO

static HashedStack create(ItemStack itemStack, HashedPatchMap.HashGenerator hasher) @ L32

  • 方法名:create
  • 源码定位:L32
  • 返回类型:HashedStack
  • 修饰符:static

参数:

  • itemStack: ItemStack
  • hasher: HashedPatchMap.HashGenerator

说明:

TODO

代码

public interface HashedStack {
    HashedStack EMPTY = new HashedStack() {
        @Override
        public String toString() {
            return "<empty>";
        }
 
        @Override
        public boolean matches(ItemStack stack, HashedPatchMap.HashGenerator hasher) {
            return stack.isEmpty();
        }
    };
    StreamCodec<RegistryFriendlyByteBuf, HashedStack> STREAM_CODEC = ByteBufCodecs.optional(HashedStack.ActualItem.STREAM_CODEC)
        .map(
            actualItem -> DataFixUtils.orElse((Optional<? extends HashedStack>)actualItem, EMPTY),
            hashedStack -> hashedStack instanceof HashedStack.ActualItem actualItem ? Optional.of(actualItem) : Optional.empty()
        );
 
    boolean matches(ItemStack stack, HashedPatchMap.HashGenerator hasher);
 
    static HashedStack create(ItemStack itemStack, HashedPatchMap.HashGenerator hasher) {
        return (HashedStack)(itemStack.isEmpty()
            ? EMPTY
            : new HashedStack.ActualItem(itemStack.typeHolder(), itemStack.getCount(), HashedPatchMap.create(itemStack.getComponentsPatch(), hasher)));
    }
 
    public record ActualItem(Holder<Item> item, int count, HashedPatchMap components) implements HashedStack {
        public static final StreamCodec<RegistryFriendlyByteBuf, HashedStack.ActualItem> STREAM_CODEC = StreamCodec.composite(
            ByteBufCodecs.holderRegistry(Registries.ITEM),
            HashedStack.ActualItem::item,
            ByteBufCodecs.VAR_INT,
            HashedStack.ActualItem::count,
            HashedPatchMap.STREAM_CODEC,
            HashedStack.ActualItem::components,
            HashedStack.ActualItem::new
        );
 
        @Override
        public boolean matches(ItemStack itemStack, HashedPatchMap.HashGenerator hasher) {
            if (this.count != itemStack.getCount()) {
                return false;
            } else {
                return !this.item.equals(itemStack.typeHolder()) ? false : this.components.matches(itemStack.getComponentsPatch(), hasher);
            }
        }
    }
}

引用的其他类

  • HashedPatchMap

    • 引用位置: 参数/方法调用
    • 关联成员: HashedPatchMap.create()
  • RegistryFriendlyByteBuf

    • 引用位置: 字段
  • ByteBufCodecs

    • 引用位置: 方法调用
    • 关联成员: ByteBufCodecs.holderRegistry(), ByteBufCodecs.optional()
  • StreamCodec

    • 引用位置: 字段/方法调用
    • 关联成员: StreamCodec.composite()
  • ItemStack

    • 引用位置: 参数