Nuclear Control 主方块
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | IC2NuclearControl:blockNuclearControlMain |
| 方块类 | shedar.mods.ic2.nuclearcontrol.blocks.BlockNuclearControlMain(继承 BlockContainer) |
| 物品形式 | ItemNuclearControlMain(ItemBlock 子类,setHasSubtypes(true)、setMaxDamage(0)) |
| 材质 | Material.iron |
| 硬度 | 0.5 |
| 创造标签 | IC2NuclearControl.tabIC2NC(显示名取自 nc.itemgroup.tab) |
| 元数据变体 | 11 个,metadata 0–10(DAMAGE_MAX = 10) |
| 渲染类型 | IC2NuclearControl.instance.modelId(自定义 ISBRH,非普通立方体) |
注册证据:GameRegistry.registerBlock(blockNuclearControlMain, ItemNuclearControlMain.class, "blockNuclearControlMain")(IC2NuclearControl.java:157);11 个变体在构造函数中依次 register(...)(BlockNuclearControlMain.java:74-84),metadata 常量定义于 utils/BlockDamages.java:7-17。
功能
这是本模组的唯一多功能方块:11 个变体共用同一个方块 ID,靠 metadata 区分,共用一套 ItemBlock。11 个变体在构造函数里注册进静态 subblocks 映射(BlockNuclearControlMain.java:73-89),所有行为(碰撞箱、贴图、TileEntity、红石、GUI)都委托给对应的 Subblock 子类。
方块统一设置 isBlockNormalCube()、renderAsNormalBlock()、isOpaqueCube() 全部返回 false(BlockNuclearControlMain.java:96-109),碰撞箱由 setBlockBoundsBasedOnState 按变体与朝向动态计算(BlockNuclearControlMain.java:306-390)。
11 个变体一览(metadata 与显示名取自 utils/BlockDamages.java 与 en_US.lang):
| metadata | 变体名 | TileEntity 类 | 英文显示名 |
|---|---|---|---|
| 0 | ThermalMonitor | TileEntityThermo |
Thermal Monitor |
| 1 | IndustrialAlarm | TileEntityIndustrialAlarm |
Industrial Alarm |
| 2 | HowlerAlarm | TileEntityHowlerAlarm |
Howler Alarm |
| 3 | RemoteThermo | TileEntityRemoteThermo |
Remote Thermal Monitor |
| 4 | InfoPanel | TileEntityInfoPanel |
Industrial Information Panel |
| 5 | InfoPanelExtender | TileEntityInfoPanelExtender |
Information Panel Extender |
| 6 | EnergyCounter | TileEntityEnergyCounter |
Energy Counter |
| 7 | AverageCounter | TileEntityAverageCounter |
Average Counter |
| 8 | RangeTrigger | TileEntityRangeTrigger |
Range Trigger |
| 9 | AdvancedInfoPanel | TileEntityAdvancedInfoPanel |
Advanced Information Panel |
| 10 | AdvancedInfoPanelExtender | TileEntityAdvancedInfoPanelExtender |
Advanced Panel Extender |
TileEntity 的实际注册在 CommonProxy.registerTileEntities()(CommonProxy.java:32-42),共 11 个,与变体数一一对应。createNewTileEntity 恒返回 null,真实创建走 createTileEntity 委托给变体(BlockNuclearControlMain.java:588-597)。
tileentities/ 目录下共有 12 个类,其中 TileEntitySound 未出现在 registerTileEntities 的任何一行,因此它不是已注册内容(ls tileentities/ 对比 CommonProxy.java:32-42)。
数值
| 数值名 | 值 |
|---|---|
| 变体数量 | 11(metadata 0–10) |
| 需要硬质支撑的变体 | 由各 Subblock.isSolidBlockRequired() 逐变体决定,非全块统一 |
| 信息面板(通电时)光照等级 | 7(BlockNuclearControlMain.java:566) |
| 工业警报光照等级 | 取自 TileEntityIndustrialAlarm.lightLevel 字段(BlockNuclearControlMain.java:563-564) |
| 破坏掉落范围 | 物品在 x/y/z 各自 rand × 0.8 + 0.1 的偏移内散落(BlockNuclearControlMain.java:618-620) |
交互
| 触发 | 行为 |
|---|---|
| 右键(HowlerAlarm,meta 2)手持染料 | 通过 DyeUtil 取染料 ID 并调用 tileHowler.setColor,消耗 1 个染料(BlockNuclearControlMain.java:406-420) |
| 右键(HowlerAlarm,meta 2)手持 IC2 油漆刷 | 按油漆刷颜色设置 setColor,油漆刷耐久 -1(BlockNuclearControlMain.java:421-428) |
| 右键(潜行中) | 直接返回 false,不打开 GUI(BlockNuclearControlMain.java:434-436) |
| 右键(其余变体) | 若 Subblock.hasGui() 为真,触发 ForgeEventFactory.onPlayerBlockPlace 后 openGui,GUI ID 即 metadata(BlockNuclearControlMain.java:437-447) |
| 扳手点击 | WrenchHelper.isWrenchClicked 命中则吞掉事件(BlockNuclearControlMain.java:431-433) |
| 邻接方块变化 | 需要硬质支撑的变体失去支撑则掉落到地面并置为空气(BlockNuclearControlMain.java:248-256) |
| 破坏 | dropItems 把 TileEntity 内部 IInventory 的所有物品带 NBT 散落(BlockNuclearControlMain.java:600-645) |
| 提供红石 | canProvidePower() 恒为 true;强/弱输出都走 isProvidingStrongPower(BlockNuclearControlMain.java:396-399、:466-468) |
朝向逻辑:放置时若变体不需要硬质支撑,按玩家视角自动选择 facing(俯仰 ≥65° 记为 1,≤-65° 记为 0,其余按 rotationYaw × 4 / 360 分 4 段映射到 2/5/3/4)(BlockNuclearControlMain.java:169-194)。
渲染特性
getIcon(IBlockAccess, x, y, z, side) 按 metadata 委托给 Subblock.getBlockTexture(BlockNuclearControlMain.java:525-531),因此每个变体有独立贴图。colorMultiplier 仅对 metadata 2(HowlerAlarm)返回 TileEntityHowlerAlarm.getColor(),其余返回白色 16777215(BlockNuclearControlMain.java:647-655)。
相关条目
- Information Panel 阵列 - metadata 4/5/9/10 组成的可扩展显示阵列,本方块最主要的用法
- Nuclear Control 灯方块 - 另一个已注册方块,4 个 metadata 变体
- 通用配置项 - 影响本方块行为的刷新周期与警报范围配置