Stargate Iris
基本信息
| 属性 | 值 |
|---|---|
| 实体注册名 | Stargate Iris(SGCraft.java:352) |
| modid | SGCraft,经 EntityRegistry.registerModEntity(cls, name, ...) 注册(BaseMod.java:347),完整名即 SGCraft:Stargate Iris |
| 枚举序号 | SGEntity.Iris = 0(entities/SGEntity.java:9-11,经 id.ordinal() 传入,BaseMod.java:335) |
| 类 | gcewing.sg.entities.IrisEntity(entities/IrisEntity.java:32),共 166 行 |
| 父类 | BaseEntity |
| 接口 | IEntityAdditionalSpawnData(entities/IrisEntity.java:32) |
| 更新频率 | 1000000 tick(SGCraft.java:352) |
| 追踪半径 | 256 格(BaseMod.java:347) |
功能
虹膜实体是 虹膜升级 的碰撞载体。它自身没有 AI、没有 tick 逻辑(entityInit() 是空的,entities/IrisEntity.java:65-66),只保存一个方块坐标 blockPos 和一个 AxisAlignedBB 碰撞盒(entities/IrisEntity.java:36、entities/IrisEntity.java:58-63)。
碰撞是否生效取决于星门的虹膜状态:canBeCollidedWith() 先取回该坐标处的 SGBaseTE,只有 irisIsClosed() 为真才返回 true(entities/IrisEntity.java:74-81);canBePushed() 恒为 false(entities/IrisEntity.java:90-92)。getCollisionBoundingBox 在未关闭时返回 null(entities/IrisEntity.java:83-87)。也就是说虹膜开着的时候这个实体完全不参与碰撞,但依然存在于世界中。
它不是"看起来像"屏障的装饰品——关闭时确实能挡住实体,配合 sgcraft:iris 伤害源完成"撞上虹膜即死"的效果。
数值
碰撞盒由 SGBaseTE 局部坐标经 localToGlobalTransformation() 变换得到,构造时的局部参数(entities/IrisEntity.java:44-55):
| 参数 | 值 | 来源 |
|---|---|---|
| 半径 | 2 格 | entities/IrisEntity.java:44 |
| 中心偏移 | (0, 2, irisZPosition) |
entities/IrisEntity.java:45-48 |
| 厚度 | SGBaseTE.irisThickness = 0.2 |
entities/IrisEntity.java:45 |
| Z 平面偏移 | SGBaseTE.irisZPosition = 0.1 |
tileentities/SGBaseTE.java:100 |
updateIrisEntity() 会在安装 / 卸载升级、虹膜开合时重建或移除该实体(调用点见 tileentities/SGBaseTE.java:376)。
交互
- 玩家无直接交互。它的存在完全由
SGBaseTE的虹膜状态驱动。 - 与生物碰撞:仅在虹膜关闭时生效,撞击判定为
sgcraft:iris,单次伤害 1000000(tileentities/SGBaseTE.java:102-103)。
持久化
NBT 键:blockX/Y/Z 与碰撞盒 6 个分量(entities/IrisEntity.java:95-124)。shouldSetPosAfterLoading 返回 false,避免加载后碰撞盒被重置(entities/IrisEntity.java:126-129)。跨客户端同步走 writeSpawnData / readSpawnData(entities/IrisEntity.java:131-164)。
相关条目
- Stargate Iris Upgrade - 创建它的升级件
- SGBaseTE - 状态来源
- Stargate Base - 宿主方块