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

相关条目