Block&Chain Goblin(链球地精)
事实基准:
/Users/evlos/a/mirror/twilightforest(minecraftVersion = 1.7.10)逐行读源码。
基本信息
| 属性 | 值 | 来源 |
|---|---|---|
| 注册实体名 | TwilightForest:Block&Chain Goblin |
TwilightForestMod.java:666 |
| 实体 ID 常量 | idMobBlockGoblin = 220 |
TwilightForestMod.java:1122 |
| 蛋色 | 主 0xd3e7bc / 副 0x1f3fff |
TwilightForestMod.java:668-669 |
| 类 | twilightforest.entity.EntityTFBlockGoblin(325 行) |
entity/EntityTFBlockGoblin.java:30 |
| 父类 | EntityMob,实现 IEntityMultiPart |
EntityTFBlockGoblin.java:30 |
| 体型 | setSize(0.9F, 1.4F) |
EntityTFBlockGoblin.java:50 |
| 所属结构 | 骑士要塞(Knight Stronghold,TFFeature 15) |
TFFeature.java:187 |
注册名含
&(Block&Chain Goblin),查实体时注意这个符号,不是 “Block and Chain”。 刷怪笼与命令里要原样写。
数值
| 属性 | 值 | 来源 |
|---|---|---|
maxHealth |
20 | EntityTFBlockGoblin.java:89 |
movementSpeed |
0.28 | EntityTFBlockGoblin.java:90 |
attackDamage |
8 | EntityTFBlockGoblin.java:91 |
链球旋转速度 CHAIN_SPEED |
16(度/tick) | EntityTFBlockGoblin.java:32 |
| 链长(挥动时) | 0.9 | EntityTFBlockGoblin.java:285 |
| 链长(静止时) | 0.3 | EntityTFBlockGoblin.java:287 |
| 链球 Y 偏移公式 | 1.5 - 链长 / 4.0 |
EntityTFBlockGoblin.java:131-133 |
| 额外护甲值 | +11(super 基础上,上限 20) |
EntityTFBlockGoblin.java:315-323 |
| 命中后上抛高度 | motionY += 0.4 |
EntityTFBlockGoblin.java:256 |
| 命中后硬直 | recoilCounter = 40 tick |
EntityTFBlockGoblin.java:261 |
| 碰撞检测扩框 | 水平各 +0.2 | EntityTFBlockGoblin.java:230 |
AI 行为
EntityTFBlockGoblin.java:52-59:
| 槽位 | Goal | 说明 |
|---|---|---|
| 0 | EntityAISwimming |
涉水 |
| 1 | EntityAIAvoidEntity(EntityTNTPrimed, 2.0F, 0.8F, 1.5F) |
躲避点燃的 TNT |
| 5 | EntityAIAttackOnCollide(EntityPlayer, 1.0F, false) |
撞击玩家 |
| 6 | EntityAIWander(1.0F) |
游荡 |
| 7 | EntityAIWatchClosest / EntityAILookIdle |
注视 / 待机 |
| target 1 | EntityAIHurtByTarget(false) |
被打后反击 |
| target 2 | EntityAINearestAttackableTarget(EntityPlayer) |
主动索敌玩家 |
特殊机制 —— 铁球与链条
本实体是多部件实体(IEntityMultiPart),partsArray 固定包含 4 个部件
(EntityTFBlockGoblin.java:63-64):
| 部件 | 类 | 作用 |
|---|---|---|
block |
EntityTFSpikeBlock |
铁球本体,setSize(0.75F, 0.75F),不受伤害(EntityTFSpikeBlock.java:13-15, 26-28) |
chain1..3 |
EntityTFGoblinChain |
3 段链条插值点(EntityTFBlockGoblin.java:213-215) |
- 碰撞不算伤害:
attackEntityAsMob覆写为只swingItem()并return false(EntityTFBlockGoblin.java:159-167)—— 贴身不会因碰撞掉血。 - 伤害由铁球造成:
applyBlockCollision调用super.attackEntityAsMob(collided)(EntityTFBlockGoblin.java:253),命中后把目标向上抛并触发 40 tick 硬直。 - 攻击音效播放
mob.irongolem.throw(EntityTFBlockGoblin.java:257)。 - 摆动判定:
isSwingInProgress或(有攻击目标 && recoilCounter == 0) (EntityTFBlockGoblin.java:152-154)。 - 部位不可被伤害:
attackEntityFromPart恒返回false(EntityTFBlockGoblin.java:299-302)。
声音与掉落
- 三种音效全部复用红帽子哥布林的音效:
mob.redcap.redcap/mob.redcap.hurt/mob.redcap.die(EntityTFBlockGoblin.java:95-107)。 - 掉落:源码中声明了
getDropItemId()返回TFItems.armor_shard(装甲碎片,EntityTFBlockGoblin.java:112-114)。 ⚠️ 但该方法名在本仓库内只有这一处与EntityTFGoblinKnightLower两处使用, 其余 16 个实体全部用getDropItem(),且全仓库没有任何地方调用getDropItemId。 因此本实体运行时实际掉落装甲碎片与否无法从本仓库核实 —— 检索方式:grep -rn getDropItemId src/(twilightforest源码树内仅 4 处命中, 2 处是本方法、1 处是同类方法、1 处是ItemTFScepterLifeDrain的无关同名方法)。 - 成就:在暮色森林维度内被玩家击杀触发
twilightHunter(EntityTFBlockGoblin.java:120-126)。
相关条目
- Armor Shards(装甲碎片) - 本实体的掉落物
- Chain Block(链球) - 玩家可使用的同款链球投射物