核控主方块(IC2NuclearControl:blockNuclearControlMain)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | blockNuclearControlMain(IC2NuclearControl.java:157) |
| 模组 | Nuclear Control 2,modid IC2NuclearControl(IC2NuclearControl.java:57-62) |
| 材质域 | nuclearcontrol(如 ThermalMonitor.java:72) |
| 父类 | net.minecraft.block.BlockContainer(BlockNuclearControlMain.java:65) |
| 材质 | Material.iron(BlockNuclearControlMain.java:70) |
| 硬度 | 0.5(BlockNuclearControlMain.java:71) |
| 爆炸抗性 | 0.0(未调用 setResistance;grep -c 'setResistance' BlockNuclearControlMain.java = 0) |
| 创造标签 | IC2NuclearControl.tabIC2NC(BlockNuclearControlMain.java:72) |
| 子方块数 | 11(BlockNuclearControlMain.java:74-84) |
| 渲染类型 | IC2NuclearControl.instance.modelId(BlockNuclearControlMain.java:92-94) |
功能
这是本模组唯一的「多用途方块」容器方块。它本身不提供任何功能,全部 11 种功能由 metadata(损伤值)区分的子方块(Subblock)提供。子方块在 BlockNuclearControlMain 构造函数中逐个实例化并放入 Map<Integer, Subblock>(BlockNuclearControlMain.java:73-89)。
该方块继承 BlockContainer,因此放置后会为每个子方块创建对应的 TileEntity;它实现了 IC2 的 IWrenchable 语义 —— 放置时根据玩家视角决定朝向(BlockNuclearControlMain.java:166-195),并可被扳手拆下。
子方块(metadata)一览
metadata 常量定义于 utils/BlockDamages.java:7-19;中文名取自 assets/nuclearcontrol/lang/zh_CN.lang。
| metadata | 常量 | 中文名 | TileEntity | 需依附方块 | 有 GUI | 碰撞箱 |
|---|---|---|---|---|---|---|
| 0 | DAMAGE_THERMAL_MONITOR |
温度监控器 | TileEntityThermo |
是 | 是 | 0.0625,0,0.0625 → 0.9375,0.4375,0.9375 |
| 1 | DAMAGE_INDUSTRIAL_ALARM |
工业警报器 | TileEntityIndustrialAlarm |
是 | 是 | 0.125,0,0.125 → 0.875,0.4375,0.875 |
| 2 | DAMAGE_HOWLER_ALARM |
蜂鸣报警器 | TileEntityHowlerAlarm |
是 | 是 | 0.125,0,0.125 → 0.875,0.4375,0.875 |
| 3 | DAMAGE_REMOTE_THERMO |
远程温度监控器 | TileEntityRemoteThermo |
否 | 是 | 0,0,0 → 1,1,1 |
| 4 | DAMAGE_INFO_PANEL |
工业信息屏 | TileEntityInfoPanel |
否 | 是 | 0,0,0 → 1,1,1 |
| 5 | DAMAGE_INFO_PANEL_EXTENDER |
工业信息屏扩展 | TileEntityInfoPanelExtender |
否 | 否 | 0,0,0 → 1,1,1 |
| 6 | DAMAGE_ENERGY_COUNTER |
电力计数器 | TileEntityEnergyCounter(取自 RF 供应方) |
否 | 是 | 0,0,0 → 1,1,1 |
| 7 | DAMAGE_AVERAGE_COUNTER |
平均电力计数器 | TileEntityAverageCounter(取自 RF 供应方) |
否 | 是 | 0,0,0 → 1,1,1 |
| 8 | DAMAGE_RANGE_TRIGGER |
范围触发器 | TileEntityRangeTrigger |
否 | 是 | 0,0,0 → 1,1,1 |
| 9 | DAMAGE_ADVANCED_PANEL |
高级工业信息屏 | TileEntityAdvancedInfoPanel |
否 | 是 | 随 TileEntity 变化 |
| 10 | DAMAGE_ADVANCED_EXTENDER |
高级工业信息屏扩展 | TileEntityAdvancedInfoPanelExtender |
否 | 否 | 随 TileEntity 变化 |
子方块类位于 blocks/subblocks/,每个类构造时向 Subblock 传入 DAMAGE 与未本地化名(如 ThermalMonitor.java:16,36-38)。TileEntity 列来自各 Subblock.getTileEntity()(如 ThermalMonitor.java:41-43);「需依附方块」来自 isSolidBlockRequired();「有 GUI」来自 hasGui()。
metadata 6 与 7 与其他子方块不同:它们不新建 TileEntity,而是优先复用 RF 能量供应方持有的单例,为 null 时才 new(EnergyCounter.java:38-41、AverageCounter.java:38-41,取自 crossmod/RF/CrossRF.java:42)。这样电力计数器与平均电力计数器在 RF 环境下共享同一份测量数据源。
数值
| 数值名 | 值 |
|---|---|
| 合法 metadata 范围 | 0–10(BlockDamages.DAMAGE_MAX = 10,BlockDamages.java:19) |
| 越界 metadata 处理 | 放置、放置后、加入世界时均回落为 0(BlockNuclearControlMain.java:140-142,162-164,205-207) |
| 创造标签子方块 | 由 ItemNuclearControlMain 配合方块本体提供;标签图标为温度计(IC2NCCreativeTabs.java:26-37) |
交互
| 触发 | 行为 |
|---|---|
| 右键(meta 2 蜂鸣报警器 + 手持染料) | 改变报警器颜色,消耗 1 个染料(BlockNuclearControlMain.java:406-420) |
右键(meta 2 + IC2 涂装器 ItemToolPainter) |
套用涂装器颜色,工具损耗 1 点耐久(BlockNuclearControlMain.java:421-428) |
| 右键(手持扳手) | 调整朝向或拆下(WrenchHelper.isWrenchClicked,BlockNuclearControlMain.java:431-433) |
| 潜行右键 | 返回 false,不打开 GUI(BlockNuclearControlMain.java:434-436) |
右键(子方块 hasGui() 为真) |
以 metadata 作为 GUI ID 打开界面(BlockNuclearControlMain.java:437-447) |
| 邻接方块变化 | 需依附的子方块失去支撑时掉落自身(BlockNuclearControlMain.java:248-256) |
数值:红石输出
canProvidePower() 返回 true(BlockNuclearControlMain.java:396-399),但只对 TileEntityThermo 与 TileEntityRangeTrigger 生效,其余子方块一律返回 0(BlockNuclearControlMain.java:471-473)。强电与弱电输出走同一实现(isProvidingWeakPower 直接委托 isProvidingStrongPower,BlockNuclearControlMain.java:465-468),且温度监控器正对反应堆时不输出(BlockNuclearControlMain.java:499-504)。