跳到主要内容

创建生成点

webapp_banner.jpg

什么是自定义生成点?​

自定义生成点由事件和全局援军使用,用于设定事件应如何、在哪里以及何时生成该事件的 Boss。

事件和全局援军通过写下文件名来设定它们使用的生成点。

创建自定义生成点

自定义生成点位于 customspawns 文件夹中。一个自定义生成点可以同时被多个事件使用,因此你不需要为每个事件创建一个。

以下是一个自定义生成点的示例:

isEnabled: true
validWorldEnvironments:
- NORMAL
- CUSTOM
bypassWorldGuard: false
isSurfaceSpawn: true

创建任意位置生成点​

要创建一个可以在任何地方发生的生成点,你的配置应该如下所示:

isEnabled: true
canSpawnInLight: true

此配置取消光照限制,不额外添加世界、时间或月相过滤。启用世界列表、默认 Y 范围、附近的合格玩家、已加载区块、保护标志以及下文的位置检查仍然适用。

如果你有兴趣创建更自定义的生成点,请继续阅读下方内容。

值​


isEnabled​

设定生成点是否启用。

键值默认值
isEnabled布尔值true
示例
isEnabled: true

lowestYLevel​

设置最低 Y 坐标。默认值 0 排除 Y 为负数的洞穴;使用 -64 等负值可允许地下搜索进入更深的洞穴。这不会改变初始随机 Y 范围或向上搜索的内置高度上限。

键值默认值
lowestYLevel整数0
示例
lowestYLevel: 0

highestYLevel​

设定使用的最高 Y 级别(地图高度)。

键值默认值
highestYLevel整数320
示例
highestYLevel: 320

validWorlds​

过滤普通玩家选择中的世界,定时事件也使用此流程。省略后不添加自己的世界过滤,但 ValidWorlds.yml 和其他资格检查仍然适用。全局援军直接选择召唤者世界中的玩家,不使用此过滤。

键值默认值
validWorlds字符串列表无
示例
validWorlds:
- WORLD
- FUN_LAND

如果你希望所有世界都有效,可以不使用该设定或者这样格式化:

validWorlds: []

validWorldEnvironments​

过滤普通玩家选择中的世界环境。省略后不额外限制环境。全局援军直接选择召唤者世界中的玩家,不使用此过滤。

键值默认值
validWorldEnvironments环境列表无
示例
validWorldEnvironments:
- NORMAL
- NETHER

如果你希望所有环境都有效,可以不使用该设定或者这样格式化:

validWorldEnvironments: []

validBiomesV2​

设定可以发生自定义生成的生物群系。省略此项或使用空列表,即不添加任何生物群系限制。

此设定在旧版 EM 中称为 validBiomes。

每个条目都是一个生物群系键。不带命名空间的名称(例如 plains 或 DEEP_OCEAN)会被读取为 minecraft:<name>,且不区分大小写。只要有任何条目不是已注册的生物群系,EliteMobs 就会记录一条警告并禁用整个生成文件,使用该文件的事件和全局援军都将无法生成。

生物群系在随机抽取的候选点处读取,此时 EliteMobs 尚未确定最终的 Y 坐标。请参阅生成位置是如何选出的。

键值默认值
validBiomesV2生物群系列表无
示例
validBiomesV2:
- minecraft:plains
- desert

earliestTime​

设置允许生成的最早游戏时间。时间范围包含两个端点,不能跨越午夜:若 earliestTime 大于 latestTime,生成会一直被阻止。

找到位置后,EliteMobs 每 tick 检查 earliestTime、latestTime 和 moonPhase,在该位置等待条件满足。等待后不会重新检查玩家距离、光照、区块加载状态或 WorldGuard。放置 Boss 前仍会执行最终僵尸测试和和平旗帜检查。

键值默认值
earliestTime长整数0
示例
earliestTime: 0

latestTime​

设置允许生成的最晚游戏时间,包含该时刻。请保持大于或等于 earliestTime。

键值默认值
latestTime长整数24000
示例
latestTime: 24000

moonPhase​

设定自定义生成所需的月相。

键值默认值
moonPhase特殊 [1]无
示例
moonPhase: FULL_MOON

特殊 [1]

展开表格
月相预览
NEW_MOON🌑
WAXING_CRESCENT🌒
FIRST_QUARTER🌓
WAXING_GIBBOUS🌔
FULL_MOON🌕
WANING_GIBBOUS🌖
WANING_CRESCENT🌘
LAST_QUARTER🌗

bypassWorldGuard​

本意是让自定义生成绕过 WorldGuard 等保护系统。

此设定目前不起任何作用。 EliteMobs 会从你的生成文件中读取这个键,但从不据此行动,因此无论你在这里设置什么,WorldGuard 标志始终会被检查。若要让生成发生在受保护的区域内,请改为在该区域上设置相应的 WorldGuard 标志。

键值默认值
bypassWorldGuard布尔值false

canSpawnInLight​

控制位置选择时的光照检查。设为 false 时,方块的综合光照等级必须不超过 8,包括天空光。设为 true 则跳过此检查。

键值默认值
canSpawnInLight布尔值false
示例
canSpawnInLight: false

isSurfaceSpawn​

设定自定义生成是否只能在世界表面发生。

键值默认值
isSurfaceSpawn布尔值false
示例
isSurfaceSpawn: false

isUndergroundSpawn​

设定自定义生成是否只能在地下发生。

键值默认值
isUndergroundSpawn布尔值false
示例
isUndergroundSpawn: false

生成位置是如何选出的​

EliteMobs 并不会扫描整个世界去找地点。它会随机挑选一名在线玩家,然后从该玩家出发做偏移:

  1. 随机选择一名合格玩家。如果 EliteMobs 数据未加载、世界不在 ValidWorlds.yml 中、位于地下城、竞技场或职业试炼的实例区域内、世界禁止怪物生成,或被 validWorlds / validWorldEnvironments 排除,则跳过该玩家。定时事件还会排除 EliteMobs 地下城世界内的玩家。此选择不会按游戏模式排除玩家。
  2. X 和 Z 各取 24 至 127 格偏移量,正负方向分别随机选择。未加载区块中的候选位置会被拒绝;搜索不会加载区块。
  3. Y 由 isSurfaceSpawn 或 isUndergroundSpawn 决定。两者都未启用时,向上寻找不可穿过的方块上方连续两格空气的位置。
  4. 随后该候选位置会经过下面列出的各项验证。

全局援军使用召唤者世界中的所有玩家,取代步骤 1 的过滤列表。因此会跳过该步骤的数据加载、世界、环境、实例和怪物生成游戏规则检查。候选位置仍须通过生物群系、高度、距离、光照和 WorldGuard 检查。

最多尝试 100 个候选位置,每 tick 一个。全部失败后等待一分钟再试。初始 Y 在 0 至 255 之间。普通向上搜索从该采样值开始,在 highestYLevel 与世界建筑高度上限以下两格之间取较低者停止。地下向下搜索即使配置了更低的 lowestYLevel,也会在 Y=-63 停止。地表和地下模式各有自己的搜索流程,同时启用时地表优先。

生成验证行为​

EliteMobs 在搜索期间检查候选位置。时间和月相允许生成后,才执行最终僵尸测试和和平旗帜检查:

  • 玩家距离:拒绝与任何玩家的三维距离小于 24 格的候选位置
  • 下界天花板:下界维度中 Y=127 以上的生成会被阻止
  • 方块安全性:地下搜索要求固体地面,普通向上搜索要求不可穿过的方块。两者都要求其上有两格空气。地表模式使用该列最高方块上方一格的位置,不执行相同的净空检查。
  • Y 级别:最终位置必须处于 lowestYLevel 与 highestYLevel 之间
  • 游戏规则:普通玩家选择遵守世界的怪物生成规则。Minecraft 1.21.11 起为 spawnMobs,此前为 doMobSpawning。全局援军跳过此选择检查。
  • WorldGuard 标志:检查 elitemobs-events、elitemob-spawning 以及 WorldGuard 自身的 mob-spawning 标志
  • 和平旗帜:若 PeaceBanner.yml 的 suppressEvents 保持默认启用,受保护的位置会取消本次生成尝试。定时事件会安排下一次事件,此检查不会为当前尝试重新搜索位置。
  • 最终试探性生成:在 Boss 出现之前的最后一刻,EliteMobs 会在该位置生成并立即移除一只普通的原版僵尸。如果有其他保护插件阻止了这只僵尸,该位置会被丢弃并重新开始搜索

这些检查自动执行。光照和和平旗帜有上述配置开关;bypassWorldGuard 不会关闭 WorldGuard 检查。