教學:自訂世界生成

出自Minecraft Wiki
跳至導覽 跳至搜尋

本文章所述內容僅適用於Java版

對於數據包和模組創作者來説,自訂世界生成通常是十分複雜且困難的。要想創造出一個較為完善的世界,有必要參考原版中世界生成的方式。

本教學選取1.20.1中的部分原版世界生成檔案進行大致解讀,方便創作者閱讀和理解原版世界生成。

如何取得原版世界生成檔案[編輯 | 編輯原始碼]

1.19.322w42a及之後的版本,大部分世界生成檔案都可以在client.jar或server.jar的data/minecraft/目錄下找到。但在世界設定中並不包含原版主世界和地獄維度的生物羣落方案參數。

通過數據生成器可以直接生成所有原版數據包檔案,以及主世界和地獄維度的生物羣落方案參數。

你也可以在Slicedlime的github上取得22w42a以前的原版世界生成檔案,位於examples倉庫中。倉庫歷史中缺失的版本意味着在這些版本裏原版世界生成檔案沒有發生變動。

主世界最終密度函數[編輯 | 編輯原始碼]

主世界最終密度函數是位於worldgen/noise_settings/overworld.json內的final_density字段。

{ //主世界最終密度函數

"type": "minecraft:min",
"argument1":
{  //使其值更接近0,影響含水層各水域間分隔的生成,final_density的負值越小,分隔越不易生成
},
"argument2": "minecraft:overworld/caves/noodle"  //麪條洞穴

}


其中呼叫的用於決定地形表面高度和形狀的sloped_cheese位於data/minecraft/worldgen/density_function/overworld/sloped_cheese.json

{ //sloped_cheese

"type": "minecraft:add",
"argument1":
{  //乘上因子minecraft:overworld/factor以確定三維地形的位置。並使正值乘上4,以避免地形較深處受base_3d_noise的影響
},
"argument2": "minecraft:overworld/base_3d_noise"  //三維的雜訊,用於建立三維的地表

}

其中sloped_cheese中呼叫的用於決定一般地形表面高度的depth位於data/minecraft/worldgen/density_function/overworld/depth.json

{ //depth

"type": "minecraft:add",
"argument1":
{  //每下降1格,深度增加1128(0.0078125),在Y=128時為0
},
"argument2": "minecraft:overworld/offset"  //使用樣條函數,根據大陸性、侵蝕度和PV值決定地形的高度偏移

}

主世界地表規則[編輯 | 編輯原始碼]

主世界地表規則是位於worldgen/noise_settings/overworld.json內的surface_rule字段。

{ //主世界地表規則

"type": "minecraft:sequence",
"sequence": [
//基岩層
{
},
//表層(例如平原的草地和泥土)
{
},
//深板岩層
{
}
]

}

註釋[編輯 | 編輯原始碼]

盆地在地表規則加入前一直存在於所有生物羣落,在表層深度小於等於0時,地形的表面被直接移除,留下石頭裸露的盆地。而在地表規則加入以來,該地形特徵卻不知為何被限制在冰洋寒凍深海兩個生物羣落,並且在判斷水面時存在錯誤。在過去的盆地中,當方塊高出海平面時(Y>=63的方塊)為空氣,否則為冰或水(注意當時沒有含水層和雜訊洞穴)。而在目前的原版地表規則中則是在上方沒有水時為空氣,這可能會導致海岸邊出現流動的水。

另外,由於雕刻器程式碼中的一個錯誤,minecraft:water條件在雕刻器生成時的行為與地形生成時不一致。在地形生成時,offset值是相對於空氣與液體接觸面的偏移值(即空氣方塊的座標)。而在雕刻器生成時,offset值是相對於液體方塊座標的。而又因為雕刻器只在雕刻草地和菌絲時對下方的泥土應用地表規則,遊戲認為草地和菌絲上方不會有水,雕刻後草地和菌絲的位置可能為水,因此泥土上方最多只有一格深的水。因而offset值相當於是相對於泥土上表面的偏移值。

綜上所述,在地形生成時,offset值為0和-1效果相同,都只在上方沒有液體時條件成功。而在雕刻器生成時,offset值若為-1,條件永遠成功,無論上方有無液體。

在地表規則這個功能剛加入遊戲時(21w41a),開發人員沒有意識到雕刻器中的錯誤,在判斷上方是否有水時offset值被設為了-1。因而導致草地可以生成在水下。之後(21w43a和22w07a)為了解決這個問題,又在不能生成在水下的方塊外套了一層offset為0的minecraft:water條件。因此目前原版主世界地表規則稍顯混亂,但基本能夠按預期工作。

對於數據包和模組開發者來説,應避免把offset設為-1,以保證地形生成與雕刻器生成時行為相同。

生物羣落方案參數[編輯 | 編輯原始碼]

通過數據生成器,可以獲得主世界和地獄維度的生物羣落方案參數。生物羣落方案參數位於generated/reports/biome_parameters/檔案夾內,其中所定義的生物羣落生成在生物羣落頁面有詳細的解釋。

參見[編輯 | 編輯原始碼]

導覽[編輯 | 編輯原始碼]