這是適用于Minecraft Java版1.21.4的Fabric模組開發系列教程專欄第十九章——自定義生物群系。想要閱讀其他內容,請查看或訂閱上面的專欄。
生物群系(Biome) 是Minecraft中世界不同區域呈現特定的地貌景觀,這些區域與現實世界類似,都具有和其他區域不同的地理特征,如地表方塊、溫度、濕度以及海拔高度等。當然,處于下界和末地的部分生物群系不存在于現實世界。據統計,原版游戲中大約有80個生物群系。
生物群系的加入需要在創建維度(Dimension) 之后進行。我們可以將自定義生物群系加入到原版游戲中的維度中,也可以將生物群系加入到自定義維度,因此,想要將生物群系加入到維度,需要有一定的維度系列JSON編寫能力。更多信息可以參考我的世界Java版1.21.4的Fabric模組開發教程(十七)自定義維度。
生物群系是地物(Feature) 生成的基礎。所有地物的生成需要在生物群系JSON中配置。關于結構和地物的相關概念將在后續章節推出。
創建生物群系定義JSON
生物群系定義JSON用于定義生物群系的諸多屬性,是創建生物群系的核心文件,也是創建生物群系需要的唯一JSON。
生物群系定義JSON應當位于(generated)/data/{mod-id}/worldgen/biome
目錄中,文件名為生物群系的命名空間ID。整個文件中的配置項應當包含在一個根對象{}
內,它們包括:
“carvers”
:指定可以在生物群系中生成的雕刻器。提供一個以#
開頭的雕刻器標簽、雕刻器命名空間ID,或者寫成一個數組,其中提供一個雕刻器命名空間ID的列表。該項為必選項,但可以為空;“downfall”
:指定生物群系的降水值,提供單精度型數據,即float。此值和“temperature”
的值共同影響植物顏色;“effects”
:指定生物群系的環境效果。需要寫成一個對象,所有的配置項都需要提供一個十進制的RGB顏色值,包括:“fog_color”
:指定迷霧顏色;“sky_color”
:指定天空顏色;“water_color”
:指定水體顏色;“water_fog_color”
:指定水下迷霧顏色;
以上配置項為必選項,更多配置項請參考官方Wiki;
“features”
:指定在該生物群系放置的地物。需要寫成一個數組,其中的每一個配置項都代表地物放置的一個階段,且都需要寫成一個數組,其中的值為該階段需要放置的地物。地物的放置是有序的,且僅有11個階段,包括:RAW_GENERATION
:原始生成;LAKES
:湖;LOCAL_MODIFICATIONS
:本地修改;UNDERGROUND_STRUCTURES
:地下結構;SURFACE_STRUCTURES
:地表結構;STRONGHOLDS
:要塞;UNDERGROUND_ORES
:地下礦物;UNDERGROUND_DECORATION
:地下裝飾;FLUID_SPRINGS
:涌泉;VEGETAL_DECORATION
:植被裝飾TOP_LAYER_MODIFICATION
:頂層修改;
所有的階段都可以為空,但必須提供一個空的數組作為該階段的值。每個階段中的地物放置也是有順序的;
“has_precipitation”
:指定生物群系是否有降水,提供一個布爾值;“spawn_costs”
:指定生物群系中生物的生成代價,亦稱生成勢,用于控制生物生成的密度,寫成一個數組,其中的每一項是某個實體的生成代價對象。該項為必選項,但可以為空;“spawners”
:指定生物群系以類別的形式進行生物生成,需要寫成一個對象,其中的每個配置項都是一個類別,需要寫成一個數組,這樣的數組共有8個,包括:“ambient”
:環境生物;“axolotls”
:美西螈;“creature”
:動物;“misc”
:其他;“monster”
:怪物;“underground_water_creature”
:地下水生生物;“water_ambient”
:水下環境生物;“water_creature”
:水生生物;
如果不需要生成指定類別的實體,則可以不添加該類別的配置項,或將配置項設置為一個空數組。每個類別中可以添加多個實體對象,每個對象的名稱應當為該實體的命名空間ID,并在其中提供以下必選的配置項:“type”
:指定實體的命名空間ID;“weight”
:指定實體的生成權重;“minCount”
:指定實體成群生成時的最低數量,取值不得小于0;“maxCount”
:指定實體成群生成時的最高數量,取值不得小于0;
更多配置項請參考官方Wiki;
“temperature”
:指定生物群系的溫度值,提供單精度型數據,即float。此值和“downfall”
的值共同影響植物顏色。
關于部分配置項的詳細信息,請參考生物群系定義格式 - 中文 Minecraft Wiki。此外,還要注意兩點:
不是所有實體都能加入到生物群系實體生成列表的類別中。所有實體都有自己獨有的類別。在“spawners”
配置項中,將實體加入到錯誤的類別時,實體不會生成或被直接替換為“豬(minecraft:pig)”。另外,有些實體不能自然生成在生物群系中,即不能加入到“spawners”
配置項的任何一個類別之中,即使在所有類別中都添加該實體的命名空間ID,實體也不會自然生成。
例如,將雪傀儡(minecraft:snow_golem)添加到“spawners”
配置項的“creature”
類別中,會導致其被替換為豬,但數量和權重等其他配置保持不變。
關于生物類別,更多信息可以參考生成 - 中文 Minecraft Wiki。
不是所有地物都能加入到生物群系中。 所有地物都有屬于自己的生成階段。在“features”
配置項中,將地物添加到錯誤的生成階段時,地物不會在生物群系中生成。另外,有些地物的生成是有順序的,在某個階段中添加地物的命名空間ID時需要按照一定的順序,否則地物同樣不會生成。而且,有些地物的生成需要條件,尤其是某些生成在地表的地物,對使用了噪聲型區塊生成器維度的表面規則有著嚴格的要求,地表被維度的噪聲設置JSON控制而覆蓋了錯誤的方塊時,地物同樣不會生成。
例如,將冰刺(minecraft:ice_spike)添加到“features”
配置項的SURFACE_STRUCTURES
類別中,會發現生物群系中沒有冰刺生成,這是因為冰刺要求在雪塊(minecraft:snow_block)上生成。即使將生物群系的溫度降低,又或者通過噪聲設置JSON修改表面規則使生物群系表面生成覆雪草方塊,由于其本質始終為草方塊(minecraft:grass_block),而并非雪塊,冰刺始終不會在生物群系中生成。
下面這個例子添加了一個具有指定的環境效果、會在地面上生成杜鵑花樹(minecraft:rooted_azalea_tree)且會自然生成貓(minecraft:cat)的生物群系:
{"carvers": [],"downfall": 0.0,"effects": {"fog_color": 12638463,"sky_color": 7254527,"water_color": 4159204,"water_fog_color": 329011},"features": [[],["minecraft:lake_lava_underground","minecraft:lake_lava_surface"],[],[],[],[],[],[],[],["minecraft:rooted_azalea_tree"],["minecraft:freeze_top_layer"]],"has_precipitation": false,"spawn_costs": {},"spawners": {"creature": [{"type": "minecraft:cat","maxCount": 5,"minCount": 1,"weight": 100}]},"temperature": 1.0
}
然后將生物群系加入到維度中:
{"type": "test:new_dimension","generator": {"type": "minecraft:noise","biome_source":{"type": "minecraft:fixed","biome": "test:test_biome"},"settings":"test:new_dimension"}
}
需要使用生物群系的命名空間IDtest:test_biome
,這里使用了噪聲型區塊生成器,生物群系源為固定型。啟動游戲,使用命令或傳送門來到新維度,可以看到生物群系的設置均已生效;
也可以將生物群系加入原版游戲的維度中,可能需要使用到第三方庫。
本章小結
本章詳細闡述了創建自定義生物群系JSON的編寫過程,并提供了可供調試的例子,是創建自定義生物群系的入門級教程。本文總體難度不大,篇幅適中,但文件中的配置項比較繁雜,一些配置項要求嚴格,仍需要開發者細心學習。感謝各位的閱讀,有興趣可以訂閱此專欄!