Obsidian Chest(黑曜石箱子)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | IronChest:BlockIronChest @ metadata 6 |
| metadata 来源 | IronChestType.OBSIDIAN.ordinal() |
| 显示名 | tile.ironchest:OBSIDIAN.name = Obsidian Chest |
| 枚举常量 | OBSIDIAN |
| TileEntity | cpw.mods.ironchest.TileEntityObsidianChest(唯一实现 super(IronChestType.OBSIDIAN)) |
| 硬度 | 3.0F(与其他变体完全相同,不因黑曜石材质而变硬) |
| 爆炸抗性 | 是(resistance = 1)→ getExplosionResistance() 返回 10000.0F |
| 容量 | 108(size = 108) |
| 槽位形状 | 108 / 12 = 9 行 × 12 列 |
| 物品栏堆叠上限 | 64 |
| GUI 尺寸 | 238 × 256(GUIChest.GUI.OBSIDIAN),贴图 ironchest:textures/gui/diamondcontainer.png(借用钻石箱子的) |
| 箱子等级 | tier = 5 |
| 材质 | obsidian(由 translateOreName 特判为 Blocks.obsidian 而非矿石字典名) |
| 物品过滤 | 无 |
| 是否配置可关 | 否(isEnabled() 恒 true) |
| 特殊 tooltip | Inventory 12*9 - 108 Slots §4Blast Proof(全 mod 唯一带红色抗爆标记的箱子) |
抗爆的表达方式
resistance 是 IronChestType 构造函数的最后一个参数,取值 0 或 1,不是爆炸抗性数值本身:
// IronChestType.java:298
public boolean isExplosionResistant() {
return this.resistance >= 1;
}
// BlockIronChest.java:235 —— 唯一的爆炸抗性出口
public float getExplosionResistance(Entity e, World world, int x, int y, int z,
double ex, double ey, double ez) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileEntityIronChest
&& ((TileEntityIronChest) te).getType().isExplosionResistant()) {
return 10000f;
}
return super.getExplosionResistance(e, world, x, y, z, ex, ey, ez);
}
全仓库没有任何 setResistance() 调用(grep -rn "setResistance" java/ 零命中)。抗爆完全靠上面这个 getExplosionResistance 覆写,按 TileEntity 的类型(不是按方块 metadata)判定。因此:
抗爆(resistance >= 1) |
不抗爆(resistance = 0) |
|---|---|
| Obsidian Chest(本页,108 格) | 其余 9 个真实变体 |
| Netherite Chest(135 格) | 包括同样 108 格的钻石箱与水晶箱 |
抗爆箱子仍然会被镐挖掉(硬度 3.0F 不变),只是 TNT / 苦力怕爆炸无法摧毁(10000.0F 远超 TNT 最大爆炸能量 7.0)。
resistance 的第二重用途:配方过滤
resistance 还在配方生成里当过滤器用,这是它最容易被忽略的功能。getRegistredChestsByTier(parentMaterial, tier, resistance) 要求候选箱子满足 typ.resistance >= resistance:
// 生成直做配方时传入 resistance - 1,允许同 tier 的非抗爆箱子作为中心
Object[] curTiers = getRegistredChestsByTier(typ, typ.tier, typ.resistance - 1);
// 生成升级配方时传入 resistance,只允许抗爆等级不低于自己的前一级
Object[] prevTiers = getRegistredChestsByTier(typ, typ.tier - 1, typ.resistance);
Object[] prevPrevTiers = getRegistredChestsByTier(typ, typ.tier - 2, typ.resistance);
对黑曜石箱子(resistance = 1)的实际影响:
recipeDirect用resistance - 1 = 0→ tier 5 的 3 个箱子(钻石resistance 0、水晶0、黑曜石1)全部符合resistance >= 0,跳过自身后得到 2 条配方。- 它没有
recipeUpgradeOneTier,所以升级路径上不受此过滤影响。
对下界合金箱子(resistance = 1、tier = 6、recipeDirect = null)则是硬过滤:getRegistredChestsByTier(NETHERITE, 5, 1) 只返回 resistance >= 1 的 tier 5 箱子,即只有黑曜石箱子。这就是"抗爆箱子只能由抗爆箱子升级而来"这条规则的实现。
配方
| 字段 | 值 | 实际生成的配方 |
|---|---|---|
recipeDirect |
"mmmmPmmmm" → mmm/mPm/mmm |
8 黑曜石围 1 钻石箱子 / 8 黑曜石围 1 水晶箱子(2 条) |
recipeUpgradeOneTier |
null |
无 |
recipeUpgradeTwoTiers |
null |
无 |
'm' 在这里是 Blocks.obsidian(translateOreName 对 obsidian / dirt 做特判,其余材质名原样作为矿石字典字符串使用)。'O' 键也固定是 Blocks.obsidian。
升级关系
来源:
| 来源 | 形态 |
|---|---|
| Diamond to Obsidian Chest Upgrade | mmm/mGm/mmm |
配方 recipeDirect |
8 黑曜石围钻石箱子 或 8 黑曜石围水晶箱子 |
去向(2 个,是全局容量跃升的关键节点):
| 升级器 | 目标 | 配方 | 说明 |
|---|---|---|---|
| Obsidian to Netherite Chest Upgrade | Netherite Chest(108 → 135) | OOO/msm/OOO |
抗爆箱子只能由抗爆箱子升级而来(见上) |
| Obsidian to Dark Steel Chest Upgrade | Dark Steel Chest(108 → 135) | OOO/msm/OOO |
玄钢箱子非抗爆,所以这一路放弃了抗爆特性 |
从黑曜石箱子升级容量 108 → 135,不会掉出物品(applyUpgradeItem 的 newSize = 135 > 108)。
存档兼容
IronChest.missingMapping 有一对互斥的旧名重映射,取决于 DARKSTEEL / NETHERITE 谁开启:
| 条件 | 旧存档名 | 重映射到 |
|---|---|---|
DARKSTEEL.isEnabled() |
IronChest:obsidianNetheriteUpgrade |
diamondDarkSteelUpgrade |
NETHERITE.isEnabled() |
IronChest:diamondDarkSteelUpgrade |
obsidianNetheriteUpgrade |
ENABLE_DARK_STEEL_CHESTS 默认 = isGTNHLoaded(GTNH 上 true),ENABLE_NETHERITE_CHESTS 默认 = !isGTNHLoaded,所以 GTNH 上走"obsidianNetheriteUpgrade → diamondDarkSteelUpgrade"这一支。
NBT 字段
Items(TAG_Compound 列表,每项含 Slot byte)、facing(byte)。TileEntityObsidianChest 无覆写。
渲染
| 事项 | 值 |
|---|---|
| 方块图标 | ironchest:obsidian_top / obsidian_front / obsidian_side |
| 模型贴图 | ironchest:textures/model/obsidianchest.png |
| GUI 贴图 | ironchest:textures/gui/diamondcontainer.png(借用) |
| 透明内容显示 | 否 |
相关条目
- Iron Chest 方块 - metadata 与抗爆机制
- ItemIronChest - 物品形态
- Obsidian to Netherite Chest Upgrade · Obsidian to Dark Steel Chest Upgrade
- 箱子类型开关 - 影响本箱子相关的旧名重映射分支