Falling Ice(坠落冰块)

事实基准:/Users/evlos/a/mirror/twilightforest(minecraftVersion = 1.7.10)逐行读源码。

基本信息

属性 值 来源
注册名 TwilightForest:tffallingice TwilightForestMod.java:867
实体 ID 常量 idVehicleSpawnFallingIce = 14 TwilightForestMod.java:190
注册形式 EntityRegistry.registerModEntity 直调(无刷怪蛋) TwilightForestMod.java:865-872
跟踪距离 / 更新频率 80 / 3 TwilightForestMod.java:870-871
类 twilightforest.entity.boss.EntityTFFallingIce(213 行,在 boss 包但不是 Boss) entity/boss/EntityTFFallingIce.java:18
父类 net.minecraft.entity.Entity(裸 Entity,无 AI、无属性) EntityTFFallingIce.java:18
体型 setSize(2.98F, 2.98F) EntityTFFallingIce.java:27
外观方块 Blocks.packed_ice EntityTFFallingIce.java:206-208
唯一生成方 EntityTFYetiAlpha.makeBlockFall() entity/boss/EntityTFYetiAlpha.java:429
生成位置 头顶正上方第一个非空气格,且实体从 by - 3 处生成 EntityTFYetiAlpha.java:389-396, 429

类放在 twilightforest.entity.boss 包里,但它是环境破坏型投射物, 没有生命值、没有 AI、不能被 /kill 以外的常规手段处理 —— 归类只是文件位置,不表示它是塔主。

数值

属性 值 来源
悬停时间 HANG_TIME 100 tick(先在空中挂 5 秒) EntityTFFallingIce.java:20, 74-76
坠落时每 tick 重力 0.04 EntityTFFallingIce.java:75
速度衰减 每轴 ×0.98 EntityTFFallingIce.java:79-81
落地反弹 motionY *= -0.5,水平 ×0.7 EntityTFFallingIce.java:87-89
每次伤害系数 hurtAmount 10 EntityTFFallingIce.java:29
伤害上限 hurtMax 30 EntityTFFallingIce.java:30
伤害公式 min(floor(落差 - 1.0) × 10, 30) EntityTFFallingIce.java:133-145
可破坏方块 原版 ice / packed_ice / stone EntityTFFallingIce.java:180-181
破坏范围扩框 X/Z 各 +0.5 EntityTFFallingIce.java:113
落地粒子数 200 个 blockcrack_<packed_ice>_0 EntityTFFallingIce.java:149-155
拖尾粒子 每 tick 2 个 snowwarning EntityTFFallingIce.java:118-127

特殊机制

悬停后坠落

onUpdate(EntityTFFallingIce.java:67-116)先自增 fallTime, 只有当 fallTime > 100 才开始施加重力(EntityTFFallingIce.java:72-76)。 这意味着冰块会先在生成点悬停约 5 秒,给玩家反应时间。

坠落伤害

fall(float)(EntityTFFallingIce.java:133-160)用原版的落体距离算伤害, 对周围 2 格扩框内所有实体造成 fallingBlock 伤害,但 EntityTFYetiAlpha 被显式豁免(EntityTFFallingIce.java:141)—— 雪人首领扔的冰块砸不到自己。

连锁消除

onUpdate 里会检查同区域更「老」的 EntityTFFallingIce 并将其清除 (EntityTFFallingIce.java:105-112)—— 冰块不会互相堆叠重叠。

破坏地形

destroyIceInAABB(EntityTFFallingIce.java:165-186)把范围内的 ice / packed_ice / stone 直接替换为 air(flag 3)。 它会挖掉基岩以上的石头 —— 雪人首领战可以把地面打穿。

落地即毁

onGround 时 setDead()(EntityTFFallingIce.java:86-92), 所以只有下落过程中才可被碰撞。

其它

  • entityInit() 被覆写为空方法体(EntityTFFallingIce.java:55)—— 不注册任何 DataWatcher 键。
  • readEntityFromNBT / writeEntityToNBT 都是空实现(第 188-196 行), 冰块不保存任何状态。
  • canTriggerWalking() 返回 false(EntityTFFallingIce.java:51-53)。

相关条目