我们本次尝试在Fabric 1.19.2中生成一个自定义的建筑。
效果展示
效果展示
效果展示
由于版本更新缘故,1.19的建筑生成将不涉及任何Java包的代码编写,只需要在数据包中对建筑生成进行自定义。
1.首先我们要使用游戏中的结构方块制作一个建筑,结构方块使用教程参考1.16.5自定义建筑生成的第一步:
我们将建筑保存为nbt文件
之后在开发包run\saves\建筑所在的存档\generated\你的modid\structures
的路径下找到该nbt文件:
2.来到数据包中,路径一般为src\main\resources\data\你的modid
:
新建structures包,将第一步中的nbt文件放入其中:
新建tags包 -> tags包中新建worldgen包 -> worldgen包中新建biome包 -> biome包中新建 -> has_structure包 -> 包中新建一个ggd.json
文件(名称和你的nbt建筑名称保持一致),用于指明我们的建筑会在什么地形生成:
ggd.json
{
"replace": false,
"_comment": "指明我们的建筑会在什么生物群系中生成,比如草原、沙漠、雪原等",
"values": [
"minecraft:plains",
"minecraft:snowy_plains",
"minecraft:sunflower_plains",
"minecraft:savanna"
]
}
新建 worldgen包 -> 包中分别新建三个文件夹structure
,structure_set
,template_pool
,可以参考上图:
之后在template_pool包中新建一个ggd包 -> ggd包中新建start_pool
,用于指定该建筑起始生成信息:
start_pool.json
{
"name": "re8joymod:ggd/start_pool",
"fallback": "minecraft:empty",
"elements": [
{
"weight": 1,
"element": {
//该建筑起始生成的nbt文件,也就是我们第一步中的那个文件名称
"location": "re8joymod:ggd",
"processors": "minecraft:empty",
"projection": "rigid",
"element_type": "minecraft:single_pool_element"
}
}
]
}
之后在structure包中新建我们的建筑文件ggd.json
ggd.json
{
"type": "minecraft:jigsaw",
//建筑起始生成池
"start_pool": "re8joymod:ggd/start_pool",
"size": 2,
"max_distance_from_center": 80,
//在什么群系中生成
"biomes": "#re8joymod:has_structure/ggd",
"step": "surface_structures",
"start_height": {
"absolute": 0
},
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"use_expansion_hack": false,
//建筑中可以生成什么生物
"spawn_overrides": {
"creature": {
"bounding_box": "piece",
"spawns": [
{
"type": "minecraft:parrot",
"weight": 1,
"minCount": 1,
"maxCount": 4
}
]
}
}
}
最后在structure_set包中新建文件ggd.json
,将该建筑集合放入其中:
ggd.json
{
"structures": [
{
//上面structure包中的建筑放进来,生成权重为1
"structure": "re8joymod:ggd",
"weight": 1
}
],
"placement": {
//修改这个建筑id,注意两个不同的建筑的salt值不要一样
"salt": 1642136453,
//两个相同建筑的间隔多大
"spacing": 20,
//这个值不要比spacing大
"separation": 6,
//随意向周围扩展生成这种建筑
"type": "minecraft:random_spread"
}
}
3.保存文件,运行游戏:
通过指令快速找到群系位置
/locate biome minecraft:群系名称