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);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RegistryOps.injectRegistryContext()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.fixedSize()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
Inventory.getSelectionSize()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: