Hotbar.java

net.minecraft.client.player.inventory.Hotbar

信息

  • 全限定名:net.minecraft.client.player.inventory.Hotbar
  • 类型:public class
  • 包:net.minecraft.client.player.inventory
  • 源码路径:src/main/java/net/minecraft/client/player/inventory/Hotbar.java
  • 起始行号:L25
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L26
    • 说明:

      TODO

  • SIZE

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L27
    • 说明:

      TODO

  • CODEC

    • 类型: Codec<Hotbar>
    • 修饰符: public static final
    • 源码定位: L28
    • 说明:

      TODO

  • DEFAULT_OPS

    • 类型: DynamicOps<Tag>
    • 修饰符: private static final
    • 源码定位: L29
    • 说明:

      TODO

  • EMPTY_STACK

    • 类型: Dynamic<?>
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • items

    • 类型: List<Dynamic<?>>
    • 修饰符: private
    • 源码定位: L31
    • 说明:

      TODO

内部类/嵌套类型

构造器

private Hotbar(List<Dynamic<?>> items) @ L33

  • 构造器名:Hotbar
  • 源码定位:L33
  • 修饰符:private

参数:

  • items: List<Dynamic<?>>

说明:

TODO

public Hotbar() @ L37

  • 构造器名:Hotbar
  • 源码定位:L37
  • 修饰符:public

参数:

说明:

TODO

方法

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

public List<ItemStack> load(HolderLookup.Provider registries) @ L41

  • 方法名:load
  • 源码定位:L41
  • 返回类型:List
  • 修饰符:public

参数:

  • registries: HolderLookup.Provider

说明:

TODO

public void storeFrom(Inventory inventory, RegistryAccess lookupProvider) @ L53

  • 方法名:storeFrom
  • 源码定位:L53
  • 返回类型:void
  • 修饰符:public

参数:

  • inventory: Inventory
  • lookupProvider: RegistryAccess

说明:

TODO

public boolean isEmpty() @ L69

  • 方法名:isEmpty
  • 源码定位:L69
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

private static boolean isEmpty(Dynamic<?> item) @ L79

  • 方法名:isEmpty
  • 源码定位:L79
  • 返回类型:boolean
  • 修饰符:private static

参数:

  • item: Dynamic<?>

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class Hotbar {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final int SIZE = Inventory.getSelectionSize();
    public static final Codec<Hotbar> CODEC = Codec.PASSTHROUGH.listOf().validate(list -> Util.fixedSize(list, SIZE)).xmap(Hotbar::new, hotbar -> hotbar.items);
    private static final DynamicOps<Tag> DEFAULT_OPS = NbtOps.INSTANCE;
    private static final Dynamic<?> EMPTY_STACK = new Dynamic<>(DEFAULT_OPS, ItemStack.OPTIONAL_CODEC.encodeStart(DEFAULT_OPS, ItemStack.EMPTY).getOrThrow());
    private List<Dynamic<?>> items;
 
    private Hotbar(List<Dynamic<?>> items) {
        this.items = items;
    }
 
    public Hotbar() {
        this(Collections.nCopies(SIZE, EMPTY_STACK));
    }
 
    public List<ItemStack> load(HolderLookup.Provider registries) {
        return this.items
            .stream()
            .map(
                dynamic -> ItemStack.OPTIONAL_CODEC
                    .parse(RegistryOps.injectRegistryContext((Dynamic<?>)dynamic, registries))
                    .resultOrPartial(error -> LOGGER.warn("Could not parse hotbar item: {}", error))
                    .orElse(ItemStack.EMPTY)
            )
            .toList();
    }
 
    public void storeFrom(Inventory inventory, RegistryAccess lookupProvider) {
        RegistryOps<Tag> registryOps = lookupProvider.createSerializationContext(DEFAULT_OPS);
        Builder<Dynamic<?>> newItems = ImmutableList.builderWithExpectedSize(SIZE);
 
        for (int i = 0; i < SIZE; i++) {
            ItemStack item = inventory.getItem(i);
            Optional<Dynamic<?>> result = ItemStack.OPTIONAL_CODEC
                .encodeStart(registryOps, item)
                .resultOrPartial(error -> LOGGER.warn("Could not encode hotbar item: {}", error))
                .map(tag -> new Dynamic<>(DEFAULT_OPS, tag));
            newItems.add(result.orElse(EMPTY_STACK));
        }
 
        this.items = newItems.build();
    }
 
    public boolean isEmpty() {
        for (Dynamic<?> item : this.items) {
            if (!isEmpty(item)) {
                return false;
            }
        }
 
        return true;
    }
 
    private static boolean isEmpty(Dynamic<?> item) {
        return EMPTY_STACK.equals(item);
    }
}

引用的其他类

  • HolderLookup

    • 引用位置: 参数
  • RegistryAccess

    • 引用位置: 参数
  • Tag

    • 引用位置: 字段
  • RegistryOps

    • 引用位置: 方法调用
    • 关联成员: RegistryOps.injectRegistryContext()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.fixedSize()
  • Inventory

    • 引用位置: 参数/方法调用
    • 关联成员: Inventory.getSelectionSize()
  • ItemStack

    • 引用位置: 返回值
  • ResolvableProfile

    • 引用位置: 参数/字段