已成形星门方块
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 记录原始方块身份