MobModifier 基类

基本信息

属性 值
类名 atomicstryker.infernalmobs.common.modifiers.MobModifier
类型 抽象类
注册名 无(基类)
显示类 Rare / Ultra / Infernal
颜色编码 黄(≤5 mods)/ 金(6-10 mods)/ 红(>10 mods)

功能

MobModifier 是所有 Infernal 词缀的抽象父类。多个 MobModifier 通过 nextMod 形成链表结构(链尾 nextMod == null),共同挂在一个怪物身上。

每个 MobModifier 子类实现 5 个事件钩子(被 EntityEventHandler 通过 Forge 事件总线调用):

  • onSpawningComplete(entity) — 词缀挂载完成
  • onAttack(entity, source, damage) — 怪物攻击
  • onHurt(mob, source, damage) — 怪物受击
  • onFall(distance) — 怪物落地
  • onJump(entityLiving) — 怪物跳跃
  • onUpdate(mob) — 每 tick
  • onDeath() — 怪物死亡,返回 true 时取消死亡
  • onDropItems(...) — 怪物掉落物品
  • onSetAttackTarget(target) — 怪物切换攻击目标

链表与并发处理

nextMod 钩子传递模式

每个钩子函数都会先把事件传递给链表后继,然后基类处理"自身"逻辑(更新 attackTarget 缓存、healthHacked 标志、health packet 请求等)。例如:

public float onHurt(mob, source, damage) {
    if (nextMod != null) damage = nextMod.onHurt(mob, source, damage);
    else if (source.getEntity() != null) {
        // chain end reached, request health from server
        if (source.getEntity().worldObj.isRemote && source.getEntity() instanceof EntityPlayer) {
            InfernalMobsCore.instance().sendHealthRequestPacket(mob);
        }
    }
    return damage;
}

isInfiniteLoop 防护

Vengeance / Ender / Ninja 等反伤词缀通过 InfernalMobsCore.isInfiniteLoop(mob, attacker) 检查,避免两个 Infernal 怪物互相反伤/瞬移形成死循环。

健康值机制

Infernal 怪物拥有超过原版 maxHealth 的 HP,倍数等于词缀链长度(getModSize()):

actualMaxHealth = entity.getMaxHealth() × getModSize() × mobHealthFactor

设置 healthHacked 标志避免重复加载时指数增长。客户端通过 HealthPacket 同步显示。

词缀选择流程

  1. processEntitySpawn(entity) → createMobModifiers(entity)
  2. 从 modifierLoaders(配置过滤后)中随机选择 N 个
  3. N = [minEliteModifiers, maxEliteModifiers];概率性升级到 [minUltraModifiers, maxUltraModifiers];再次升级到 [minInfernoModifiers, maxInfernoModifiers]
  4. 通过 getBlackListMobClasses() 排除不能挂载的怪物(如 Creeper 排除 1UP/Berserk/Lifesteal/Sticky)
  5. 通过 getModsNotToMixWith() 检查互斥(Webber 不与 Gravity/Blastoff 共存)
  6. 形成链表挂回怪物

稀有度分类

mod 数量 显示 颜色
1-5 Rare 黄
6-10 Ultra 金
>10 Infernal 红

词缀表(27 个)

词缀 类别 互斥/排除 配置冷却
1UP 防御(救活) 排除 Creeper —
Alchemist 攻击(投掷药水) — 6000 ms
Berserk 攻击(自伤+放大) 排除 Creeper —
Blastoff 攻击(发射) 互斥 Webber 15000 ms
Bulwark 防御(减伤) — —
Choke 控制(窒息) — —
Cloaking 辅助(隐身) 排除 Spider 12000 ms
Darkness 控制(失明) — —
Ender 攻击(瞬移反伤) — 15000 ms
Exhaust 控制(饥饿扣) — —
Fiery 控制(着火) — —
Ghastly 攻击(火球) — 6000 ms
Gravity 控制(击退) 互斥 Webber 5000 ms
Lifesteal 防御(吸血) 排除 Creeper —
Ninja 攻击(瞬移反伤) — 15000 ms
Poisonous 控制(中毒) — —
Quicksand 控制(缓慢) — —
Regen 防御(回血) — 500 ms
Rust 控制(耐久扣) — —
Sapper 控制(饥饿) — —
Sprint 辅助(冲刺) — 5000 ms
Sticky 控制(偷物品) 排除 Creeper 15000 ms
Storm 攻击(闪电) — 15000 ms
Vengeance 攻击(反伤) — —
Weakness 控制(虚弱) — —
Webber 控制(蜘蛛网) 互斥 Gravity/Blastoff 15000 ms
Wither 控制(凋零) — —

相关条目

  • 完整配置见分类页 Infernal-Mobs
  • 服务端命令:见 setting 章节