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 个), 两处若有一方改动就会出现图标越界或缺失。

相关条目