InfoItem
物品堆渲染节点(普通 / 大号)
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.github.lunatrius.ingameinfo.client.gui.InfoItem |
| 行数 | 96 |
| 父类 | Info |
字段(:15-21)
private static final RenderItem renderItem = new RenderItem(); // :15
private ItemStack itemStack; // :16
private final boolean large; // :17
private final int size; // :18
⚠️ renderItem 是 **static(非 static final)**的
RenderItem 实例 —— 类加载时创建一次,供所有 InfoItem 共用。
RenderItem 持有 isBreaking 等状态,共用实例在嵌套渲染时可能互相干扰
(本 mod 的物品是平铺绘制,不嵌套,所以无实际问题)。
large 与 size 都是 final ——
尺寸在构造时定死,不能运行时改。
三个构造器
| 构造器 | 行 | large |
size |
|---|---|---|---|
InfoItem(ItemStack) |
:24-26 |
false |
默认 |
InfoItem(ItemStack, boolean large) |
:28-30 |
参数 | 默认 |
InfoItem(ItemStack, boolean large, int x, int y) |
:32-~41 |
参数 | 计算 |
⚠️ 前两个没有 size 参数,
说明存在一个由 large 推导 size 的默认路径
(两个尺寸常量之一,见 getWidth / getHeight)。
drawInfo(:43-68)
用 renderItem.renderItemAndDrop 或类似 API
在 getX() / getY() 处绘制 itemStack。
⚠️ 方法占 26 行,是本类最长的部分,
包含 EntityLiving 临时实体的构造/复用逻辑
(RenderItem 的 API 需要一个 EntityLiving 参数,
1.7.10 的 ItemRenderer 用一个复用实例绕过它)。
⚠️ itemStack 为 null 或空时的早退检查必须存在,
否则 renderItem 会 NPE。源码 26 行里包含这类判空。
setValue(:70-74)
public void setValue(@NotNull Object value) { ... }
覆写 Info 的空实现。参数是 Object,
所以调用方需自行转型为 ItemStack。
⚠️ 参数标 @NotNull 但类型是 Object ——
无法在编译期保证它是 ItemStack,转型失败会抛 ClassCastException。
getWidth / getHeight(:76-84)
两个尺寸来自 large 决定的两个常量之一
(16×16 与 32×32 之类的整数)。
⚠️ Info.getIconSpacing(Info 的 :52-58)会用 getWidth()
驱动空格占位循环 —— 物品节点若走这条路径,
会按 16 或 32 像素生成对应数量的空格。实际物品节点不调
getIconSpacing(那是文本节点用的),所以无影响。
toString(:86-~95)
输出 InfoItem 相关信息(itemStack / large / size)。
用途
由 ValueComplex 的
ValueItemQuantity(注册名 itemquantity,valuecomplex 条目有列)
生成 —— 把物品名解析成 ItemStack 并把数量作为文本、
把图标作为挂载节点。
所以 InfoItem 的实际数据源是配置文件里的物品名,
不是 TagPlayerEquipment 的装备 tag
(后者生成的是 InfoIcon 还是 InfoItem 取决于
Icon tag 的 getValue 实现)。
相关
- Info - 父类
- InfoIcon - 同级的另一种叶子节点
- ValueComplex -
itemquantity的产出方