跳到主要内容

创建事件

webapp_banner.jpg

本指南适用于 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​

设置事件的类型。

键值默认值
eventTypeBREAK_BLOCK / FISH / TILL_SOIL / TIMEDDEFAULT

请注意,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!

create_events_start_message.jpg


endMessage​

设置事件结束时发送的消息。

键值默认值
endMessage字符串无
示例
endMessage: An event has ended!

create_events_end_message.jpg


eventStartCommands​

设置事件开始时由控制台执行的命令,不要加开头的 /。系统不提供玩家或 Boss 占位符。每条命令独立执行;可选的 $chance=0.5$ 让该命令有 50% 概率执行。请使用 0~1 的概率;省略时总会执行。

键值默认值
eventStartCommands字符串列表无
示例
eventStartCommands:
- say The event now starts!!
- "$chance=0.5$ say What a spawn!"

create_events_start_commands.jpg


eventEndCommands​

设置事件结束时安排到下一次服务器任务中执行的控制台命令。语法和逐条命令概率与 eventStartCommands 相同,不提供玩家或 Boss 占位符。

键值默认值
eventEndCommands字符串列表无
示例
eventEndCommands:
- say The event ends, so sad.
- "$chance=0.5$ say Too slow bud!"

create_events_end_commands.jpg


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​

设置当动作发生时事件发生的几率。

键值默认值
chance0.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