跳到主要内容

创建 Boss

webapp_banner.jpg

创建自定义 Boss​

开始之前

Boss 配置文件放在哪里?​

Boss 配置文件放在配置文件夹 ~/plugins/EliteMobs/custombosses 中。

你也可以创建子文件夹,例如 ~/plugins/EliteMobs/custombosses/mybosses。推荐这样做,以便保持文件井然有序。

一个文件定义一个 Boss,不过同一个 Boss 可以被多次生成,甚至可以为同一个 Boss 文件设置多个生成点。

你可以使用 Forge 创建自定义 Boss 等内容。

最简配置​

自定义 Boss 的最简配置文件是:

注意这就是一个空文件。它依然会生成一个带有自定义名称的僵尸自定义 Boss,因为这些都是默认值。本页面中的所有内容都是可选的!

复用另一个 Boss 文件​

一个 Boss 文件可以通过 extends 以另一个 Boss 文件为基础,然后只修改不同的部分:

extends: my_base_boss.yml
name: '&cEnraged Copy'
healthMultiplier: 3

该文件会继承基础文件中的所有值,并覆盖它自己设置的键。嵌套的配置节(例如 patrol)会逐键合并;列表(例如 uniqueLootList)则会整体替换基础文件中的列表。引用基础文件时只写文件名,不要带文件夹路径。它必须是 custombosses 中(包括其子文件夹)的另一个文件,并且它本身也可以再继承其他基础文件。

isEnabled、spawnLocation、spawnLocations、leashRadius、powers 和 eliteScript 永远不会被继承,因此需要在每个用到它们的文件中单独设置。设置了 isEnabled: false 的基础文件可以当作模板使用:它自身无法生成,但继承它的文件仍会正常加载。EliteMobs 不会向使用了 extends 的文件写入默认值,因此文件会保持你写下时的简短内容。如果基础文件缺失、extends 中写了路径,或 extends 引用形成了循环,该文件会被禁用,并在控制台给出警告。

Boss 示例​

我们来看一个 Boss 文件的示例。

示例
isEnabled: true
entityType: ZOMBIE
name: '&eTest boss'
level: dynamic
timeout: 10
isPersistent: false
healthMultiplier: 2.0
damageMultiplier: 0.5
helmet: GOLDEN_HELMET
chestplate: IRON_CHESTPLATE
leggings: LEATHER_LEGGINGS
boots: CHAINMAIL_BOOTS
mainHand: GOLDEN_AXE
offHand: SHIELD
isBaby: false
powers:
- invulnerability_knockback.lua
spawnMessage: A test boss has been spawned!
deathMessage: A test boss has been slain by $players!
escapeMessage: A test boss entity has escaped!
locationMessage: 'Test entity: $location'
uniqueLootList:
- magmaguys_toothpick.yml:1
dropsEliteMobsLoot: true
dropsVanillaLoot: true
trails:
- BARRIER
onDamageMessages:
- "I've hit you!"
onDamagedMessages:
- "I've been hit!"

基础设置​

isEnabled​

设置该 Boss 是否启用。

键取值默认值
isEnabledtrue / falsetrue
示例
isEnabled: true

entityType​

设置 Boss 的实体类型。该类型必须是已注册 EliteMobs 生物属性、能够生成的生物。

键取值默认值
entityType从这里挑选。
该值还必须存在于文件夹 ~plugins/EliteMobs/mobproperties 中。
ZOMBIE
岩浆怪与史莱姆

由于这些实体类型不会直接攻击玩家,而是通过接触造成伤害,这会导致在很短的时间内爆发出大量伤害。因此,我们通常不建议频繁地把它们用作精英怪。不过,如果你仍然想使用它们,我们建议把 damageMultiplier 设置在 0.1 左右。

我们还建议使用下面这段 EliteScript,以防止岩浆怪或史莱姆把玩家锁死在硬直中:

eliteScript:
NerfDamage:
Events:
- ZoneEnterEvent
- ZoneLeaveEvent
Zone:
shape: SPHERE
radius: 1
Target:
targetType: SELF
Actions:
- action: SET_MOB_AI
Target:
targetType: SELF
bValue: false
duration: 10
示例
entityType: ZOMBIE

name​

设置 Boss 的名称。

键取值默认值
name字符串,支持 颜色代码 和下面列出的占位符"Default Name"
示例
name: "$normalLevel &cCool boss!"

create_boss_name_pic_no_level.jpg

如果你希望在名称字段中包含 Boss 的等级,只需使用下列占位符之一。

占位符说明示例输出(以 10 级 Boss 为例)
$level替换为等级"$level Cool boss"10 Cool boss
$normalLevel替换为等级,为普通怪物设计"$normalLevel Cool boss"[10] Cool boss
$minibossLevel替换为等级,为小 Boss 设计"$minibossLevel Cool boss"〖10〗 Cool boss
$bossLevel替换为等级,为 Boss 设计"$bossLevel Cool boss"『10』 Cool boss
$reinforcementLevel替换为等级,为增援怪设计"$reinforcementLevel Cool boss"〔10〕 Cool Boss
$eventBossLevel替换为等级,为事件 Boss 设计"$eventBossLevel Cool boss"「10」 Cool boss
示例
name: "$normalLevel &cCool boss!"

create_boss_name_pic.jpg


level​

设置 Boss 的等级。

键取值默认值
level正 整数 或 dynamicdynamic

dynamic 使用同一世界内 16 * (服务器视距 + 2) 格范围中玩家所对应的最高自然生成等级,最低为 1。已注册的动态 Boss 每 5 秒重新计算一次,因此生成后等级仍会变化。显式指定的生成等级会覆盖这一行为。需要稳定难度的区域战斗应使用固定等级。

示例
level: 1

scale​

设置 Boss 的缩放比例(体型大小)。

键取值默认值
scale倍率1.0

进行缩放时,1.0 代表默认大小。想让实体变大,就提高该值(例如 1.2)。想让实体变小,就降低该值(例如 0.8)。

示例
scale: 1.2

bossType​

为自动职业战利品等系统指定 Boss 分类。生命值显示由 healthMultiplier 和 MobCombatSettings.yml 中的设置决定,而不是此分类。

键取值默认值
bossTypeNORMAL、MINIBOSS、BOSS、REINFORCEMENT、EVENTNORMAL

自动职业战利品中,MINIBOSS 使用小 Boss 档位,BOSS 和 EVENT 使用 Boss 档位,普通 Boss 使用杂兵档位;classLootRank 可以覆盖它。

REINFORCEMENT 是配置中的分类,不会自动分配给每个召唤物。运行时对增援和坐骑的追踪另外控制其奖励资格。

示例
bossType: MINIBOSS

silent​

设置是否静音 Boss 的音效。

键取值默认值
silent布尔值false

设置为 true 时,关闭生物本身的原版 Minecraft 音效。单独播放的脚本音效和 Boss 音乐不受此设置控制。

示例
silent: true

healthMultiplier​

设置 Boss 生命值的倍率。生命值显示也会读取此值:显示独立 Boss 血条需要启用 MobCombatSettings.yml 中的 displayBossBarForHighMultiplier,且倍率高于 bossBarHealthMultiplierThreshold。

键取值默认值
healthMultiplier倍率1.0
Boss 生命值有硬性上限,Boss 伤害没有

指数增长的基础生命值先受到服务器上限限制,再乘以 healthMultiplier,将结果限制为至少 1 HP,并再次限制到 spigot.yml 中的 settings.attribute.maxHealth.max。如果该服务器设置低于 2048,EliteMobs 会在启动时将其提高到 2048,但不会提高到更大的值,因此默认服务器的实际上限是 2048。

这些上限描述的是 Boss 的基础计算。实例 Boss 在至少两名玩家参与时,会在此后乘以队伍倍率 0.75 * playerCount,插件不会再次限制结果。因此,下表不保证实例中的最终生命值,也不能据此认定服务器会接受超过属性上限的值。

基础生命值遵循 2.1875 × 2^(等级 / 5),因此每 5 级翻一倍。结合这个上限,每一个 healthMultiplier 都存在一个等级,超过该等级后 Boss 的生命值完全停止增长,而它的伤害却仍在继续增长:

healthMultiplier生命值停止增长的等级
1.050
2.045
5.038
7.036
10.033
20.028
40.023

超过该等级后,继续提高配置等级不会再增加实际最大生命值。伤害仍取决于战斗处理方式、双方技能、武器属性和配置倍率;生命值上限不保证任何一方需要固定攻击次数才能击杀对手。倍率计算后的生命值超过上限时会记录警告,但更早的基础生命值截断不会提示。小于 1 的倍率也会作用于已经受限的基础生命值。

如果你确实需要超过 2048 点生命值,请自行在 spigot.yml 中提高 settings.attribute.maxHealth.max;该上限读取的是服务器的实时数值,而不是硬编码常量。

示例
healthMultiplier: 1.5

damageMultiplier​

设置 Boss 的伤害倍率。

键取值默认值
damageMultiplier倍率1.0
示例
damageMultiplier: 1.5

isBaby​

设置 Boss 是否使用该怪物的幼年变种。只能应用于拥有幼年变种的怪物。 如果你想 伪装 该 Boss,同时希望它在伪装状态下仍然是幼年体(请确认伪装实体也支持幼年变种),可以使用这个设置:

disguise: HOGLIN:baby
键取值默认值
isBabytrue / falsefalse
示例
isBaby: true

helmet/chestplate/leggings/boots/mainHand/offHand​

设置 Boss 的护甲和手持物品。部分实体类型和自定义模型不能显示这些槽位。在普通 EliteMobs 战斗中,装备护甲不提供护甲点数,但手持物品会影响原版攻击,例如骷髅使用弓。

键取值默认值
helmet材料、UUID无
chestplate材料无
leggings材料无
boots材料无
mainHand材料无
offHand材料无

使用大写材料名称。这些字段根据材料创建装备,不会加载自定义物品的 .yml 文件。非皮革物品可以使用 ITEM_MATERIAL:ID 添加整数自定义模型数据。例如 DIAMOND_SWORD:1 使用资源包中的自定义模型数据 1。

注意 2: 该字段还允许你按 ITEM_MATERIAL:CODE 的格式设置自定义皮革颜色,其中 CODE 是该颜色的十六进制表示。例如:LEATHER_LEGGINGS:ffa500 会生成橙色的皮革护腿。你可以使用十六进制代码,只要去掉其中的 # 即可。你可以从 这里 获取十六进制代码。

注意 3: 小写且带连字符的玩家 UUID 会通过 Bukkit 的离线玩家资料查询创建玩家头颅。解析器不要求该玩家在线;实际显示的皮肤取决于服务器能否解析该资料。

示例
helmet: 198c4123-cafc-45df-ba79-02a421eb8ce7
chestplate: DIAMOND_CHESTPLATE:1
leggings: LEATHER_LEGGINGS:ffa500
boots: NETHERITE_BOOTS
mainHand: DIAMOND_SWORD
offHand: SHIELD

create_boss_armor.jpg


powers​

设置 Boss 拥有的能力。

键取值默认值
powers参见下面的列表无
示例
powers:
- hyper_loot.lua
- attack_arrow.lua
- mycoolpower.lua

注意:如果你想查看可以直接使用的预制能力列表,可以查阅 此页面。

注意:能力可以是 .yml 文件(EliteScript)或 .lua 文件(Lua 脚本)。两种类型都受支持,并且可以在 powers 列表中自由混用。几乎所有预制能力现在都是 .lua。

旧的 .yml 能力名称仍然可用

如果同名 .lua 能力已经加载,EliteMobs 会将 .yml 或 .yaml 请求解析到它。例如,attack_arrow.yml 会选择已加载的 attack_arrow.lua。仅在磁盘上存在该文件还不够。新配置应直接使用 .lua 文件名。


进阶配置:召唤增援​

增援同样归入 powers 类别,使用以下设置:

注意: 增援是在 Boss 配置文件的 powers 部分中配置的,而不是作为一个独立的部分。

增援设置
键说明取值默认值
summonType触发增援生成的条件。必填。参见下面的列表无
filename召唤的 Boss 文件名,水晶条目以外均必填。字符串无
chance普通批次召唤的概率,GLOBAL 和水晶条目忽略此值。可选。双精度小数1.0
amount设置生成的增援数量。可选。整数1
inheritAggro让增援继承 Boss 的仇恨。可选。true / falsefalse
spawnNearby让增援在生成点周围 30x30 格的范围内生成(X 和 Z 轴上各 ±15 格)。可选。true / falsefalse
inheritLevel让增援继承 Boss 的等级。可选。true / falsefalse
customSpawn让增援通过 自定义生成系统 生成。仅用于 summonType: GLOBAL自定义生成文件名无
location相对生成偏移量。可选。x,y,z —— 始终是相对于 Boss 的偏移量。对于区域 Boss,该偏移量相对于其生成位置。无
lightningRod针对 summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL 的特殊设置。让末影水晶周围产生闪电。可选。true / falsefalse
difficultyID将该条目限制在特定的 副本地下城难度。可选。字符串 或字符串列表无

召唤类型设定了增援生成的条件。以下是有效召唤类型的列表:

召唤类型
取值说明
ONCE玩家造成符合条件的伤害时尝试召唤一批,直到一次尝试被标记为已召唤。概率抽取失败后可在后续攻击时重试。
ON_HIT玩家伤害 Boss 时尝试召唤一批。要求 AI 开启、伤害事件未取消且伤害至少为 3。
ON_COMBAT_ENTER当 Boss 进入战斗时生成增援。
ON_DEATH当 Boss 死亡时生成增援。
GLOBALBoss 生成后立即通过 customSpawn 排队召唤 amount 个,此后每 10 秒重复,战斗外也运行。追踪数量达到 30 * 生成世界的玩家数 后便不再添加召唤。需要有效的 自定义生成。
ON_COMBAT_ENTER_PLACE_CRYSTAL进入战斗时在配置的偏移处放置一个末影水晶,忽略 amount 和 chance,用于自定义末影龙战斗。

ONCE 与 ON_HIT 一样,要求 AI 开启且伤害至少为 3。GLOBAL 使用自己的自定义生成配置,不使用普通的 location、spawnNearby、inheritLevel 和 inheritAggro 字段。完整行为见 增援。

注意,也可以通过 Elite Script 来生成增援,因此还有更多可自定义的增援生成方式。

示例
powers:
- summonType: ON_COMBAT_ENTER
filename: test_boss.yml
chance: 0.5
amount: 5
inheritAggro: true
spawnNearby: true
inheritLevel: true
location: 10,20,30
lightningRod: false

专家配置:创建自己的能力​

你可以创建属于自己的能力,既可以写在 Boss 文件本身里,也可以在 powers 文件夹中新建一个配置文件。你可以在 这里 了解更多。

注意: 你也可以使用 eliteScript 字段直接在 Boss 配置文件中定义 Boss 行为。关于使用 Elite Script 的完整文档,请参见 能力指南。

作为 EliteScript 的替代方案,你也可以用 Lua 脚本编写能力。Lua 能力放在 powers 文件夹中,扩展名为 .lua,并在 powers 列表中以文件名引用。更多信息请参见 Lua 入门 指南。

根据副本地下城难度限制能力​

副本地下城 可以设置难度,你也可以让某个特定能力只在特定难度下启用。

能力限制选项
键说明取值默认值
filename能力的文件名。字符串无
difficultyID单个难度 ID 或列表,按地下城的数字或名称难度规则解析。字符串、数字或列表无

这只对副本 Boss 生效:包括副本地下城中的 Boss,以及其他插件通过 EliteMobs API 以指定难度生成的副本 Boss。

示例
powers:
- filename: movement_speed.lua
difficultyID:
- myDifficultyName1
- myDifficultyName2
- myDifficultyName3

spawnMessage​

设置 Boss 生成时发送的消息。需要配置 announcementPriority。

键取值默认值
spawnMessage字符串 和 颜色代码无
示例
announcementPriority: 3
spawnMessage: I rise once more!

create_boss_spawn_message.jpg


deathMessages​

设置有伤害玩家记录的 Boss 死亡时发送的消息列表。必须启用 MobCombatSettings.yml 的 doCustomEliteMobsDeathMessages(默认 true)。优先级 0 仅向造成伤害的玩家私发,正优先级则广播。

键取值默认值
deathMessages字符串、颜色代码 以及下面的占位符无
示例
announcementPriority: 3
deathMessages:
- '&e&l---------------------------------------------'
- '&4The Test Boss has been killed!'
- '&c&l 1st Damager: $damager1name &cwith $damager1damage damage!'
- '&6&l 2nd Damager: $damager2name &6with $damager2damage damage!'
- '&e&l 3rd Damager: $damager3name &ewith $damager3damage damage!'
- '&4Slayers: $players'
- '&e&l---------------------------------------------'

create_boss_death_message.jpg

死亡消息可使用以下占位符:

占位符
取值说明
$damager1name伤害榜第一名的显示名称
$damager1Name伤害榜第一名的用户名
$damager2name伤害榜第二名的显示名称
$damager2Name伤害榜第二名的用户名
$damager3name伤害榜第三名的显示名称
$damager3Name伤害榜第三名的用户名
$damager1damage伤害榜第一名的伤害量
$damager2damage伤害榜第二名的伤害量
$damager3damage伤害榜第三名的伤害量
$players所有造成伤害的玩家的显示名称列表
$playersName所有造成伤害的玩家的用户名列表

deathMessage​

设置 Boss 死亡时发送的单条消息。仅在 deathMessages 为空时使用,遵循相同的全局开关和优先级规则。支持 $players 和 $playersName,不支持单个伤害排名占位符。

键取值默认值
deathMessage字符串、颜色代码、$players 和 $playersName无
示例
announcementPriority: 3
deathMessage: '&4The Test Boss has been killed by $players!'

onKillMessage​

设置 Boss 击杀玩家时的玩家死亡消息。它走玩家死亡处理流程,不需要 announcementPriority。

键取值默认值
onKillMessage字符串 和 颜色代码无

占位符:

取值说明
$player被击杀玩家的显示名称
$playerName被击杀玩家的用户名
$entityBoss 名称
示例
announcementPriority: 3
onKillMessage: I win, you lose!

create_boss_spawn_message.jpg


slimeSize​

设置史莱姆 Boss 的大小,仅对史莱姆和岩浆怪有效。

键取值默认值
slimeSize整数4
示例
slimeSize: 5

neutral​

停止 EliteMobs 强制狼、铁傀儡等中立实体以玩家为目标的行为,同时阻止 Mind 行为程序启动。实体原生行为仍然有效,此设置不会让敌对实体变得被动。

键取值默认值
neutral布尔值false
示例
neutral: true

高级设置​

timeout​

设置自定义 Boss 消失前的时间,单位为分钟。0 禁用超时。

键取值默认值
timeout时间(分钟)整数0
示例
timeout: 20

设置 Boss 在 20 分钟后逃离。


isPersistent​

保留逻辑 Boss 信息,以便在区块卸载后恢复。普通流程会移除实体并在区块重新加载时重新生成。原生 Mind 持有可持久化实体时,可以暂停会话、分离已保存的实体,并在同一次服务器会话中重新关联。此设置不强制加载区块,也不保证通过命令生成的任意 Boss 能跨服务器重启保留。区域配置中的生成点和重生期限由另一套机制管理。

键取值默认值
isPersistenttrue / falsefalse
示例

示例:

isPersistent: true

damageModifiers​

按武器的 Bukkit 材料设置 Boss 的受伤倍率。被追踪的投射物使用发射时记录的武器材料。绕过普通伤害公式的自定义伤害不应用这些倍率。

键取值默认值
damageModifiers材料无
示例
damageModifiers:
- material:DIAMOND_SWORD,multiplier:0.8
- material:TRIDENT,multiplier:2.0

在这个示例中,Boss 只会承受钻石剑 80% 的伤害(即减少 20%),但会承受三叉戟 200% 的伤害(即 2 倍伤害)。


normalizedCombat​

使用 ~/plugins/EliteMobs/mobproperties 中的 normalizedDamageToEliteMultiplier 和 normalizedDamageToPlayerMultiplier。标准化伤害计算见 伤害系统。启用全局 normalizeRegionalBosses 时,即使此值为 false,区域 Boss 也会强制使用标准化战斗。多阶段 Boss 使用第一阶段的设置。

键取值默认值
normalizedCombattrue / falsefalse
示例

示例:

normalizedCombat: true

scaledCombat​

启用基于玩家进度的战斗计算。对每位玩家计算的伤害会换算到 Boss 实际的共享生命值池。保存的 Boss 等级和奖励资格仍单独处理,并不保证所有玩家的战斗难度相同。

缩放战斗主要是为主世界事件 Boss 以及那些应当让任何等级玩家都能挑战的自定义 Boss 设计的。对于有固定预期难度的地下城内容,请改用 normalizedCombat。

当设置了 scaledCombat: true 时,即使该 Boss 本应使用标准化战斗,缩放战斗也会优先生效。自然生成的精英怪默认使用缩放战斗(由 MobCombatSettings.yml 中的 useScaledCombatForNaturalElites 配置控制)。

关于缩放战斗如何运作的完整细节,请参见 伤害系统 页面。

键取值默认值
scaledCombattrue / falsefalse
示例
scaledCombat: true

escapeMessage​

设置当 Boss 通过 timeout 机制逃离时向玩家广播的消息。需要配置 announcementPriority。

键取值默认值
escapeMessage字符串无
示例
announcementPriority: 3
timeout: 60
escapeMessage: "Sayonara!"

create_boss_escape_message.jpg


locationMessage​

设置用于追踪 Boss 生命值和位置的血条文本。要求 announcementPriority 至少为 1,且全局 showCustomBossLocation 已启用。此键可省略,默认文本为 $name: $distance blocks away!。

键取值默认值
locationMessage字符串、颜色代码 以及下面列出的占位符$name: $distance blocks away!

占位符:

取值说明
$nameBoss 名称
$distance替换为玩家与该自定义 Boss 之间的距离。这是更推荐的选项。
$location替换为该自定义 Boss 的 x y z 坐标位置
示例
announcementPriority: 3
locationMessage: "&4Cool boss: At $location only $distance blocks away!"

create_boss_location_message.jpg

这会显示类似 Cool boss: At 414,55,347 only 10 blocks away! 的内容。


uniqueLootList​

设置该 Boss 掉落的 自定义物品。

键取值默认值
uniqueLootList列表无

自定义战利品中的条目遵循战利品表格式。相关信息请看这里! 请注意,某些较旧的文件可能仍在使用与示例不同的过时战利品表格式。

示例
uniqueLootList:
- filename: magmaguys_toothpick.yml
chance: 0.02
- minecraft:type=DIAMOND:amount=1:chance=0.9
- magmaguys_toothpick.yml:0.5:elitemobs.*

dropsEliteMobsLoot​

设置该 Boss 是否掉落 EliteMobs 战利品(不包括 uniqueLootList 中的物品)。包含金币。

键取值默认值
dropsEliteMobsLoottrue / falsetrue

建议对增援怪设置为 false。

示例
dropsEliteMobsLoot: true

dropsVanillaLoot​

设置该自定义 Boss 是否掉落其原版怪物类型通常会掉落的原版战利品。

键取值默认值
dropsVanillaLoottrue / falsetrue
示例
dropsVanillaLoot: true

dropsRandomLoot​

设置该自定义 Boss 是否掉落 EliteMobs 程序化生成的战利品。不包括精英金币。

键取值默认值
dropsRandomLoottrue / falsetrue
示例
dropsRandomLoot: true

dropsSkillXP​

设置击杀 Boss 是否给予技能经验。技能经验提升武器和护甲技能及其加成。即使此值为 true,经验处理仍会排除增援和坐骑。

键取值默认值
dropsSkillXPtrue / falsetrue

建议对增援怪,或者不应参与技能进度成长的 Boss 设置为 false。

示例
dropsSkillXP: false

自动职业战利品​

classLoot 启用独立的基础装备抽取,除 bossType: REINFORCEMENT 外默认启用。classLootDifficulty 接受 AUTO、NORMAL、HARD 或 MYTHIC;classLootRank 接受 AUTO、TRASH、MINIBOSS 或 BOSS。两者默认均为 AUTO,无效覆盖值会记录警告并回退到 AUTO。

作者制作的职业装备应定义为普通的 itemType: CLASS_LOOT 物品,并通过 uniqueLootList 引用。这些物品参与职业装备选择,而不是单独抽取的独有掉落。旧的 Boss 字段 classLootItems 不会被读取。资格、上限、装备系列覆盖、配置档案和难度解析见 自动职业战利品。


trails​

设置 Boss 移动时留下的尾迹。

键取值默认值
trails粒子 或 物品材料无

只有不需要附加数据的粒子才能用作尾迹,即 有效粒子列表 中的简单粒子。DUST、ITEM 等需要数据的粒子会跳过。BLOCK 和 LAVA 会停止处理剩余尾迹列表,因此不要使用。材料名称会生成动态物品尾迹。Boss 有效期间尾迹持续运行,静止时也一样。

示例
trails:
- CLOUD

onDamageMessages​

Boss 伤害玩家时随机选取一行,临时替换实体名称,80 刻后恢复。连续命中可能替换文本,也可能由较早的计时器提前恢复名称,使最新文本的显示时间不足 80 刻。

键取值默认值
onDamageMessages列表无
示例
onDamageMessages:
- "I hit you!"
- "Haha I hit you!"

create_boss_damage_message.jpg


onDamagedMessages​

发生 EliteMobs 伤害事件时随机选取一行,临时替换 Boss 名称,不限于玩家造成的伤害。80 刻后恢复名称。连续事件可能替换文本,也可能由较早的计时器提前恢复名称,使最新文本的显示时间不足 80 刻。

键取值默认值
onDamagedMessages列表无
示例
onDamagedMessages:
- "You hit me!"
- "I've been hit!"

create_boss_damaged_message.jpg


mountedEntity​

设置 Boss 将骑乘的实体。

键取值默认值
mountedEntity要骑乘的 Boss 的文件名 或 实体类型无

不要试图让 Boss 骑乘它自己。

示例
mountedEntity: wild_wolf.yml

create_boss_mounted.jpg

注意:区域 Boss 会与它所骑乘的实体共享牵引绳,这意味着一旦超出牵引绳允许的距离,两者都会被拉回生成位置。


announcementPriority​

设置公告的优先级。优先级较低意味着不会发出任何公告,优先级较高则不仅能在聊天中公告,若已配置还能发送到 Discord。

键取值默认值
announcementPriority整数0

注意: 如果某个 Boss 文件确实包含公告文本(locationMessage、spawnMessage、deathMessage、escapeMessage 或非空的 deathMessages 列表)却缺少该键,EliteMobs 会在加载时把 announcementPriority: 0 写入该文件,让这个设置可见且便于调高。在你修改之前,该 Boss 仍按优先级 0 运作。

以下是各优先级的作用列表:

取值说明
0默认值。没有生成或逃离广播,也不能追踪;配置的死亡文本仍可私发给造成伤害的玩家。
1可以发送配置的生成、死亡和逃离聊天消息。启用 showCustomBossLocation 后可通过 /em 追踪,locationMessage 可省略。
2对自定义 Boss 而言与 1 完全相同 —— 优先级 2 并没有单独的代码路径。(自定义事件确实会区别对待 2;参见 公告优先级系统。)
3在 1 的基础上,若已配置,广播消息还会同步到 Discord。Discord 配置信息请看这里。

下面是一个可被追踪、并且能在聊天和 Discord 中发送生成/死亡/逃离消息的 Boss 示例:

示例
announcementPriority: 3

注意: 为相应的聊天和 Discord 公告配置 spawnMessage、deathMessage/deathMessages 和 escapeMessage。追踪有默认位置文本,仅在需要修改时设置 locationMessage。


followDistance​

设置 Boss 产生仇恨并进入战斗的距离。以怪物自身为中心测量。

键取值默认值
followDistance整数0

正的 followDistance 会覆盖生物原生的追踪范围属性,0 保持原值。

注意 1:非警戒状态的区域 Boss 在生成或脱战减速时,将当前追踪范围除以 3;进入战斗时恢复记录的范围,以避免从过远处产生仇恨而与牵引限制冲突。

注意 2:followDistance 越高,该 Boss 对服务器 CPU 的开销就越大。请谨慎且负责任地使用!

示例
followDistance: 30

设置一个 30 格的范围,只要玩家进入该距离靠近 Boss,Boss 就会开始追击/攻击该玩家。


onDeathCommands​

设置自定义 Boss 死亡时执行的命令列表。

键取值默认值
onDeathCommands列表无

命令由控制台执行。包含 $players 的 $chance=x$ 命令对每位造成伤害的玩家分别抽取概率。支持以下占位符:

取值说明
$levelBoss 等级的占位符。
$nameBoss 名称的占位符。
$chance=x$让某条命令有一定概率执行。
$players让该命令对伤害列表中的每位玩家各执行一次,每次分别替换为该列表中不同玩家的用户名。
$locationWorldName死亡时的世界名称。
$locationXBoss 死亡时的 X 坐标。
$locationYBoss 死亡时的 Y 坐标。
$locationZBoss 死亡时的 Z 坐标。
$damager1name伤害榜第一名的用户名
$damager2name伤害榜第二名的用户名
$damager3name伤害榜第三名的用户名

请看下面的示例,以更好地理解它们的用法。

示例
onDeathCommands:
- "say $players has killed $name! That was level $level!"
- "$chance=0.5$ say What a kill!"

create_boss_mounted.jpg

如果 Player1、Player2 和 Player3 都在击杀 Boss 前对它造成过伤害,那么控制台中的命令输出会是:

say Player1 has killed CustomBossName! That was level X!
say Player2 has killed CustomBossName! That was level X!
say Player3 has killed CustomBossName! That was level X!

此外,还有 50% 的概率会额外输出下面这条:

say What a kill!

onSpawnCommands​

设置 Boss 生成时执行的命令列表。

键取值默认值
onSpawnCommands列表无

由控制台执行,支持概率标记 $chance=x$。不会展开死亡命令中的 Boss、位置或玩家占位符。

示例
onSpawnCommands:
- say Boss has spawned!

create_boss_mounted.jpg


onCombatEnterCommands​

设置 Boss 进入战斗时执行的命令列表。

键取值默认值
onCombatEnterCommands列表无

由控制台执行,支持概率标记 $chance=x$。不会展开死亡命令中的 Boss、位置或玩家占位符。

示例
onCombatEnterCommands:
- say Boss has entered combat!

create_boss_mounted.jpg


onCombatLeaveCommands​

设置 Boss 脱离战斗时执行的命令列表。

键取值默认值
onCombatLeaveCommands列表无

由控制台执行,支持概率标记 $chance=x$。不会展开死亡命令中的 Boss、位置或玩家占位符。

示例
onCombatLeaveCommands:
- say Boss has left combat!

create_boss_mounted.jpg


disguise​

如果启用了 LibsDisguises 插件,则设置该插件的伪装。更多信息请看这里。

键取值默认值
disguise字符串无
customDisguiseData字符串无
伪装示例
disguise: CHICKEN

create_boss_mounted.jpg

自定义伪装示例
disguise: custom:the_beast_sanctuary_beast
customDisguiseData: player the_beast_sanctuary_beast setskin {"id":"44e6d42b-bd8d-4e48-873b-fae7afed36e4","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTY2NjcwNjYwODA1MCwKICAicHJvZmlsZUlkIiA6ICI3MmY5MTdjNWQyNDU0OTk0YjlmYzQ1YjVhM2YyMjIzMCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGF0X0d1eV9Jc19NZSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82YmYyMTY4NmM1MGQ1ODhmZmExMDZhZDdjNmViZTk1ZWZiMjE2NDU5ODRjZDFjZWYwODkzNDc4NzMzNmI2YTI3IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=","signature":"jSsQvpUeWVtyqjtnydPadormkrZLVihetiX4dFQb3+BF/1x6wOgsNKRnnwj6J1mfu2im79LYEJbL+fQ9p1SJIW1uZ6hV7vPSAGUopyXGHNibNXorfV/dGjM77S0t86Jls50XWgJAnLn5RdhQcHahDAHHZ8to6K0HW5gvKKSalR5X/myaiV0E5ujJ+LUFWIiuDmtsmyxTX1zsohyYrVMo/4sD0DpBN+as95wO476gLb5fDTDV569QwExlDOt60W8qSzPw6ncYsOKJIiRE3EddspUm3/NrfDiKApUh8UbzVtwu1XlVAxWNgYN3PkqhWKuE4kvORQuoSJzOgSHkiqdXsQOED2HXfOKdfsnpZUwjepIU5A+/mu0gc3mPQPToKSss2bC1nXn//0bOZZSuQRgTS6PkKDHIQ1nClSZQZlJIsiLmaaN2k1tIHTIlDquKN6G1Ta9c3t6G5kugjqRo78ebbt7l3e0Z3BcdOkuO2WbvBjIg5Uiqyf+cYDZedJ+OEOqL/U6VVlsmbw0rd5deHrbnPn9cRzmWGjrXnxIlAszl+0Uqabj/BrkWcbBCwZJEPaV1hHpC4nJX1m5xvKZHB2Bw0AYWaQ3f3tRBbCA/xqwCS0Px1QohzV0nvtiMbjB38ziT1M5DgLtAVLcHPio7THZMxXAi4IjEIMac9ODbh5OxthA="}],"legacy":false}

create_boss_mounted.jpg

设置来自 skindex 的自定义伪装。请查看此页面 了解如何正确地格式化这些数据。


customModel​

如果你拥有自定义模型以及 FreeMinecraftModels 或 ModelEngine 插件,则设置要使用的自定义模型。关于制作和使用自定义模型的更多信息请看这里。

键取值默认值
customModel字符串无
示例
customModel: your_model

customModelMountPointID​

设置当该 Boss 骑乘其他实体或被其他实体骑乘时,自定义模型所使用的挂载点 ID。

键取值默认值
customModelMountPointID字符串无
示例
customModelMountPointID: your_mount_point_id


frozen​

将移动速度属性设为 0。EliteMobs 伤害处理还会在当刻和下一刻清零速度。AI 和脚本仍可攻击或传送,这不是阻止一切移动的开关。

键取值默认值
frozentrue / falsefalse
示例
frozen: true

ai​

设置该 Boss 是否启用 AI。设置为 false 时,Boss 不会自行移动或攻击。这对完全通过 Elite Script 控制的 Boss 很有用。

键取值默认值
aitrue / falsetrue
示例
ai: false

behavior​

behavior 从 plugins/EliteMobs/behaviors/ 选择可复用的 Lua Mind 程序。例如:

entityType: ZOMBIE
ai: true
behavior: basic_melee.lua

内置 basic_melee.lua 组合了 behaviors/modules/ 中的目标选择、追击、近战和游荡模块。在行为目录编辑或复制程序;它不是能力文件,不应放进 powers/。

省略 behavior 时,使用实体类型的生物属性设置。显式 behavior: native 选择原生 AI。ai: false 和中立 Boss 不启动行为程序。生成、装备、能力、持久化和清理由普通 Boss 加载器继续管理。

程序需要受支持服务器版本上的原生 Mind 服务。未知或无效文件会产生配置错误,不会静默选择其他 AI。程序 ID 必须使用 elitemobs: 命名空间;子目录引用使用正斜杠。程序 API 见 Mind 上下文参考。

alwaysShowName​

使 Boss 名称在战斗外仍可见。全局 alwaysShowEliteMobNameTags 也可启用此行为。当前 FreeMinecraftModels 优先使用 tag_head 等 tag_ 骨骼定位名称,没有时放在模型碰撞箱上方。较旧的 FMM 版本可能需要作者提供锚点。模型差异见 自定义模型。

键取值默认值
alwaysShowNametrue / falsefalse
示例
alwaysShowName: true

reinforcement​

将 Boss 定义标记为增援,跳过普通区域生成点初始化,并排除自动职业战利品。副本生成点使用单独的注册流程。此标记不会召唤 Boss,也不会建立召唤者关联;其他奖励排除规则由运行时增援和坐骑追踪另行控制。

键取值默认值
reinforcementtrue / falsefalse
示例
reinforcement: true

song​

设置 Boss 生成后向附近玩家播放的音乐。资源包中必须定义对应音效键和 .ogg 音频。

键取值默认值
song字符串无

设置正的 followDistance 来确定开始播放的范围。Boss 每 10 刻检查同一世界中位于配置距离内的玩家。开始播放后,只要玩家在线、处于同一世界且距离不超过 Boss 记录的运行时追踪范围的 1.5 倍,就继续播放。移除 Boss 会停止音乐。Boss 音乐优先于地下城环境音乐,每位玩家同时只播放一首受管理的曲目。

使用 name=SOUND_KEY length=MILLISECONDS,两个字段之间有一个空格。时长为整数毫秒,换算为刻时向下取整,调度延迟至少为 1 刻。使用 MUSIC 类别,音量和音调均为 1。

示例

设置音乐有两种方式。这是第一种:

song: name=elitemobs:ice_queen.idle length=76370

这会播放 ice_queen.idle 这首音乐 76370 毫秒,然后循环播放。注意音乐所在的位置由资源包决定。

这是设置音乐的第二种方式:

song: name=elitemobs:ice_queen.end_transition length=14328->name=elitemobs:ice_queen.end_loop length=28657

这会先播放 ice_queen.end_transition 14328 毫秒,然后过渡到 ice_queen.end_loop 播放 28657 毫秒,并循环播放 end_loop。

这样 Boss 就可以拥有一段“前奏”或“过渡”音乐,随后进入循环播放的主曲目。


cullReinforcements​

控制移除 Boss 时是否清除其追踪的增援,包括 GLOBAL 召唤物。脱战和全额恢复生命时会另外清除普通追踪增援,因此设为 false 并不保证召唤物一直保留。

键取值默认值
cullReinforcementstrue / falsetrue
示例
cullReinforcements: true

movementSpeedAttribute​

设置 Boss 的移动速度。
注意:超过 0.36 可能就太快了。

键取值默认值
movementSpeedAttribute双精度小数无
示例
movementSpeedAttribute: 0.3

patrol​

为自定义首领添加使用原生导航和自动寻路的路线。节点是相对于首领预设生成位置的偏移;设置 patrol.relative: false 时则是其所在世界中的精确坐标。patrol.startNodeWaitSeconds 会让首领每圈在第一个节点处停留休息一次。长路段会自动拆分且不强制加载区块;战斗期间巡逻会暂停。首领必须使用 ai: true、具有正的移动速度,并且不能是乘客。配置、编辑器、持久化和 Lua 控制请参阅 NPC 与首领巡逻。

Boss 阶段​

Boss 可以拥有阶段,当 Boss 生命值降到某个百分比时切换阶段。发生切换时,Boss 会开始使用另一个配置文件,这意味着 Boss 的一切都可以改变,包括实体类型这类属性。
要了解更多关于 Boss 阶段的内容,请点击 这里。

键说明取值默认值
phases设置该 Boss 将拥有的阶段。必填列表无
phaseSpawnLocation设置阶段 Boss 的生成位置。可选字符串无
示例

在这个示例中,我们会展示三个不同的配置文件。

第一个 Boss 配置文件:phase_1_boss.yml

name: "Phase 1"
entityType: ZOMBIE
phases:
- phase_2_boss.yml:0.60
- phase_3_boss.yml:0.30

第二个 Boss 配置文件:phase_2_boss.yml

name: "Phase 2"
entityType: SKELETON

第三个 Boss 配置文件:phase_3_boss.yml

name: "Phase 3"
phaseSpawnLocation: same_as_boss,10,64,100,0,0
entityType: RAVAGER

这个 Boss 会在生命值 60% 时切换到配置文件 phase_2_boss.yml,并在生命值 30% 时切换到配置文件 phase_3_boss.yml,位于与第二阶段相同的世界、坐标 x=10、y=64、z=100 处。Boss 的实体类型和名称也会随之改变。

条目的格式为 filename:healthPercentage,其中百分比是一个大于或等于 0 且小于 1 的小数。格式不符、比例超出范围或 Boss 文件缺失的条目都会阻止该 Boss 生成。

phaseSpawnLocation 是可选的,如果不设置,Boss 会在它当前所站的位置切换阶段。

设计阶段 Boss 时,以下几点很重要:

  • 第一阶段的配置文件决定了该 Boss 的所有阶段。
  • 玩家的仇恨值 / 累计伤害会在各阶段之间保留。
  • 跨过阈值的攻击会被取消,下一阶段从配置的生命值百分比开始。修改 healthMultiplier 会改变该阈值对应的实际 HP。过量伤害不会转移到下一形态。
  • 非副本阶段 Boss 在完全恢复生命时回到第一阶段,包括战斗后配置的生命恢复。副本 Boss 不执行此全额恢复重置。
  • 同时也是区域 Boss 的阶段 Boss,在所有阶段共享同一个牵引半径和超时机制,并会在计时结束后以第一阶段 Boss 的形态重生。
  • 最后一个阶段的配置文件决定了该 Boss 的战利品。
  • 阶段无法被跳过——过量伤害仍然会让 Boss 在设定的百分比处切换阶段。
  • 阶段切换会移除原坐骑;新阶段可以定义自己的坐骑。
  • 阶段切换和全额恢复重置使用无公告生成,不发送普通 Boss 生成公告。

区域 Boss​

区域 Boss 是一种特殊类型的自定义 Boss,它们会在配置好的特定位置生成,并且能在一段延迟后于该位置重生。此外,它们还可以拥有牵引绳来确保其停留在特定区域内,以及其他一些功能。

所有地下城内容都使用这类 Boss。要了解更多关于区域 Boss 的内容,请点击 这里。

键说明取值默认值
isRegionalBoss设置该 Boss 是否为区域 Boss。如果你想要一个区域 Boss,应设为 true。true / falsefalse
spawnLocations设置该 Boss 的生成位置。请通过 /em place boss [filename.yml] 命令添加!无
spawnCooldown设置该 Boss 的重生冷却时间,单位为分钟。整数0
leashRadius设置 Boss 在被拉回之前可以离开生成点的距离。以生成点为中心测量。双精度小数无
onSpawnBlockStates设置该 Boss 生成时会修改的方块。参见下面的命令无
onRemoveBlockStates死亡、击杀命令或推进阶段时应用保存的方块;不包括超时、全额恢复重置、重载和关服。参见下面的命令无

如上所示,区域 Boss 可以拥有 onSpawnBlockStates 和 onRemoveBlockStates。

这是一个非常实用的功能,可以在战斗过程中改变战斗场地,尤其是与阶段切换结合使用时,因为这样就可以通过改变方块状态来开启和关闭战斗场地。

这些配置的格式过于复杂,无法手动书写,因此提供了几条命令来帮助你设置:

命令说明
/em transitiveBlocks register [regional_boss_file.yml] [ON_SPAWN/ON_REMOVE]开始为生成时或移除时的方块状态登记手动选取的方块。
/em transitiveBlocks edit [regional_boss_file.yml] [ON_SPAWN/ON_REMOVE]编辑生成时或移除时的方块状态。
/em transitiveBlocks registerArea [regional_boss_file.yml] [ON_SPAWN/ON_REMOVE]允许管理员选取大片方块区域并保存为状态。
/em transitiveBlocks editArea [regional_boss_file.yml] [ON_SPAWN/ON_REMOVE]允许管理员编辑大片方块区域并保存为状态。
使用示例:

假设你想做一场战斗:Boss 在一个有着敞开大门的场地中生成,你希望战斗开始时门关闭,战斗结束后门重新打开。

要做到这一点,你需要两个 Boss 阶段,并登记三组不同的方块状态。在这个示例中,我把这两个阶段分别命名为 phase_1_boss.yml 和 phase_2_boss.yml。

  1. 使用 /em transitiveBlocks register phase_1_boss.yml ON_SPAWN 或 /em transitiveBlocks edit phase_1_boss.yml ON_SPAWN 来登记处于打开状态的门方块。

这意味着登记的是空气方块。这里推荐使用区域选取。

这样才能确保 Boss 生成时门是打开的,从而保证玩家有路可进。

  1. 使用 /em transitiveBlocks register phase_2_boss.yml ON_SPAWN 或 /em transitiveBlocks edit phase_2_boss.yml ON_SPAWN 来登记处于关闭状态的门方块。

这意味着登记的是那些会阻止玩家离开的实心门方块。

这样才能在 Boss 进入第二阶段时把门变为实心,阻止玩家离开。

  1. 使用 /em transitiveBlocks register phase_2_boss.yml ON_REMOVE 或 /em transitiveBlocks edit phase_2_boss.yml ON_REMOVE 来登记处于打开状态的门方块。

这意味着再次登记第一步中的那些方块(也就是空气方块)。

这样才能在 Boss 死亡时打开门,让玩家可以离开场地。


alert​

设置该 Boss 是否处于警戒状态。默认情况下,区域 Boss 在脱离战斗时会被减速,并且仇恨距离更短。该设置可以让区域 Boss 在战斗之外也不被减速、不缩短仇恨距离,因此无论在战斗中还是战斗外,它们的行为都保持一致。

键取值默认值
alert布尔值false
示例
alert: true

removeAfterDeath​

在死亡或超时后永久删除这一处区域生成点,用于 BetterStructures 神龛等一次性战斗。同一个 Boss 定义仍可拥有其他生成点。

键取值默认值
removeAfterDeath布尔值false
示例
removeAfterDeath: true

副本 Boss​

副本 Boss 是区域 Boss 的一个子类型,用于副本地下城中。

键说明取值默认值
instanced让该自定义 Boss 成为副本 Boss。必填。true / falsefalse

要让副本地下城正常运作,必须把 Boss 设置为副本 Boss。我们还建议移除所有副本 Boss 的牵引绳。

示例
instanced: true