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)。

相关条目