Chain Block(链球)

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

基本信息

属性 值 来源
注册名 TwilightForest:tfchainBlock TwilightForestMod.java:899
实体 ID 常量 idVehicleSpawnChainBlock = 18 TwilightForestMod.java:194
注册形式 EntityRegistry.registerModEntity 直调(无刷怪蛋) TwilightForestMod.java:897-904
跟踪距离 / 更新频率 80 / 1 TwilightForestMod.java:902-903
类 twilightforest.entity.EntityTFChainBlock(335 行) entity/EntityTFChainBlock.java:22
父类 EntityThrowable,实现 IEntityMultiPart EntityTFChainBlock.java:22
体型 setSize(0.6F, 0.6F) EntityTFChainBlock.java:48
抛出方 ItemTFChainBlock(链球物品,右键发射) item/ItemTFChainBlock.java:47-49

注册名字符串是 camelCase 的 tfchainBlock(B 大写),不是全小写。 它不是「已注册实体名」,而是 registerModEntity 的内部名,没有刷怪蛋。

数值

属性 值 来源
命中生物伤害 10 EntityTFChainBlock.java:92
每 tick 重力 0.05F EntityTFChainBlock.java:84-86
初始速度 1.5F EntityTFChainBlock.java:313-315
最大砸碎方块数 12 EntityTFChainBlock.java:24
自动回收距离 16 格(离玩家超过此值即回程) EntityTFChainBlock.java:25, 235-237
回收判定距离 1.0 格内消失并归还 EntityTFChainBlock.java:240-246
反弹条件 方块硬度 > 0.3F 才反弹 EntityTFChainBlock.java:106-107
反弹系数 0.6 EntityTFChainBlock.java:109
可破坏方块 爆炸抗性 < 7.0 且硬度 ≥ 0 EntityTFChainBlock.java:186-187
链节数量 5 段 chain1..chain5 EntityTFChainBlock.java:50-52
回程插值因子 min(ticksExisted * 0.03, 1.0) EntityTFChainBlock.java:259

物品耐久 maxDamage(99)、最大堆叠 1(item/ItemTFChainBlock.java:33-34)—— 每扔一次扣 1 点耐久(ItemTFChainBlock.java:54)。

特殊机制

反弹与破坏

onImpact(EntityTFChainBlock.java:89-163):

  1. 命中生物(排除抛出者自己)造成 10 点伤害,成功则 ticksExisted += 60 加速回程 (EntityTFChainBlock.java:91-96)。
  2. 撞到非空气方块时播放 random.anvil_land(EntityTFChainBlock.java:102), 若方块硬度 > 0.3 则按 6 个面各自反向反射速度(EntityTFChainBlock.java:105-146)。
  3. affectBlocksInAABB(EntityTFChainBlock.java:170-210)逐格清除 爆炸抗性 < 7 的方块;若抛出者是玩家且该方块可被收获,会先 harvestBlock 把掉落物给玩家(EntityTFChainBlock.java:189-194)—— 这是把链球当采集工具用的机制。
  4. 砸够方块后提前回程(EntityTFChainBlock.java:158-160)。

回程与客户端锁链

  • 回程时把原速度按 age 权重线性插值到指向玩家的方向(EntityTFChainBlock.java:250-266)。
  • 锁链只在客户端渲染:服务端上 chain1..5 通常为 null,靠 worldObj.isRemote 分支(EntityTFChainBlock.java:219-226, 269-307)在客户端 找附近玩家并把 5 段链按 5% / 25% / 45% / 65% / 85% 插值。
  • 部位免疫:attackEntityFromPart 恒返回 false(EntityTFChainBlock.java:322-325)。
  • 丢掷者消失则自毁(EntityTFChainBlock.java:228-230)。

相关条目