跳至主要內容

建立生成點

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 檢查。