Ice Bomb(寒冰炸弹投射物)

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

基本信息

属性 值 来源
注册实体名 TwilightForest:tfthrownice TwilightForestMod.java:873-880
实体 ID 常量 idVehicleSpawnThrownIce = 15 TwilightForestMod.java:191
注册形式 EntityRegistry.registerModEntity 直调(不经 TFCreatures) TwilightForestMod.java:873
追踪距离 / 更新频率 80 / 2 TwilightForestMod.java:877-878
类 twilightforest.entity.boss.EntityTFIceBomb entity/boss/EntityTFIceBomb.java(207 行)
父类 net.minecraft.entity.projectile.EntityThrowable 同上 :22
所属结构 雪怪洞穴(yetiCave 特性 ID 17) TFFeature.java:104

⚠️ 注册名是 tfthrownice,不是 Ice Bomb。 TwilightForest:iceBomb 是物品 (Ice Bomb(寒冰炸弹)),本条目是投射物实体。

数值

属性 值 来源
每 tick 区域伤害 1 点(TFDamageSources.iceBomb) EntityTFIceBomb.java:172
减速效果 Potion.moveSlowdown,20 × 5 = 100 tick,强度 2 同上 :173-175
区域计时 zoneTimer 初值 80 tick 同上 :24
区域伤害触发间隔 每 10 tick 一次(zoneTimer % 10 == 0) 同上 :148
方块影响半径 3 格(球判定 lengthVector() <= range + 0.5) 同上 :60、:68
实体伤害范围 包围盒 expand(3, 2, 3) 同上 :156
初速 func_70182_d 0.75F 同上 :190-193
重力(未命中) 0.025F 同上 :199-201
重力(已命中) 0F 同上 :200
命中后速度衰减 三轴 *= 0.1 同上 :106-108
渲染方块 Blocks.packed_ice 同上 :185-187

AI 行为 / 特殊机制

投掷者:EntityTFYetiAlpha.attackEntityWithRangedAttack(EntityTFYetiAlpha.java:440), 以 setThrowableHeading(..., 0.75F, 12.0F) 抛出; entity/EntityTFTroll.java 与 item/ItemTFIceBomb.java 也引用本类。

自毁保护:若投掷者是 EntityTFYetiAlpha 且落点距投掷者平方距离 ≤ 100(10 格), 直接 setDead()(:40-46)——雪怪不会炸到自己。

落地即冻结:onImpact 置 motionY = 0、hasHit = true,服务端执行 doTerrainEffects()(:38-54)。半径 3 格内(:65-72):

原方块 / 材质 变为 行号
Material.water Blocks.ice :79-81
Material.lava Blocks.obsidian :82-84
空气且 Blocks.snow_layer 可放置 Blocks.snow_layer :85-86
已是雪层且层数 < 7 层数 +1 :88-90

区域伤害:已命中后每 tick zoneTimer-- 并调用 makeIceZone()(:111-113)。 客户端发 20 个 snowstuff 粒子(:137-145),服务端每 10 tick 对 expand(3,2,3) 内实体结算(:146-151、:154-179):

  • 命中 EntityTFYeti:直接 setDead() 并在原位与上方一格各放一块 Blocks.ice 把尸体冻住(:161-169,源码注释留有 TODO: make "frozen yeti" entity?)。
  • 其它 EntityLivingBase:1 点 TFDamageSources.iceBomb 伤害 + 100 tick 强度 2 的缓慢。
  • 投掷者本体被排除(entity != this.getThrower(),:159)。

计时耗尽:zoneTimer <= 0 时 detonate(),但该方法只做 setDead()(:181-183)—— 本投射物落地后不会再产生实体爆炸,全部伤害来自上面的区域结算。

粒子:飞行中每 tick 10 个 snowstuff 粒子(:125-133)。

刷怪蛋:走 EntityRegistry.registerModEntity 直调,不进入 TFCreatures.entityEggs,无刷怪蛋。

相关条目