Skeleton Druid(骷髅德鲁伊)
事实基准:
/Users/evlos/a/mirror/twilightforest(minecraftVersion = 1.7.10)逐行读源码。
基本信息
| 属性 | 值 | 来源 |
|---|---|---|
| 注册实体名 | TwilightForest:Skeleton Druid |
TwilightForestMod.java:473-478 |
| 实体 ID 常量 | idMobSkeletonDruid = 184 |
TwilightForestMod.java:1088 |
| 蛋色 | 主 0xa3a3a3 / 副 0x2a3b17(与 Maze Slime 完全相同) |
TwilightForestMod.java:477-478 |
| 类 | twilightforest.entity.EntityTFSkeletonDruid(248 行) |
entity/EntityTFSkeletonDruid.java:38 |
| 父类 | net.minecraft.entity.monster.EntityMob,实现 IRangedAttackMob |
同上 :38 |
| 生物属性 | EnumCreatureAttribute.UNDEAD |
EntityTFSkeletonDruid.java:145-147 |
| 体型 | 构造函数未调用 setSize —— 沿用 EntityMob 父类默认 |
检索方式::47-68 无 setSize |
| 所属结构 | 不属于任何结构;黑森林群系刷怪表(权重 10、1~4)+ 女巫小屋刷怪笼 | biomes/TFBiomeDarkForest.java:61、world/TFGenWitchHut.java:180 |
数值
| 属性 | 值 | 来源 |
|---|---|---|
maxHealth |
20.0 | EntityTFSkeletonDruid.java:84 |
movementSpeed |
0.25 | EntityTFSkeletonDruid.java:85 |
| 远程弹速度 / 精度 | 0.6F / 6.0F | EntityTFSkeletonDruid.java:224 |
| 远程瞄准高度偏移 | 目标 getEyeHeight() - 2.7 |
EntityTFSkeletonDruid.java:221 |
| 远程抬升补偿 | 水平距离 × 0.2F | EntityTFSkeletonDruid.java:223 |
| 刷怪方块光上限 | <= rand.nextInt(12) |
EntityTFSkeletonDruid.java:243 |
| 刷怪天空光上限 | > rand.nextInt(32) 即否决 |
EntityTFSkeletonDruid.java:238 |
| 万圣节南瓜头概率 | 25%(10 月 31 日) | EntityTFSkeletonDruid.java:184-189 |
| 南瓜头掉落率 | 强制设为 0.0F | EntityTFSkeletonDruid.java:188 |
| 掉落 | TFItems.torchberries 0~(2+looting) 个 + Items.bone 0~(2+looting) 个 |
EntityTFSkeletonDruid.java:125-140 |
attackDamage |
源码中未设置 —— 检索方式:全文无 attackDamage,沿用 EntityMob 链上的父类默认 |
— |
AI 行为 / 特殊机制
「持锄即远程」的切换(setCombatTask,:198-208):两个预建的 AI 任务
aiArrowAttack(EntityAIArrowAttack(this, 1.0D, 60, 10.0F),:40)与
aiAttackOnCollide(EntityAIAttackOnCollide(this, EntityPlayer.class, 1.2D, false),
:41-45)在每次调用时先都被移除,然后按手持物判断:手持 ItemHoe ⇒ 放回
aiArrowAttack,否则放回 aiAttackOnCollide。构造函数在服务端也调一次
(:62-64),onSpawnWithEgg 再调一次(:179)。
武器 = 金锄(addRandomArmor,:164-167):覆写后在 super 之上强制
setCurrentItemOrArmor(0, new ItemStack(Items.golden_hoe))。
所以它平时永远远程,除非玩家把它的锄头打掉才会转为近战(1.2 倍速)。
远程弹是自然法弹(attackEntityWithRangedAttack,:213-227):
生成 EntityTFNatureBolt 并 setTarget(attackTarget),
播放 mob.ghast.fireball 音效,用 setThrowableHeading(tx, ty + 抬升, tz, 0.6F, 6.0F)。
不是原版箭 —— 命名像箭 AI,实际打的是暮色森林的魔法弹。
刷怪光照(isValidLightLevel,:232-247):覆写为
「天空光 ≤ rand(32) 且方块光 ≤ rand(12)」,
比原版史莱姆类更宽松(rand(12) vs rand(8)),也不像
Redcap(红帽地精) 那样带雷暴补偿逻辑。
万圣节南瓜(onSpawnWithEgg,:181-190):头槽空着时,若
Calendar 是 10 月 31 日且 rand.nextFloat() < 0.25F,
戴 1/7 概率的 Blocks.lit_pumpkin 或 Blocks.pumpkin,并把该槽掉落率锁死 0。
AI 任务(:52-60):游泳(1)、避阳静止(2)、避阳逃跑(3)、游荡(4)、
注视玩家 8 格(5)、呆站(6);仇恨:被伤还击(1, false)、攻击玩家(2)。
优先级 4 是 setCombatTask 动态占用的,所以没有固定编号。
成就:onDeath 在暮色森林维度被玩家击杀时触发 twilightHunter(:152-159)。
声音:mob.skeleton.say / mob.skeleton.hurt / mob.skeleton.death /
mob.skeleton.step(:91-114)。
死代码:
EntityTFSkeletonDruid.java:55注释掉的// this.tasks.addTask(4, new EntityAIArrowAttack(this, 1.0D, 60, 10.0F));—— 实际由setCombatTask()接管。EntityTFSkeletonDruid.java:66注释掉的golden_hoe赋值(已由addRandomArmor取代)。EntityTFSkeletonDruid.java:172注释掉的// this.tasks.addTask(4, this.aiArrowAttack);。EntityTFSkeletonDruid.java:174注释掉的// this.enchantEquipment();。
相关条目
- tfnaturebolt(自然法弹) - 本实体远程攻击使用的投射物
- Mist Wolf(迷雾狼) - 同在黑森林群系刷怪表
- King Spider(蛛王) - 同在黑森林群系刷怪表