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。
相关条目
- Armor Shards(装甲碎片) - 源码声明的掉落物
- Knight Phantom(幻影骑士) - 同要塞的塔主
- Block&Chain Goblin(链球地精) - 同要塞的另一种哥布林