已成形星门方块

BlockFormedGate 是 星门 成形后替换全部 16 个结构方块的隐形载体。玩家无法正常获得它——注册时即通过 NEI 的 API.hideItem(new ItemStack(blocks.formedGateBlock)) 隐藏,且 getSubBlocks 未覆写,实际只能靠拆解掉回收。

基本信息

属性 值
注册名 stargatenh:<group>_stargate_formed
方块类 BlockFormedGate(继承 BlockContainer)
ItemBlock BlockFormedGate.ItemBlockFormedGate(在 NEI 中被 API.hideItem 隐藏)
TileEntity hasTileEntity(meta) = meta > 1;仅控制器位置生成 TileStargateController
材质 Material.iron
渲染类型 getRenderType() = -1,renderAsNormalBlock() = false,isOpaqueCube() = false → 完全不可见
可见外观 由 RenderStargateTESR 绘制的 models/stargate.obj + textures/models/stargate.png 提供

6 种材质组各自注册一个独立实例,stargatenh:<group>_stargate_formed(如 stargatenh:default_stargate_formed、stargatenh:heavenly_fire_stargate_formed 等)。

metadata 语义

成形时 formGate() 把每个位置的原始身份原样编码进 metadata:

metadata 含义 有无 TileEntity 破坏掉落
0 原本是 星门环方块 无 stargateBlock ×1,damage 0
1 原本是 星门雪佛龙方块 无 stargateBlock ×1,damage 1
2 / 3 / 4 / 5 原本是 星门控制器方块,meta 即 facing 有 TileStargateController controllerBlock ×1,damage 0

[!TIP] 这是无损的。 拆掉成形星门会精确掉回组装时的那 16 个方块,metadata(朝向、雪佛龙/环身份)全部保留,因此可以直接重新摆放再次触发成形。getDrops() 完全忽略 fortune 参数,时运对掉落无影响。

功能

  • 承载碰撞传送:addCollisionBoxesToList() 覆写在原版碰撞盒之外追加一个触发盒——仅服务端、仅当 TE 是 TileStargateController、仅当 isTransmitting()(即正在拨出)时生效,且只有 EntityLivingBase 会被传送。触发盒按朝向为 (x−1, y+1, z)–(x+2, y+4, z+1)(facing 0 或 2)或 (x, y+1, z−1)–(x+1, y+4, z+2)。
  • 承载选取框:getSelectedBoundingBoxFromPool() 按朝向给出 5×5×1 的选取框(facing 2/3 → (x−2, y, z)–(x+3, y+5, z+1);其余 → (x, y, z−2)–(x+1, y+5, z+3))。
  • 承载解体逻辑:breakBlock() 区分两条路径——meta > 1(控制器位置)直接 deform();meta 0/1 则泛洪(上限 20 格)找到控制器后执行 runDeformCheck(),15 项检查中任一不满足即整体 deform()。

交互

触发 行为
破坏 整座星门解体,全部方块还原为星门方块 / 控制器方块
放置 走 onPostBlockPlaced() 结构检测,凑齐时可再次成形
碰撞(生物) 正在拨出时把生物传送到目标星门
左键 / 右键 无自定义交互

数值

数值名 值
一座星门中的数量 16(1 控制器 + 7 雪佛龙 + 8 环)
选取框 5 × 5 × 1
传送落点 Y 偏移 +1.5
能量存储 / 传输 无(本 mod 无能量系统)

所属多方块结构

  • 星门 - 成形后的替代表征,metadata 记录原始方块身份

相关条目