Lower Goblin Knight(低阶地精骑士)

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

基本信息

属性 值 来源
注册实体名 TwilightForest:Lower Goblin Knight TwilightForestMod.java:676
实体 ID 常量 idMobGoblinKnightLower = 222 TwilightForestMod.java:1124
蛋色 主 0x566055 / 副 0xd3e7bc TwilightForestMod.java:678-679
类 twilightforest.entity.EntityTFGoblinKnightLower(257 行) entity/EntityTFGoblinKnightLower.java:27
父类 EntityMob EntityTFGoblinKnightLower.java:27
体型 setSize(0.7F, 1.1F) EntityTFGoblinKnightLower.java:35
骑乘偏移 1.0 格 EntityTFGoblinKnightLower.java:138-140
所属结构 骑士要塞(Knight Stronghold,TFFeature 15) TFFeature.java:188

刷怪表:权重 5、群集 1~2(TFFeature.java:188)—— 暮色森林里数量最稀少的 骑士要塞怪物之一。它是**「双体怪」的下半身**:永远带着一名 EntityTFGoblinKnightUpper(注册名 TwilightForest:Upper Goblin Knight)。

数值

属性 值 来源
maxHealth 20 EntityTFGoblinKnightLower.java:55
movementSpeed 0.28 EntityTFGoblinKnightLower.java:56
attackDamage 4 EntityTFGoblinKnightLower.java:57
护甲加成 +17(super 基础上,上限 20) EntityTFGoblinKnightLower.java:236-248
护甲 DataWatcher 键 17(DATA_EQUIP) EntityTFGoblinKnightLower.java:29, 71
持盾受击判定角度 差值 150°~230° 之间 EntityTFGoblinKnightLower.java:204
背后攻击角度 差值 > 300° 或 < 60° EntityTFGoblinKnightLower.java:211

与 Block&Chain Goblin 的 +11 护甲(EntityTFBlockGoblin.java:315-323) 相比,低阶地精骑士的 +17 更高,且有方向性:正面持盾几乎免疫, 背后打会直接破甲。

AI 行为

EntityTFGoblinKnightLower.java:37-44:

槽位 Goal 说明
0 EntityAITFRiderSpearAttack(this) 自身行为由上半身(骑手)驱动
1 EntityAISwimming 涉水
3 EntityAIAttackOnCollide(EntityPlayer, 1.0D, false) 撞击玩家
6 EntityAIWander(1.0D) 游荡
7 EntityAIWatchClosest / EntityAILookIdle 注视 / 待机
target 1 EntityAIHurtByTarget(false) 被打后反击
target 2 EntityAINearestAttackableTarget(EntityPlayer, 0, false) 主动索敌玩家(false = 不理生物群系限制)

特殊机制

双体结构

onSpawnWithEgg 与 initCreature 都会在同坐标生成一名 EntityTFGoblinKnightUpper 并 mountEntity 到自己身上 (EntityTFGoblinKnightLower.java:110-133)—— 刷怪蛋生成或结构投放时必然成对出现。

onUpdate 会把上半身的攻击目标同步给下半身(第 145-155 行); attackEntityAsMob 则直接转发给骑手(第 160-168 行)—— 下半身自己不造成近战伤害。

盾牌机制

attackEntityFrom(EntityTFGoblinKnightLower.java:174-220)按攻击者与自身的 方位角差决定结果:

情况 结果 来源
骑手有盾 + 差值 150°~230°(正面) takeHitOnShield 成功则完全免伤 EntityTFGoblinKnightLower.java:204-208
有甲 + 差值 > 300° 或 < 60°(背后) breakArmor() 移除护甲 EntityTFGoblinKnightLower.java:211-213

breakArmor 会生成 3 段铁胸甲碎块粒子并 setHasArmor(false) (EntityTFGoblinKnightLower.java:225-231)。护甲状态写入 NBT 的 hasArmor 字段(第 93-105 行)。

掉落

源码中声明了 getDropItemId() 返回 TFItems.armor_shard(装甲碎片, EntityTFGoblinKnightLower.java:253-255)。 ⚠️ 该方法名在全仓库只有 2 处使用(本类与 EntityTFBlockGoblin), 其余 16 个实体全部用 getDropItem(),且全仓库无任何调用点。 因此运行时实际掉落装甲碎片与否无法从本仓库核实 —— 检索方式:grep -rn getDropItemId src/main/java(4 处命中,其中 2 处是本方法定义, 1 处是同类方法,1 处是 ItemTFScepterLifeDrain.getTargetDropItemId 的无关同名方法)。

对照:上半身 EntityTFGoblinKnightUpper 用的是正确的 getDropItem() (entity/EntityTFGoblinKnightUpper.java:433-435),同样返回 armor_shard。

相关条目