Backpacks 创造标签
[!INFO] 实现类:
de.eydamos.backpack.item.TabBackpacks(继承net.minecraft.creativetab.CreativeTabs) 创建:ItemsBackpack.tabBackpacks = new TabBackpacks()
基本信息
| 属性 | 值 |
|---|---|
| 标签名 | Localizations.TAB_BACKPACKS(本地化键) |
| 图标物品 | getTabIconItem() 返回 ItemsBackpack.backpack |
| 挂载 | 静态字段 ItemsBackpack.tabBackpacks |
| 创建时机 | 类加载期(ItemsBackpack 静态初始化) |
TabBackpacks 声明了一个 protected ItemStack iconItemStack = null;
字段,但从未被读取或写入 —— 标签图标实际由继承来的
getTabIconItem() 返回 Item(而非 ItemStack)提供。
该字段是死代码。
归属的物品
标签通过 ItemBackpackBase 构造器挂到两个物品上:
setCreativeTab(ItemsBackpack.tabBackpacks);
| 物品 | 创造标签 |
|---|---|
backpack(ItemBackpack,继承 ItemBackpackBase) |
Backpacks |
workbenchBackpack(ItemWorkbenchBackpack) |
Backpacks |
而两个皮革 —— 捆绑皮革 与
鞣制皮革 —— 在 ItemLeather 构造器里挂的是
原版材料标签 CreativeTabs.tabMaterials,不进入本标签。
getSubItems 决定标签内可见数量
标签里出现哪些变体由 ItemBackpackBase.getSubItems 决定,
它对两个物品分别硬编码:
if (item == ItemsBackpack.backpack) {
for (int tier = 0; tier < 3; tier++)
for (int i = 0; i < 17; i++)
subItems.add(new ItemStack(item, 1, tier * 100 + i)); // 51 个
subItems.add(new ItemStack(item, 1, ItemsBackpack.ENDERBACKPACK)); // 第 52 个
} else if (item == ItemsBackpack.workbenchBackpack) {
subItems.add(new ItemStack(item, 1, 17));
subItems.add(new ItemStack(item, 1, 217));
}
⚠️ 升级产生的中间 metadata 不会出现在创造模式里:
117(损坏的 0 格工作台包)与其它由
背包升级配方 合成的带 NBT 变体
都无法通过创造标签取得 —— 必须实际合成,且合成的中间态是坏的。
图标数组的容量吻合
标签内 52 个普通/末位变体与 ItemBackpack.registerIcons 的
new IIcon[52] 严格对应(3 tier × 17 色 = 51,加末位 1 个),
两处若有一方改动就会出现图标越界或缺失。