灼痕蜘蛛与小恶魔

基本信息

属性 值
实体数 4 个(灼痕蜘蛛、幼年灼痕蜘蛛、小恶魔、熔木箭)
生成生物群系 所有下界群系(BiomeDictionary.Type.NETHER)
共同特性 全部 isImmuneToFire = true
开关 enableHeatscarSpiders / enableImps

功能

Natura 注册 4 个自定义实体(NContent.java:1967-1996),其中 3 个是下界生物,1 个是投射物。

实体 注册名 实体 ID 追踪 / 更新 类别
灼痕蜘蛛 FlameSpider 1 32 / 5 怪物(EnumCreatureType.monster)
幼年灼痕蜘蛛 FlameSpiderBaby 4 32 / 5 怪物
小恶魔 Imp 0 32 / 5 生物(EnumCreatureType.creature)
熔木箭 FusewoodArrow 3 64 / 3 投射物(无生成权重)

FusewoodArrow 的注册不在 if (PHNatura.anyMobsEnabled) 块内,即无论生物开关如何都会注册(NContent.java:1996)。

生成权重(NContent.java:1985-1990):

实体 最小 默认 最大
灼痕蜘蛛 10 4 4
幼年灼痕蜘蛛 7 4 4
小恶魔 10 8 12

生成蛋支持:BlockDispenser.dispenseBehaviorRegistry.putObject(spawnEgg, new DispenserBehaviorSpawnEgg())(NContent.java:1993),使 spawn egg 可被发射器发射。

灼痕蜘蛛

HeatscarSpider 继承 EntitySpider,是一只大型蜘蛛(entity/HeatscarSpider.java:26-31):

属性 值 来源
实体尺寸 2.7 × 1.9 HeatscarSpider.java:27
客户端缩放 2.0F HeatscarSpider.java:33-36
生命值 50.0 HeatscarSpider.java:41
追踪范围 24 HeatscarSpider.java:42
移动速度 1.35 HeatscarSpider.java:43
基础攻击伤害 4.0 HeatscarSpider.java:44
经验值 25 HeatscarSpider.java:30
火焰免疫 是 HeatscarSpider.java:29

跳跃攻击

attackEntity 覆写(HeatscarSpider.java:47-60):当 par2 在 2.0 与 6.0 之间且 rand.nextInt(10) == 0(10% 概率)且着地时,跳过普通攻击,改为向目标方向跃起:

this.motionX = d0 / f2 * 0.5D + this.motionX * 0.20000000298023224D;
this.motionZ = d1 / f2 * 0.5D + this.motionZ * 0.20000000298023224D;
this.motionY = 0.62D;

其他情况走 super.attackEntity。

攻击附带点燃

attackEntityAsMob 覆写(HeatscarSpider.java:122+)在命中 EntityLiving 后按难度施加燃烧:

难度 燃烧时间(tick)
和平 0(不点燃)
简单 0(不点燃)
普通 5
困难 10

跳跃与坠落

jump 覆写(HeatscarSpider.java:63-78):基础 motionY = 0.62D,若激活跳跃药水则额外 (amplifier + 1) × 0.1F;疾跑时额外 motionX -= sin(yaw) × 0.2F、motionZ += cos(yaw) × 0.2F;末尾调用 ForgeHooks.onLivingJump(this)。

fall 覆写(HeatscarSpider.java:81-108)先经 ForgeHooks.onLivingFall,伤害为 ceiling(par1 - 5.0F),并按伤害量播放 damage.fallbig(> 4)或 damage.fallsmall 音效,落地时按方块脚步声以 0.5 音量、0.75 音高播放。

幼年灼痕蜘蛛

BabyHeatscarSpider 同样继承 EntitySpider,是缩小版(entity/BabyHeatscarSpider.java:20-30):

属性 值 来源
实体尺寸 1.2 × 0.8 BabyHeatscarSpider.java:24
客户端缩放 0.85F BabyHeatscarSpider.java:31-34
火焰免疫 是 BabyHeatscarSpider.java:25

其 attackEntity、jump、fall 覆写与成年版逻辑相同(BabyHeatscarSpider.java:36-80+)。

幼年体的 applyEntityAttributes 未覆写(BabyHeatscarSpider.java 全文 160 行中无该方法定义),故其生命值、追踪范围、攻击伤害等沿用原版 EntitySpider 的数值。这一点与成年版(生命 50、伤害 4.0)形成对比。

幼年体由 createBabyInstance 工厂方法创建(HeatscarSpider.java:175-177),并可用 spawn egg 直接生成(items/SpawnEgg.java:127)。客户端渲染由 FlameSpiderBabyRender 处理(client/NProxyClient.java:41)。

灼痕蜘蛛死亡分裂

幼年体不是通过 onDeath 生成,而是覆写 setDead()(HeatscarSpider.java:179-199):

if (!this.worldObj.isRemote && this.getHealth() <= 0.0f) {
    int num = PHNatura.babyHeatscarMaximum - PHNatura.babyHeatscarMinimum + 1;
    int amount = rand.nextInt(num) + PHNatura.babyHeatscarMinimum;
    for (int i = 0; i < amount; i++) { ... }
}
条件 行为
服务端且生命值 ≤ 0 生成 rand(最大值 - 最小值 + 1) + 最小值 只幼年蜘蛛
位置 posX + rand(0,2)、posY + 0.5、posZ + rand(0,2),朝向 rand × 360°

因为覆写的是 setDead() 而非 onDeath,该分裂在任何导致死亡的操作后触发(包括 /kill 等直接置空的操作)。

小恶魔

ImpEntity 继承 EntityAnimal(entity/ImpEntity.java:22),是友好生物而非怪物:

属性 值 来源
实体尺寸 0.9 × 0.9 ImpEntity.java:25
火焰免疫 是 ImpEntity.java:30
避水 是(setAvoidsWater(true)) ImpEntity.java:26
游动速度(AI 参数 f) 0.25 ImpEntity.java:31

AI 行为(ImpEntity.java:32-40,按优先级):

优先级 AI 参数
0 EntityAISwimming —
1 EntityAIPanic 0.38F
2 EntityAITempt 0.3F,诱惑物 NContent.bowlStew(炖菜碗)
3 EntityAIMate 0.25F
4 EntityAIAvoidEntity 躲避 EntityPlayer,距离 8.0F,避开 0.25F,徘徊 0.3F
5 EntityAIFollowParent 0.28F
6 EntityAIWander 0.25F
7 EntityAIWatchClosest 观察 EntityPlayer,距离 6.0F
8 EntityAILookIdle —

小恶魔会被炖菜碗吸引(AI 优先级 2),同时主动躲避玩家 8 格(优先级 4)。小恶魔还会被添加跟随母兽行为(优先级 5),说明其繁殖产仔。

熔木箭

FusewoodArrow 注册于 NContent.java:1996(实体 ID 3,追踪 64,更新频率 3),无生成权重,属熔木弓的箭矢实体。

数值

数值名 值
灼痕蜘蛛生命值 50.0
灼痕蜘蛛基础伤害 4.0
灼痕蜘蛛移动速度 1.35
灼痕蜘蛛经验值 25
跳跃攻击概率 10%(nextInt(10) == 0)
跳跃攻击触发距离 2.0 < par2 < 6.0
普通/困难点燃时间 5 / 10
幼年蜘蛛尺寸 1.2 × 0.8
小恶魔尺寸 0.9 × 0.9
小恶魔躲避距离 8.0F

配置

灼痕蜘蛛被击杀后生成幼体的数量可配置(PHNatura.java:35-38,mob changes 分类):

配置项 默认值 钳制
Minimum Baby Heatscar Spiders on Spider Death 2 负值钳为 0
Maximum Baby Heatscar Spiders on Spider Death 4 负值钳为 0

生成数量公式为 rand(最大 - 最小 + 1) + 最小,默认即 2–4 只。

相关条目