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)。

相关条目