教程:自定义世界生成

来自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/文件夹内,其中所定义的生物群系生成在生物群系页面有详细的解释。

参见[编辑 | 编辑源代码]

导航[编辑 | 编辑源代码]