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)— 每 tickonDeath()— 怪物死亡,返回 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 同步显示。
词缀选择流程
processEntitySpawn(entity)→createMobModifiers(entity)- 从
modifierLoaders(配置过滤后)中随机选择 N 个 - N =
[minEliteModifiers, maxEliteModifiers];概率性升级到[minUltraModifiers, maxUltraModifiers];再次升级到[minInfernoModifiers, maxInfernoModifiers] - 通过
getBlackListMobClasses()排除不能挂载的怪物(如 Creeper 排除 1UP/Berserk/Lifesteal/Sticky) - 通过
getModsNotToMixWith()检查互斥(Webber 不与 Gravity/Blastoff 共存) - 形成链表挂回怪物
稀有度分类
| 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章节