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

相关条目