创建事件
本指南适用于 EliteMobs 10 及更高版本
什么是自定义事件?
这里所说的自定义事件指的是在游戏中随机发生的事件,无论是基于玩家行为还是采用定时触发。插件预装了若干自定义事件,举几个例子,比如炎魔(Balrog)事件、海妖(Kraken)事件和宝藏哥布林(Treasure Goblin)事件。
之所以称这个系统为 自定义 事件,是因为这些事件不仅可以被自定义,还可以从零开始创建。下面是一份关于如何创建和自定义你自己的事件的指南。
创建你的自定义事件
自定义事件配置文件应创建在:
plugins/EliteMobs/customevents/
文件必须使用 .yml 格式。引用事件时请使用包含 .yml 扩展名的完整文件名。
示例:my_cool_event.yml 被引用为 my_cool_event.yml
保存文件后执行 /em reload 加载更改。events.yml 中对应的动作/定时事件开关也必须启用。
通用配置设置
以下设置可以 / 应该同时用于动作事件和定时事件。
isEnabled
设置事件是否启用。
| 键 | 值 | 默认值 |
|---|---|---|
isEnabled | 布尔值 | true |
示例
isEnabled: true
eventType
设置事件的类型。
| 键 | 值 | 默认值 |
|---|---|---|
eventType | BREAK_BLOCK / FISH / TILL_SOIL / TIMED | DEFAULT |
请注意,BREAK_BLOCK、FISH 和 TILL_SOIL 属于 动作事件,而 TIMED 属于 定时事件。
eventType 是必填项。 DEFAULT 只是当该设置缺失、或者取值与上面任何一种类型都不匹配时 EliteMobs 所回退到的占位值。停留在 DEFAULT 的事件会记录一条警告,并且根本不会被注册,因此它下面的所有设置甚至都不会被读取。
示例
eventType: BREAK_BLOCK
bossFilenames
列出要一起生成的自定义 Boss 文件名,包含 .yml。必填! 这不是从列表中随机挑选一个 Boss。使用事件前请检查每个引用的 Boss。定时事件会跳过无效文件名,没有有效 Boss 就无法入队。动作事件只要含有任何无效文件名,就会在生成任何东西之前被取消;如果某个 Boss 的生成被拒绝,已经生成的 Boss 都会被移除。
| 键 | 值 | 默认值 |
|---|---|---|
bossFilenames | 字符串列表 | 无 |
示例
bossFilenames:
- balrog.yml
- my_event_boss.yml
announcementPriority
设置事件开始和结束消息的接收者。事件优先级的行为与 Boss 公告优先级不同:
| 优先级 | 接收者 |
|---|---|
0 | 事件所在世界的玩家;不会关闭消息 |
1 | 所有在线玩家;设置 announcementBroadcastWorldOnly: true 时仅限事件所在世界 |
2 | 事件所在世界的玩家 |
3 或更高 | 事件所在世界的玩家,以及已配置的 DiscordSRV |
省略 startMessage 或 endMessage 可关闭对应的事件消息。Boss 自身的生成公告是独立的。
| 键 | 值 | 默认值 |
|---|---|---|
announcementPriority | 整数 | 0 |
示例
announcementPriority: 1
startMessage
设置事件实际开始时发送的消息,而非定时事件入队时发送。开始和结束消息支持颜色格式,但事件系统不会替换 $boss 或 $player 等 Boss/玩家占位符。
| 键 | 值 | 默认值 |
|---|---|---|
startMessage | 字符串 | 无 |
示例
startMessage: An event has started!
![]()
endMessage
设置事件结束时发送的消息。
| 键 | 值 | 默认值 |
|---|---|---|
endMessage | 字符串 | 无 |
示例
endMessage: An event has ended!
eventStartCommands
设置事件开始时由控制台执行的命令,不要加开头的 /。系统不提供玩家或 Boss 占位符。每条命令独立执行;可选的 $chance=0.5$ 让该命令有 50% 概率执行。请使用 0~1 的概率;省略时总会执行。
| 键 | 值 | 默认值 |
|---|---|---|
eventStartCommands | 字符串列表 | 无 |
示例
eventStartCommands:
- say The event now starts!!
- "$chance=0.5$ say What a spawn!"

eventEndCommands
设置事件结束时安排到下一次服务器任务中执行的控制台命令。语法和逐条命令概率与 eventStartCommands 相同,不提供玩家或 Boss 占位符。
| 键 | 值 | 默认值 |
|---|---|---|
eventEndCommands | 字符串列表 | 无 |
示例
eventEndCommands:
- say The event ends, so sad.
- "$chance=0.5$ say Too slow bud!"

minimumPlayerCount
设置所需的最低在线人数,统计所有世界和游戏模式,而非仅统计事件附近符合条件的参与者。
动作事件在动作触发时检查此项。定时事件会在自动选择器挑选事件时、已入队事件搜索位置之前,以及其 Boss 即将生成之前分别检查一次。已入队的定时事件会一直等到在线人数足够;其自定义生成仍须通过自身的玩家和位置检查找到合适地点。
| 键 | 值 | 默认值 |
|---|---|---|
minimumPlayerCount | 整数 | 1 |
示例
minimumPlayerCount: 5
事件配置示例
这里只展示通用设置;完整的定时事件还需要 spawnType 和正的选择权重。
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
完整定时事件示例
isEnabled: true
eventType: TIMED
bossFilenames:
- "my_timed_boss.yml"
announcementPriority: 3
startMessage: "A timed event has started!"
endMessage: "The timed event has ended!"
eventStartCommands:
- say The timed event began!
eventEndCommands:
- say The timed event concluded!
spawnType: "my_spawn_location.yml"
localCooldown: 120
globalCooldown: 30
weight: 100
eventDuration: 15
endEventWithBossDeath: true
动作事件
当特定动作(例如破坏方块或钓鱼)发生时,有一定几率运行的事件。
动作事件开始后会应用玩家个人冷却,默认为 4 分钟,通过 events.yml 中的 actionEventMinimumCooldownMinutes 配置。每次动作只会启动一个动作事件:一旦某个匹配的文件启动,该玩家即进入冷却,其余文件会被跳过。启动失败的事件不会消耗冷却。设置 actionEventsEnabled: false 可在全服关闭动作事件。
三种动作类型的触发方式如下:
eventType | 触发条件 |
|---|---|
BREAK_BLOCK | 玩家破坏一个方块。先掷 chance,然后把被破坏的方块与 breakableMaterials 比对。 |
FISH | 钓鱼事件具有捕获的实体,包括被钩住的生物。没有捕获实体就不会触发。生成位置是该实体的位置。 |
TILL_SOIL | 玩家主手持木、石、铁、金、钻石或下界合金锄,右键 DIRT 或 GRASS_BLOCK。不要求方块实际变成耕地。 |
已取消的 Bukkit 事件会被忽略。位置必须在启用 EliteMobs 的世界内、EliteMobs 地下城世界以及地下城、竞技场或职业试炼的实例区域之外,并得到 WorldGuard elitemobs-events 旗标允许。这些监听器不单独限制玩家游戏模式。
动作事件在交互位置生成:被破坏方块的 X/Z 中心、捕获实体的位置,或被点击土壤上方一格。它们不使用 spawnType、定时事件选择权重或选择冷却。
启用 suppressEvents 时,Peace Banner 保护也会阻止事件。下文的持续时间、结束时刻和 Boss 移除后结束等监控检查同样适用于动作事件。
chance
设置当动作发生时事件发生的几率。
| 键 | 值 | 默认值 |
|---|---|---|
chance | 0.0 到 1.0 之间的值 | 0 |
示例
chance: 0.001
breakableMaterials
设置当动作被设为 BREAK_BLOCK 时要检查的材质列表。
| 键 | 值 | 默认值 |
|---|---|---|
breakableMaterials | 材质 列表 | 无 |
示例
breakableMaterials:
- BEEHIVE
- BIRCH_WOOD
配置示例
chance: 0.001
breakableMaterials:
- COAL_ORE
假设事件类型为 BREAK_BLOCK,则设置为:当破坏一个煤矿石方块时有 0.1% 的几率运行该事件。
完整动作事件示例
isEnabled: true
eventType: BREAK_BLOCK
bossFilenames:
- "mining_boss.yml"
announcementPriority: 2
startMessage: "You've awakened something..."
chance: 0.001
breakableMaterials:
- DIAMOND_ORE
- EMERALD_ORE
定时事件
定时事件先进行加权自动选择,再进入自定义生成队列。被选中不保证立即生成,也不保证固定时间表。不同文件的事件可以同时排队或运行。
没有在线玩家时不会自动选择事件。同一文件已有排队或运行中的副本,或在线人数少于其 minimumPlayerCount 时,自动选择器会排除该文件。设置 events.yml 中的 timedEventsEnabled: false 可在全服关闭定时事件。
spawnType
设置事件所使用的 自定义生成,它定义了 Boss 可以在哪里生成。
| 键 | 值 | 默认值 |
|---|---|---|
spawnType | 文件名 | 无 |
示例
spawnType: nether_spawn.yml
localCooldown
设置该事件再次被自动选择前的等待分钟数,从被选中时开始计算。即使后续验证或其他插件阻止入队,这次冷却仍会消耗。已有排队或运行中的副本也会阻止再次自动选择,即使冷却已经结束。
| 键 | 值 | 默认值 |
|---|---|---|
localCooldown | 双精度 | 0 |
示例
localCooldown: 120
globalCooldown
设置自动选择的全局等待分钟数。在成功入队时设置一次,实际开始时再次设置,手动入队的事件也适用。它不是从事件结束时开始计算。后一次赋值会替换原有截止时间。
| 键 | 值 | 默认值 |
|---|---|---|
globalCooldown | 双精度 | 0 |
示例
globalCooldown: 60
weight
设置当前符合条件的定时事件之间的相对选择权重。请使用有限的正数。推荐值:100。零权重不能可靠地禁用事件,尤其是所有候选权重都为零时;请使用 isEnabled: false。
权重系统决定了事件被选中的相对概率。例如:
- 权重为 100 的事件 A 对比权重为 50 的事件 B = 事件 A 被选中的可能性是事件 B 的两倍
- 权重越高 = 被选中的几率越高
- 调度器初始化约 5 分钟后首次检查,之后每分钟检查一次。服务器卡顿可能延迟检查。
| 键 | 值 | 默认值 |
|---|---|---|
weight | 双精度 | 0 |
示例
weight: 60.5
eventDuration
设置从实际开始起计算的持续时间限制,单位为分钟。0 和负数都会禁用此检查。监控器每 20 个服务器刻检查一次,因此事件最多可能晚一秒结束,服务器卡顿时还会更晚。同样适用于动作事件。
| 键 | 值 | 默认值 |
|---|---|---|
eventDuration | 双精度 | 0 |
示例
eventDuration: 30
endEventWithBossDeath
当所有主要 Boss 对象都不再存在时结束事件。设置多个 bossFilenames 时,只移除或击败其中一个不会在其他 Boss 仍存在时结束事件。增援不算额外的主要 Boss。此项检查是否存在,不要求是归属于玩家的击杀。无论因何结束事件,剩余主要 Boss 都会按超时方式移除。同样适用于动作事件。
| 键 | 值 | 默认值 |
|---|---|---|
endEventWithBossDeath | 布尔值 | true |
示例
endEventWithBossDeath: true
eventEndTime
设置事件结束时的游戏内时间(以游戏刻为单位)。使用 Minecraft 的时间系统,其中 0=黎明,6000=正午,12000=黄昏,18000=午夜,23000=深夜。设为 -1 可禁用基于时间的结束。
检查条件为 世界时间 > eventEndTime,不会等待次日或精确跨过该时刻。如果事件在该时刻之后开始,可能在第一次监控检查时就结束。请协调生成时间窗口与结束时刻。世界时间范围为 0~23999,永远不会超过 23999 或更高阈值。同样适用于动作事件。
| 键 | 值 | 默认值 |
|---|---|---|
eventEndTime | 整数(可达到的阈值为 0~23998;-1 禁用) | -1 |
示例
eventEndTime: 23000
入队会启动自定义生成的位置搜索和重试流程。它可能停留在缓存位置等待时间或月相符合要求,等待期间不会重新执行所有位置检查。具体检查及限制见上方链接的自定义生成指南。同一时间只会有一个定时事件进行生成,生成还要等待 minimumPlayerCount 和 timedEventMinimumCooldownMinutes 间隔满足。定时事件确认主要 Boss 存在后,才会执行开始消息和开始命令。
事件配置示例
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
spawnType: "myCoolSpawn.yml"
localCooldown: 30
globalCooldown: 15
weight: 100
eventDuration: 20
endEventWithBossDeath: true
eventEndTime: 10000
手动触发一个事件
/em event <event filename>
将定时事件入队,等待有效的时间和地点。需要 elitemobs.event.start 权限,必须由玩家执行,且只接受已加载的定时事件模板。启用 timedEventsEnabled 时,插件从已启用的 TIMED 文件创建这些模板。
命令绕过加权选择、本地/全局选择冷却,以及已有排队或运行副本的检查。重复执行可能排入重复副本。自定义生成的位置和时间条件、事件的 minimumPlayerCount,以及 timedEventMinimumCooldownMinutes 间隔仍然适用。
无法入队时会说明原因:spawnType 缺失或无效、没有有效的 bossFilenames,或其他插件取消了事件。成功消息只确认已接受入队,不代表已经出现可见 Boss。请检查实际 Boss 和控制台中的生成重试记录。
全服事件设置
这些设置位于 plugins/EliteMobs/events.yml,编辑后请重新加载:
| 键 | 说明 | 默认值 |
|---|---|---|
actionEventsEnabled | 动作事件是否会发生 | true |
timedEventsEnabled | 定时事件是否会发生 | true |
actionEventMinimumCooldownMinutes | 动作事件触发之后,针对每名玩家的冷却(分钟) | 4 |
timedEventMinimumCooldownMinutes | 定时事件开始后,必须经过多少分钟,另一个定时事件才能搜索位置或生成其 Boss,已经在缓存位置等待的事件也包括在内 | 4 |
announcementBroadcastWorldOnly | 将优先级 1 的消息限制在事件所在世界;其他优先级的游戏内消息本来就只发送到该世界 | false |
