跳到主要内容

创建生成点

webapp_banner.jpg

什么是自定义生成点?

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

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

创建自定义生成点

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

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

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

创建任意位置生成点

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

isEnabled: true
canSpawnInLight: true

此配置允许怪物在任何位置、任何世界、任何时间以及任何月相下生成。

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


isEnabled

设定生成点是否启用。

KeyValuesDefault
isEnabledBooleantrue
示例
isEnabled: true

lowestYLevel

设定使用的最低 Y 级别(地图高度)。请注意,默认值 0 会让地下生成永远不会低于海平面 —— 如果你希望在深层洞穴中生成,请把它设为负值,例如 -64

KeyValuesDefault
lowestYLevelInteger0
示例
lowestYLevel: 0

highestYLevel

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

KeyValuesDefault
highestYLevelInteger320
示例
highestYLevel: 320

validWorlds

设定可以发生自定义生成的世界列表。可以省略此设定以允许所有世界。

KeyValuesDefault
validWorldsString Listnone
示例
validWorlds:
- WORLD
- FUN_LAND

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

validWorlds: []

validWorldEnvironments

设定可以发生自定义生成的有效世界环境列表。可以省略此设定以允许所有环境。

KeyValuesDefault
validWorldEnvironmentsEnvironment Listnone
示例
validWorldEnvironments:
- NORMAL
- NETHER

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

validWorldEnvironments: []

validBiomesV2

本意是设定可以发生自定义生成的有效生物群系列表。

此设定在旧版 EM 中称为 validBiomes

此设定目前不起任何作用。 EliteMobs 会把这个键写入你的生成文件,但从不回读它,因此你填入的任何内容都会被忽略,生成的行为就像根本没有设置生物群系限制一样。

不要依赖它把某个 Boss 限制在特定生物群系内。请改用 validWorldsvalidWorldEnvironments,或者用 isSurfaceSpawn / isUndergroundSpawn 以及 Y 级别设置来限制生成。

KeyValuesDefault
validBiomesV2Biome Listnone

earliestTime

设定自定义生成可以发生的最早游戏内时间。与其他设置不同,earliestTimelatestTimemoonPhase 是在 Boss 即将被放置的那一刻检查的,而不是在搜索位置的过程中检查,因此一个已经找到位置的生成只会一直等到时间与月相条件满足为止。

KeyValuesDefault
earliestTimeLong0
示例
earliestTime: 0

latestTime

设定自定义生成可以发生的最晚游戏内时间。

KeyValuesDefault
latestTimeLong24000
示例
latestTime: 24000

moonPhase

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

KeyValuesDefault
moonPhaseSpecial [1]none
示例
moonPhase: FULL_MOON

Special [1]

展开表格
Moon PhasePreview
NEW_MOON🌑
WAXING_CRESCENT🌒
FIRST_QUARTER🌓
WAXING_GIBBOUS🌔
FULL_MOON🌕
WANING_GIBBOUS🌖
WANING_CRESCENT🌘
LAST_QUARTER🌗

bypassWorldGuard

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

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

KeyValuesDefault
bypassWorldGuardBooleanfalse

canSpawnInLight

指定自定义生成是否可以在光源照亮的方块上发生。设为 false 时,生成仅在光照等级 8 或以下时发生。设为 true 时,生成可以在任何光照等级下发生。

KeyValuesDefault
canSpawnInLightBooleanfalse
示例
canSpawnInLight: false

isSurfaceSpawn

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

KeyValuesDefault
isSurfaceSpawnBooleanfalse
示例
isSurfaceSpawn: false

isUndergroundSpawn

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

KeyValuesDefault
isUndergroundSpawnBooleanfalse
示例
isUndergroundSpawn: false

生成位置是如何选出的

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

  1. 从符合本次生成条件的玩家中随机选取一名玩家。如果玩家所在的世界不在 ValidWorlds.yml 中、玩家正处于竞技场或地下城实例内、玩家所在世界关闭了怪物生成,或者该生成的 validWorlds / validWorldEnvironments 排除了玩家所在世界,那么该玩家会被跳过。定时事件还会额外跳过身处 EliteMobs 地下城世界内的玩家。
  2. 在距该玩家 X 轴与 Z 轴上各 24 至 128 格之间的范围内、朝任意方向挑选一个候选位置。
  3. Y 级别按照 isSurfaceSpawnisUndergroundSpawn 解析;如果两者都未设置,则向上搜索第一个下方是固体地面、上方有两格空气的方块。
  4. 随后该候选位置会经过下面列出的各项验证。

最多尝试 100 个候选位置,每 tick 尝试 4 个。如果全都不成立,EliteMobs 会等待一分钟后再试一次,因此在繁忙或保护严密的服务器上,事件可能需要一段时间才会真正出现。

生成验证行为

当 EliteMobs 尝试使用自定义生成配置生成 Boss 时,除了已配置的字段外,还会执行若干项自动验证:

  • 玩家邻近距离:Boss 不会在任何玩家 24 个方块范围内生成
  • 下界天花板:下界维度中 Y=127 以上的生成会被阻止
  • 方块安全性:确保生成发生在有固体地面且上方有空气空间的位置
  • Y 级别:最终位置必须处于 lowestYLevelhighestYLevel 之间
  • 游戏规则:遵守世界的怪物生成游戏规则(Minecraft 1.21.11 及更新版本为 spawnMobs,此前为 doMobSpawning
  • WorldGuard 标志:检查 elitemobs-eventselitemob-spawning 以及 WorldGuard 自身的 mob-spawning 标志
  • 和平旗帜:如果 PeaceBanner.yml 中启用了 suppressEvents(默认启用),受和平旗帜保护的区域会被跳过
  • 最终试探性生成:在 Boss 出现之前的最后一刻,EliteMobs 会在该位置生成并立即移除一只普通的原版僵尸。如果有其他保护插件阻止了这只僵尸,该位置会被丢弃并重新开始搜索

这些验证自动执行,无法通过配置禁用。