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):
- 命中生物(排除抛出者自己)造成 10 点伤害,成功则
ticksExisted += 60加速回程 (EntityTFChainBlock.java:91-96)。 - 撞到非空气方块时播放
random.anvil_land(EntityTFChainBlock.java:102), 若方块硬度 > 0.3 则按 6 个面各自反向反射速度(EntityTFChainBlock.java:105-146)。 affectBlocksInAABB(EntityTFChainBlock.java:170-210)逐格清除 爆炸抗性 < 7 的方块;若抛出者是玩家且该方块可被收获,会先harvestBlock把掉落物给玩家(EntityTFChainBlock.java:189-194)—— 这是把链球当采集工具用的机制。- 砸够方块后提前回程(
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)。
相关条目
- Block&Chain Goblin(链球地精) - 使用同类锁链部件的哥布林
- Chain Block(链球) - 发射本实体的物品