WinterWolf(寒冬狼)

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

基本信息

属性 值 来源
注册实体名 TwilightForest:WinterWolf(无空格、无驼峰) TwilightForestMod.java:700-704
实体 ID 常量 idMobWinterWolf = 227 TwilightForestMod.java:1129
蛋色 主 0xdfe3e5 / 副 0xb2bcca TwilightForestMod.java:703-704
注册形式 TFCreatures.registerTFCreature → 追踪 80 / 更新 3 TFCreatures.java:23、TwilightForestMod.java:700
类 twilightforest.entity.EntityTFWinterWolf(170 行) entity/EntityTFWinterWolf.java:22
父类 twilightforest.entity.EntityTFHostileWolf → net.minecraft.entity.passive.EntityWolf 同上 :22、entity/EntityTFHostileWolf.java:21
体型 setSize(1.4F, 1.9F) EntityTFWinterWolf.java:30
所属结构 不属于任何结构,仅在雪地群系刷怪表,权重 5、1~4 只 biomes/TFBiomeSnow.java:53

注册名是 WinterWolf(一个词),不是 “Winter Wolf”。查实体用 /summon TwilightForest:WinterWolf。

数值

属性 值 来源
maxHealth 30.0(父类 EntityTFHostileWolf 先设为 10.0,本类再覆盖) EntityTFWinterWolf.java:49、EntityTFHostileWolf.java:39
近战伤害 getAttackStrength 6 EntityTFWinterWolf.java:60-62
attackDamage 属性 源码中未设置 —— 本类未写 attackDamage;实际伤害由 getAttackStrength 硬编码 6 同上 :57-71
movementSpeed 源码中未设置,沿用 EntityWolf 的原版值(EntityTFWinterWolf.java 全文无 movementSpeed,EntityTFHostileWolf.java 亦无) 同上
吐息射程 / 时长 / 概率 5F / 30 / 0.1F 同上 :34
BREATH_DURATION 10 —— 死代码,见下 同上 :25
BREATH_DAMAGE 2 —— 死代码,见下 同上 :26
吐息粒子 每 tick 10 个 snowstuff,散布 5~7.5、速度 3.0~3.15 同上 :90-107
getDropItem TFItems.arcticFur 同上 :166-168
getSoundPitch 0.6 + (rand - rand) × 0.2 同上 :129
DataWatcher 索引 BREATH_FLAG = 21 同上 :24、:54
追踪距离 / 更新频率 80 / 3 TFCreatures.java:23

AI 行为 / 特殊机制

🚨 doBreathAttack 的方法体被整段注释掉 —— 寒冬狼的吐息不造成任何伤害,也不点燃。 EntityTFWinterWolf.java:143-149:

public void doBreathAttack(Entity target) {
    // if (!target.isImmuneToFire() && target.attackEntityFrom(DamageSource.inFire, BREATH_DAMAGE))
    // {
    // target.setFire(BREATH_DURATION);
    // }
}

因此 BREATH_DAMAGE = 2 与 BREATH_DURATION = 10(:25-26)都是死代码。 吐息 AI(EntityAITFBreathAttack)仍会正常播放:喷 10 个 snowstuff 粒子/tick (:82-108)并播放 mob.ghast.fireball 音效(:115-123),但没有伤害。 这也解释了为什么它敢 30 点血却只有 6 点近战。

清空父类任务表重建(:32-40): this.tasks.taskEntries.clear() 与 this.targetTasks.taskEntries.clear() 之后重加 —— 0 EntityAISwimming、2 EntityAITFBreathAttack(1.0F, 5F, 30, 0.1F)、 3 EntityAIAttackOnCollide(EntityPlayer, 1.0F, false)、6 EntityAIWander(1.0F); 目标表 1 EntityAIHurtByTarget(false)、2 EntityAINearestAttackableTarget(EntityPlayer)。 (父类 EntityTFHostileWolf 额外加的第 4 号目标任务因此被移除。)

近战不走护甲:attackEntityAsMob 被覆写为直接 DamageSource.causeMobDamage(this) × 6, 不经过父类的护甲 / 附魔计算(:64-71)。

呼吸状态:isBreathing() / setBreathing() 走 DataWatcher 索引 21,值 0/1 (:132-141)。

雪地无视光照刷怪:isValidLightLevel 覆写 —— 若所在群系是 TFBiomeBase.tfSnow 直接返回 true(:154-164)。

⚠️ 本类没有覆写 getCanSpawnHere,因此实际走父类 EntityTFHostileWolf.getCanSpawnHere()(EntityTFHostileWolf.java:66-80): 近树篱迷宫时跳过光照检查,并且额外要求不在任何液体中;其它情况才调用 (被覆写的)isValidLightLevel()。

继承来的行为:

  • 和平难度即死 —— 父类 onUpdate 在 PEACEFUL 下直接 setDead() (EntityTFHostileWolf.java:43-48)。
  • 永不可繁殖 —— 父类 isBreedingItem 恒返回 false(EntityTFHostileWolf.java:111-113)。
  • 不可挤奶 —— 父类 interact 恒返回 false(EntityTFHostileWolf.java:119-121)。
  • 成就 twilightHunter —— 本类无 onDeath,继承父类 (EntityTFHostileWolf.java:54-60)。

相关条目