ItemIronChest(箱子物品形态)
基本信息
| 属性 | 值 |
|---|---|
| 源码类 | cpw.mods.ironchest.ItemIronChest extends ItemBlock |
| 注册名 | IronChest:BlockIronChest(与方块同名,GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest")) |
| 未本地化名 | tile.ironchest:<TYPE>.name(TYPE = 枚举常量名,大写) |
| 最大堆叠 | 64(Item 默认;方块物品不可堆叠时由原版处理) |
| 耐久 | 0(setMaxDamage(0),无法损坏) |
| 子类型 | setHasSubtypes(true) —— 用 ItemStack 的 damage 值当 metadata |
| 附魔适用 | 无(未覆写 getEnchantability) |
| 创造栏 | 跟随方块的 CreativeTabs.tabDecorations |
| 物品图标 | 由 IronChestType.getIcon(int side) 走 sideMapping = {0,0,2,1,2,2,2} 从 3 张方块图标里取 |
metadata 即箱子类型
ItemIronChest 不额外维护物品→类型的映射表,直接复用方块的 metadata 约定:
@Override
public int getMetadata(int i) {
return IronChestType.validateMeta(i);
}
validateMeta 对越界或 size <= 0 的值回落到 0(铁箱子),因此:
- damage 0~10 → 依次对应 11 种箱子(
ordinal()) - damage 11(
WOOD)→ 被改写成 0 - damage ≥ 12 → 被改写成 0
放置方块时原版会用 getMetadata(damage) 作为方块 metadata,于是放置出来的箱子类型永远与物品 damage 一致,且非法 damage 会静默变成铁箱子而不是崩溃。
显示名
@Override
public String getUnlocalizedName(ItemStack itemstack) {
return "tile.ironchest:" + IronChestType.VALUES[itemstack.getItemDamage()].name();
}
这里用的是 getItemDamage() 而非 getMetadata()。若物品 damage 为 11 或更大,VALUES[damage] 会抛 ArrayIndexOutOfBoundsException——WOOD 的 ordinal() 恰好是 11。不过 WOOD 的 size = 0,validateMeta(11) = 0,所以正常流程里不会产生这种物品;这个越界只在被外部 mod 强行塞入非法 damage 的物品时可触发。
显示名本地化键与 assets/ironchest/lang/en_US.lang 一一对应:
| damage | 未本地化名 | en_US | zh_CN |
|---|---|---|---|
| 0 | tile.ironchest:IRON.name |
Iron Chest | 铁箱子 |
| 1 | tile.ironchest:GOLD.name |
Gold Chest | 金箱子 |
| 2 | tile.ironchest:DIAMOND.name |
Diamond Chest | 钻石箱子 |
| 3 | tile.ironchest:COPPER.name |
Copper Chest | 铜箱子 |
| 4 | tile.ironchest:STEEL.name |
Steel Chest | 钢箱子 |
| 5 | tile.ironchest:CRYSTAL.name |
Crystal Chest | 水晶箱子 |
| 6 | tile.ironchest:OBSIDIAN.name |
Obsidian Chest | 黑曜石箱子 |
| 7 | tile.ironchest:DIRTCHEST9000.name |
DirtChest 9000! | 泥箱子9000! |
| 8 | tile.ironchest:NETHERITE.name |
Netherite Chest | 下界合金箱子 |
| 9 | tile.ironchest:DARKSTEEL.name |
Dark Steel Chest | 玄钢箱子 |
| 10 | tile.ironchest:SILVER.name |
Silver Chest | 银箱子 |
方块自身的未本地化名是 tile.IronChest.name(setBlockName("IronChest")),en_US 里是 Chest;但 ItemIronChest.getUnlocalizedName 完全覆写了它,所以物品形态永远走 tile.ironchest:<TYPE>.name,不会显示成 Chest。
Tooltip
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
tooltip.add(StatCollector.translateToLocal(getUnlocalizedName(stack) + ".tooltip"));
}
即每个类型都有一条 <未本地化名>.tooltip:
| 箱子 | tooltip(en_US) |
|---|---|
| Copper | Inventory 5*9 - 45 Slots |
| Iron | Inventory 6*9 - 54 Slots |
| Steel | Inventory 8*9 - 72 Slots |
| Silver | Inventory 8*9 - 72 Slots |
| Gold | Inventory 9*9 - 81 Slots |
| Diamond | Inventory 12*9 - 108 Slots |
| Crystal | Inventory 12*9 - 108 Slots |
| Obsidian | Inventory 12*9 - 108 Slots §4Blast Proof |
| Netherite | Inventory 15*9 - 135 Slots |
| Dark Steel | Inventory 15*9 - 135 Slots |
| Dirt Chest 9000 | Stores up to ONE stack of dirt! Revolutionary technology! |
[!NOTE] 13 种 tooltip 全部在 zh_CN 语言文件里保持英文原文(未汉化)。这些 tooltip 里的行列数是硬编码文本,与实际
getRowCount()/getRowLength()一致,但源码并未做一致性校验。
使用方式
| 使用方式 | 触发条件 | 使用效果 | 条件/限制 |
|---|---|---|---|
| 右键点击方块 | 目标位置可放置 | 由 ItemBlock 基类放置 IronChest:BlockIronChest @ getMetadata(damage) |
箱子正上方有实心方块时打不开(BlockIronChest.onBlockActivated 的 isSideSolid 检查) |
| 快捷栏右键 | 无目标 | 旋转箱子(BlockIronChest.rotateBlock 仅接受 UP / DOWN 轴) |
只能绕竖直轴 |
| 装备 / 穿戴 | — | 不适用 | — |
ItemIronChest 没有覆写 onItemUse、onItemRightClick、onItemUseFirst、addInformation 之外的行为,物品逻辑完全继承 ItemBlock。
掉落与 adornment
箱子物品的 NBT 由方块侧的 BlockIronChest.getDrops 负责:
ItemStack stack = new ItemStack(this, 1, metadata);
IronChestType.VALUES[validateMeta(metadata)].adornItemDrop(stack);
adornItemDrop 只对 DIRTCHEST9000 打 dirtchest = NBTTagByte(1) 标记(详见 Dirt Chest 9000),其余 10 种箱子掉落的物品永远不带任何 NBT。
与升级器物品的区别
ItemIronChest(本页) |
ItemChestChanger |
|
|---|---|---|
| 物品类 | ItemIronChest |
ItemChestChanger |
| 最大堆叠 | 64 | 1 |
| 数量 | 1 个(11 个 metadata 变体) | 17 个独立注册物品 |
| 触发 | 放置方块 | 升级已放置的方块 |
| NBT | 仅泥土箱子掉落物带 dirtchest |
永不带 NBT |
| 创造栏 | tabDecorations |
tabMisc |
相关条目
- Iron Chest 方块 - 宿主方块与 metadata 分配
- Iron Chest · Copper Chest · Steel Chest · Silver Chest · Gold Chest · Diamond Chest · Crystal Chest · Obsidian Chest · Netherite Chest · Dark Steel Chest · Dirt Chest 9000 - 11 个可获得的物品形态
- Wood to Iron Chest Upgrade · Iron to Gold Chest Upgrade 等 17 个升级器物品