建立生成器
生成器
生成器是 BetterStructures 配置系統中最強大的部分。預設有 29 個生成器,共同管理著 BetterStructures 目前發佈的建築;雖然你可以建立自己的生成器,但也可以直接使用現有的作為捷徑。
生成器會告訴外掛東西究竟應該在哪裡生成,並定義戰利品表。預設生成器的命名方式也很容易讓人猜到它們的功能。
生成器配置選項
| 鍵 | 預設值 | 必需 | 描述 |
|---|---|---|---|
isEnabled | true | ❌ | 生成器是否啟用。將其設為 false 也會讓所有指向此生成器的 schematic 停止註冊,因此這是一次關閉整組結構最快的方式。 |
structureType | - | ✅ | 結構生成位置(見下表) |
lowestYLevel | -59 | ❌ | 生成的最低 Y 級別 |
highestYLevel | 320 | ❌ | 生成的最高 Y 級別 |
validWorlds | 全部允許 | ❌ | 結構可以生成的世界列表 |
validWorldEnvironments | 全部允許 | ❌ | NORMAL、NETHER、THE_END、CUSTOM |
validBiomesV2 | 依預設範本而異 | ❌ | 有效生態群系清單(namespace:key 格式);實際生效的清單為空時允許所有生態群系 |
treasureFilename | - | ❌ | 箱子戰利品的寶藏檔案 |
generateLootInBarrels | true | ❌ | 此生成器放置的結構中之木桶是否應被填入戰利品 |
barrelTreasureFilename | treasure_barrel_food.yml | ❌ | 為此生成器填入木桶時所使用的寶藏檔案 |
structureType
設定建築的結構類型。你可以為單個生成器指定多個結構類型!
| 類型 | 主世界/自訂 | 下界 | 終界 | 描述 |
|---|---|---|---|---|
SURFACE | 地表 | 類似地表的點 | 地表 | 在世界地表生成 |
SKY | 最高方塊上方 80-120 格 | 在 Y 45 到 Y 100 之間找到的空氣空間 | 最高方塊上方 80-120 格 | 在天空生成(可在 config.yml 中配置) |
UNDERGROUND_SHALLOW | 初始 Y 0-49 | 在 Y 60-119 掃描固體區域 | 在 Y 0-79 掃描固體區域 | 淺層地下結構 |
UNDERGROUND_DEEP | 初始 Y -53 到 -1 | 沿 Y 60-6 向下掃描固體區域 | 在偏移和邊界調整前從 Y 0 開始 | 深層地下結構 |
LIQUID_SURFACE | 最高方塊處的液體 | Y 31 的岩漿,上方需為空氣 | 無初始液體檢查,仍會檢查地形適配 | 在液體表面生成 |
DUNGEON | ✅ | ✅ | ✅ | 為獨立的模組生成器系統保留;單獨設定此類型不會將 schematic 變成模組化地下城 |
天空範圍是該直行最高方塊上方的偏移量,不是絕對 Y 座標。地下範圍描述 schematic 偏移和維度邊界調整前的初始選擇或掃描。下界天空掃描會走訪 Y 45-99。
多結構類型範例
structureType:
- SURFACE
- UNDERGROUND_SHALLOW
這允許同一生成器在多個位置生成結構,例如同時在地表和淺層地下區域。
注意:由於 Minecraft 有大量地下空間,因此有兩個地下設定。兩者都有可以確保在各深度均勻分佈,防止玩家錯過結構。
按維度劃分的 Y 級別範圍
每個維度的預設高度範圍(可在 config.yml 中配置):
| 維度 | 預設範圍 | 配置設定 |
|---|---|---|
| 主世界/自訂 | Y=-60 到 Y=320 | lowestYNormalCustom / highestYNormalCustom |
| 下界 | Y=4 到 Y=120 | lowestYNether / highestYNether |
| 終界 | Y=0 到 Y=320 | lowestYEnd / highestYEnd |
| 天空(主世界/自訂) | 最高方塊上方 80 到 120 格 | normalCustomAirBuildingMinAltitude / normalCustomAirBuildingMaxAltitude |
| 天空(終界) | 最高方塊上方 80 到 120 格 | endAirBuildMinAltitude / endAirBuildMaxAltitude |
生成器的 lowestYLevel 和 highestYLevel 用來篩選候選錨點,不會取代維度層級的地下邊界,也不會重新定義天空偏移範圍。
上述兩列天空數值是加在該欄位最高方塊之上的偏移量,並非絕對 Y 高度。主世界/自訂與終界的天空偏移量,都會在每次放置時於各自的最小值與最大值之間隨機擲出。
下界完全忽略那些偏移量:BetterStructures 不會在最高方塊上方建造,而是掃描該直行 Y 45 到 Y 100 之間,尋找至少 20 格高的空氣空腔並把結構放進去。如果不存在這樣的空腔,該區塊就不會生成任何東西。
自訂生態群系支援
BetterStructures 自動支援來自 Terralith、Iris、Terra 和 TerraformGenerator 等世界生成器的自訂生態群系。
當你在 validBiomesV2 中指定原版生態群系時,外掛會自動包含相容的自訂生態群系:
validBiomesV2:
- minecraft:plains
- minecraft:forest
這會允許結構在原版生態群系及其對應的自訂生態群系中生成,例如 terralith:brushland 對應 plains。仍須通過其他放置檢查。
空白或缺少的 validBiomesV2 清單會保留預設生成器內建的生態群系選擇,不會清除其限制。沒有內建生態群系的新自訂生成器,實際生效清單為空,因此允許所有生態群系。若要取代範本的選擇,請提供明確的非空清單。可以使用不帶命名空間的原版列舉名稱,但 namespace:key 更清楚;帶命名空間的項目會轉成小寫,卻不會檢查該生態群系是否存在。
映射表實際存放的位置
自訂生態群系對原版生態群系的映射表並非存放在 BetterStructures 中。它是一份寫死在 MagmaCore(內建於 BetterStructures 的共用函式庫)中的單一表格,並與其他需要它的 MagmaGuy 外掛共用。
這帶來兩個實際影響:
- 你在隨附的
generator_surface_*.yml檔案中看到的長串生態群系清單是產生出來的輸出,而非真正的來源。 載入時,BetterStructures 會讀取validBiomesV2,在 MagmaCore 表格中查找每個minecraft:項目,附加所有映射到它的自訂生態群系,然後將展開後的清單直接寫回生成器檔案。因此你原本只寫兩行的生成器,可能會變成上百行。編輯那份展開後的清單只會影響該生成器,而你保留在其中的任何minecraft:項目,在下次載入時仍會再次展開。 - 為所有人新增某個自訂生態群系的支援,屬於 MagmaCore 的變更,而非設定變更。 若某個世界生成器提供了 BetterStructures 無法辨識的生態群系,把它加進某個生成器的
validBiomesV2只是針對該生成器的本地權宜之計。要讓它被正確映射,必須將它加入 MagmaCore 的映射表,那是程式碼變更——請提出需求,而不要試圖在 yml 檔案中解決。
你也可以在 validBiomesV2 中直接指定自訂生態群系。非 minecraft: 命名空間會直接使用,不會繼續展開,適合只在某個特定自訂生態群系中生成結構的生成器。
被 MagmaCore 映射為 nothing 的生態群系會被刻意排除——它們是被認定為不適合放置結構的自訂生態群系,任何原版生態群系都不會把它們帶入。
treasureFilename
設定箱子戰利品的寶藏檔案。除非在 Schematic 設定 中覆蓋,否則這適用於使用此生成器的所有建築。
填充箱子前,生成器仍必須解析到有效的箱子寶藏設定。schematic 覆寫無法彌補生成器寶藏檔案缺少或無效的問題。無效的覆寫會產生警告,並回退到生成器的表。
generateLootInBarrels 與 barrelTreasureFilename
BetterStructures 現在將木桶視為與箱子並列的第二種戰利品容器。
generateLootInBarrels(預設true)控制此生成器所放置之結構內的木桶是否會被填入物品。將其設為false即可保留木桶原本的內容不被變動。barrelTreasureFilename(預設treasure_barrel_food.yml)決定在填充這些木桶時要 roll 哪個寶藏檔案。預設提供的是一個以食物為主、份量輕巧的戰利品表,但你可以將其指向任何寶藏檔案。
schematic 的 barrelTreasureFilename 可以覆寫戰利品表。生成器必須同時具有 generateLootInBarrels: true 和有效的木桶寶藏設定;schematic 覆寫無法繞過任一要求。無效的覆寫會產生警告,並回退到生成器的表。