雷霆嘎巴LT
本帖最后由 雷霆嘎巴LT 于 2022-3-15 19:02 编辑

好的兄弟们,我们又来开始教程了,我打算啊,等我全部更新完了就搞个目录,方便你们阅读。



地形雕刻器

废话不多说,我们来看看wiki解释:
地形雕刻器(Carver)用于添加雕刻出的生物群系的区域,并用空气或液体代替。其以JSON文件的形式存储在数据包的data/<命名空间>/worldgen/configured_carver目录下。

em,没话可说啊,放代码吧。
  1. {
  2.   "type": cave",
  3.   "config":
  4.     "probability": 0.5
  5.   }
  6. }
复制代码
em,好短,我们看下解释哈
· type: 使用的洞穴种类,必须是以下中的一种:underwater_material"cave"(洞穴), "nether_cave"(下界洞穴), "canyon"(峡谷)、"underwater_canyon"(水下峡谷), 、"underwater_cave"(水下洞穴){
· config: 该地形雕刻器所使用的配置。
  · probability: 每区块尝试使用该地表雕刻器的概率,必须在0到1之间
啊这,没了



地表生成器
废话不多说,我们来看看wiki解释
地表生成器(Surface builder)控制地表的形状和其生成的方块。其以JSON文件的形式存储在数据包的data/<命名空间>/worldgen/configured_surface_builder目录下

em,没话可说,我们继续看代码吧。
  1. {
  2.   "type": "nether",
  3.   "config":{
  4.     "top_material": {
  5.       "Name": "minecraft:grass_block"
  6.       "Properties":{
  7.         "snowy": false
  8.       },
  9.     },
  10.     "under_material":{
  11.       "Name": "minecraft:grass_block"
  12.       "Properties":{
  13.         "snowy": false
  14.       },
  15.     },
  16.     "underwater_material":{
  17.       "Name": "minecraft:grass_block",
  18.       "Properties":{
  19.         "snowy": false
  20.       }
  21.     }
  22.   }
  23. }
复制代码
em......好像还是有点短诶,让我们上注释:
· type: 所使用的地表生成器的种类,必须是以下之一:"default"(默认),"mountain"(山地),"shattered_savanna"(破碎的热带草原),"gravelly_mountain"(砂砾山),"giant_tree_taiga", "swamp"(沼泽), "badlands"(恶地),"wooded_badlands"(繁茂的恶地),"eroded_badlands"(被风蚀的恶地),"frozen_ocean"(冻洋),"nether"(下界),"nether_forest"(绯红、诡异森林),"soul_sand_valley"(灵魂沙峡谷),"basalt_deltas"(玄武岩三角洲)或"nope"(无)。
· config: 配置项
  · top_material: 顶部方块
    · Name: 要使用的方块的ID,你也可以写"minecraft:air",然后就没有顶部方块了。
    · Properties: 状态配置,没有可以不用写
      · 状态
  · under_material: 基岩层所使用的方块。
    ·  Name: 要使用的方块的ID,你也可以写"minecraft:air",然后就没方块了。
    · Properties: 状态配置,没有可以不用写
      · 状态
  · underwater_material: 水的底部所使用的方块
    ·  Name: 要使用的方块的ID。
    · Properties: 状态配置,没有可以不用写
      · 状态
      
emm,又没了,我们接着讲



地物
老样子,咱们先看wiki解释:
地物(feature)是世界中独特的元素,如花、树木、矿脉等。配置的地物以JSON文件的形式存储在数据包的data/<命名空间>/worldgen/configured_feature目录下。

上代码,等下,阅读时我们首先要看两段数据类型:
方块状态声明(一共三种,分别是,还有运用到实际是缩进不要忘):
最为普通的一种,先把他命名为方块状态声明1(之后直接说就可以了)
  1. {
  2.   "type": # 方块状态声明类别,可以是"simple_state_provider"(普通)、"rotated_block_provider"(可旋转)中的一个。
  3.   "state":{
  4.      "Name": 方块的命名空间ID
  5.      "Properties":{ # 这个总所周知,没有是可以不填的。
  6.        属性
  7.      }
  8.    }
  9. }
复制代码
复式方块状态声明(我把他命名为方块状态声明2。
  1. {
  2.   "type": "minecraft:weighted_state_provider" # 这个是方块状态声明类别,他只能是这种。
  3.   "entries":[ # 列表,就相当于方块状态声明1的格式
  4.     {
  5.       "weight" # 这边是指出现的概率,填数字,数字越高出现概率越高(0~1)
  6.       "data": { # 方块状态声明&
  7.         "Name": # 方块命名空间ID",
  8.         "Properties": { # 这个总所周知,没有是可以不填的。
  9.           属性
  10.         }
  11.       }
  12.     },
  13.     {
  14.       "weight" # 这边是指出现的概率,填数字,数字越高出现概率越高(0~1)
  15.       "data": { # 方块状态声明&
  16.         "Name": # 方块命名空间ID",
  17.         "Properties": { # 这个总所周知,没有是可以不填的。
  18.           属性
  19.         }
  20.       }
  21.     }
复制代码
花朵方块状态声明,一共分为两种,普通("minecraft:plain_flower_provider"),森林("minecraft:forest_flower_provider"),没有配置项,统称为方块状态声明3

当然不止这个,还有一个均匀分布整数:
此数据结构代表一个在base到base + spread之间(含)的随机生成的整数,在上述区间内每个整数被抽取到的概率相同。spread必须大于等于0。额外的,不同的配置选项会在此处加上更多限制条件;这些限制条件会用minBase、maxBase和maxSpread表达。这些限制条件的边界都是取得到的。若没有声明这些限制条件,那么任意的base和非负的spread都是可接受的。或者,整个复合标签都可以被一个整型数据代替,这相当于将base设为该整数,将spread设为0,效果上等同于声明一个常量。此时,若minBase和maxBase存在,它们依然生效(有注明怎么样,就完全按说的填)。
正常情况下的结构为:
  1. {
  2.   Base: # 可生成的最小数字,
  3.   spread: # 生成随机数字的闭区间的大小
  4. }
复制代码
来,上代码,注释直接写代码里了,有多段代码(对应各种类型)
类别:树
  1. {
  2.   "type": "minecraft:tree", # 地物类型(树)
  3.   "config": { # 地物配置
  4.     "trunk_provider": { # 树干部分,注意当树干放置器为"fancy_trunk_placer"时,须使用含xyz标签的方块,如原木。
  5.       方块声明结构1或方块声明结构2
  6.     },
  7.     "leaves_provider": { # 树叶部分
  8.       方块声明结构1或方块声明结构2,
  9.     },
  10.     "foliage_placer": { # 树叶生成方式
  11.       "radius": { # 半径
  12.         均匀分布整数,其中minBase为0,maxBase为8,maxSpread为8。
  13.       },
  14.       "offset": {
  15.         均匀分布整数,其中minBase为0,maxBase为8,maxSpread为8。
  16.       },
  17.       "type": # 树叶生成器类型,必须为"blob_foliage_placer"(通常的橡树树叶和白桦),"spruce_foliage_placer"(云杉树叶型),"pine_foliage_placer"(稀疏云杉树叶型),"acacia_foliage_placer"(金合欢树叶型),"bush_foliage_placer"(金字塔型),"fancy_foliage_placer"(球形树叶),"jungle_foliage_placer"(丛林树型),"mega_pine_foliage_placer"(双层稀疏云杉树叶型), "dark_oak_foliage_placer"(深色橡树树叶型)。
  18.       #如果type是blob_foliage_placer, bush_foliage_placer, fancy_foliage_placer, 或jungle_foliage_placer:
  19.       #height: 影响树叶的高度与宽度,单位是方块。 取值必须为0到16(含0和16)。
  20.       #如果type是spruce_foliage_placer:
  21.       #trunk_height: {
  22.         #均匀分布整数,其中minBase为0,maxBase为16,maxSpread为8。
  23.       #}
  24.       #如果type是pine_foliage_placer:
  25.       #height: {
  26.         #均匀分布整数,其中minBase为0,maxBase为16,maxSpread为8。
  27.       #}
  28.       #如果type是mega_pine_foliage_placer:
  29.       #crown_height: {
  30.         #均匀分布整数,其中minBase为0,maxBase为16,maxSpread为8。
  31.       #}
  32.     },
  33.     "trunk_placer": { # 控制树干的生成方式。
  34.       "type": # 树干放置器的类型,必须为下列值之一:"straight_trunk_placer"(竖直形),"forking_trunk_placer"(单分叉型),"giant_trunk_placer"(2×2竖直型),"mega_jungle_trunk_placer"(大丛林木型),"dark_oak_trunk_placer"(深色橡木型)或"fancy_trunk_placer"(多分叉型)。
  35.       "base_height": # 高,取值必须为0到32(含0和32)。
  36.        "height_rand_a": # 与水平分叉有关的随机高度,取值必须为0到24(含0和24)。
  37.        "height_rand_b": # 与竖直分叉有关的随机高度,取值必须为0到24(含0和24)。
  38.      },
  39.      "minimum_size": { #最小尺寸
  40.        "min_clipped_height": # (可选)0-80 之间的整数,最小剪切高度
  41.        "type": # 必须为"two_layers_feature_size"(两层)或"three_layers_feature_size"(三层)
  42.        #如果type是two_layers_feature_size:
  43.        #"limit": (可选)极限尺寸,取值必须为0到81(含0和81)。若不填写,默认值为1。
  44.        #"lower_size": (可选)最小尺寸取值必须为0到16(含0和16)。若不填写,默认值为0。
  45.        #"upper_size": (可选)最大尺寸,取值必须为0到16(含0和16),若不填写,默认值为1。
  46.        #如果type是three_layers_feature_size:
  47.        #"limit": (可选)极限尺寸,取值必须为0到80(含0和80),若不填写,默认值为1。
  48.        #"upper_limit": (可选)上限,取值必须为0到80(含0和80),若不填写,默认值为1。
  49.        #"lower_size": (可选)最小尺寸,取值必须为0到16(含0和16),若不填写,默认值为0。
  50.        #"middle_size": (可选)中等尺寸,取值必须为0到16含0和16),若不填写,默认值为1。
  51.        #upper_size: (可选)最大尺寸,取值必须为0到16(含0和16),若不填写,默认值为1。
  52.      },
  53.      "decorators": [ #装饰列表
  54.       {
  55.         "type": #装饰类型,分别有"minecraft:trunk_vine"(树干藤蔓),"minecraft:leave_vine"(树叶藤蔓),"minecraft:cocoa"(可可豆),"minecraft:beehive"(蜂巢),"minecraft:alter_ground"(替换地面)
  56.         #如果type是cocoa或beehive:
  57.         #probability: 取值必须为0到1的浮点数(含0和1(
  58.         #如果type是alter_ground:
  59.         #provider: { 用于替换地面的方块。
  60.           #方块状态声明1或方块状态声明2
  61.         #}
  62.       },
  63.       { # 这里是重复的,目的是体现这里的装饰可以有多个
  64.         "type": #装饰类型,分别有"minecraft:trunk_vine"(树干藤蔓),"minecraft:leave_vine"(树叶藤蔓),"minecraft:cocoa"(可可豆),"minecraft:beehive"(蜂巢),"minecraft:alter_ground"(替换地面)
  65.         #如果type是cocoa或beehive:
  66.         #probability: 取值必须为0到1的浮点数(含0和1(
  67.         #如果type是alter_ground:
  68.         #provider: { 用于替换地面的方块。
  69.           #方块状态声明1或方块状态声明2
  70.         #}
  71.       },
  72.     ],
  73.     "max_water_depth": # (可选)树在水下最大可生成深度,若不填写,默认值为0。
  74.     "ignore_vines": # (可选)时候忽略藤蔓
  75.     "heightmap": # 高度,不用管他,直接从下面几个选一个必须是"WORLD_SURFACE_WG"(地表面(世界生成))、"WORLD_SURFACE"(地表面)、"OCEAN_FLOOR_WG"(海床面(世界生成))、"OCEAN_FLOOR"(海床面)、"MOTION_BLOCKING"(阻挡实体运动面)或"MOTION_BLOCKING_NO_LEAVES"(阻挡实体运动面(不含树叶))中的一个。
  76.   }
  77. }
复制代码
类别:花或随机堆
  1. {
  2.   "type": "minecraft:flower" # 地物类别,也可以是"minecraft:random_patch"
  3.   "config": {
  4.     "state_provider": { # 要使用的方块
  5.       方块状态声明或方块状态声明2
  6.     },
  7.     "block_placer": { # 方块放置器
  8.       "type": 要使用的方块放置器的类型。必须为这几种类型:"simple_block_placer"(单个),"double_plant_placer"大型花)(或"column_placer"(柱子)。
  9.       #如果type是column_placer:
  10.       # min_size: 最小尺寸
  11.       #extra_size: 额外尺
  12.      },
  13.     "whitelist": [ # 白名单,不填的话就留空
  14.       {
  15.         "Name": "minecraft:grass_block" #这个就不注释了吧,大家都懂
  16.         "Properties":{
  17.           "snowy"false
  18.         }
  19.       },
  20.       {
  21.         "Name": "minecraft:stone"
  22.       }
  23.     ],
  24.     "blacklist":[ # 黑名单,不填的话就留空
  25.       {
  26.         "Name": "diamond_ore"
  27.       },
  28.       {
  29.         "Name": "minecraft:dirt"
  30.       }
  31.     ],
  32.     "tries": # (可选,默认值:128)数值,尝试次数
  33.     "yspread": # (可选,默认值:3)数值,y轴扩散范围
  34.     "zspread": # (可选,默认值:7)数值,z轴扩散范围
  35.     "xspread": # (可选,默认值:7)数值,x轴扩散范围
  36.     "can_replace": # (可选,默认值false)是否替换原方块
  37.     "project": # (可选,默认值:true)
  38.     "need_water": # (可选,默认值:false)是否需要水
  39.   }
  40. }
复制代码
类别:方块堆,诡异/绯红森林草
  1. {
  2.   "type": "minecraft:block_pile" # 地物类别,这里我选"方块堆",也可以是minecraft:nether_forest_vegetation"(下界森林草)
  3.   "config": {
  4.     "state_provider": { # 要使用的方块
  5.       方块状态声明1及2
  6.     }
  7.   }
  8. }
复制代码
类别:涌泉
  1. {
  2.   "type": "minecraftspring_feature",
  3.   "config": {
  4.     "state": { #生成涌泉所需要用到的液体
  5.       "Name": # 该液体的命名空间ID。
  6.       "Properties": { # 液体的状态。
  7.         状态
  8.       }
  9.     },
  10.     "requires_block_below": # (可选,默认值:true)下方是否需要方块
  11.     "rock_count": # (可选,默认值:4)岩石数量
  12.     "hole_count": # (可选,默认值:1)孔的数量
  13.     "valid_blocks": [ # 方块列表
  14.       "Name": #方块ID
  15.       "Name": #可以多个
  16.     ],
  17.   }
  18. }
复制代码
类别:绿宝石矿
  1. {
  2.   "type": "minecraft:emerald_ore",
  3.   "config": {
  4.     "target": { # 目标方块
  5.       "Name": # 该方块的命名空间ID。
  6.       "Properties": { # 方块的方块状态。
  7.         状态
  8.       }
  9.     },
  10.     "state": { #本身方块
  11.       "Name": # 该方块的命名空间ID。
  12.       "Properties": { # 方块的方块状态。
  13.         状态
  14.       }
  15.     },
  16.   }
  17. }
复制代码
类别:冰或森林岩石或湖
  1. {
  2.   "type": "minecraft:iceberg", # 也可以是forest_rock(森林岩石)或lake(湖)
  3.   "config": {
  4.     "state":{ #要使用的方块
  5.       "Name": #方块ID
  6.       "Properties": { # 该方块的所有方块状态
  7.         状态
  8.       }
  9.     }
  10.   }
  11. }
复制代码
类别:大型红色蘑菇或大型棕色蘑菇
  1. {  
  2.   "type": "minecraft:huge_red_mushroom", # 也可以是huge_brown_mushroom(大型棕色蘑菇)
  3.   "config": {
  4.     "cap_provider": { # 顶部方块
  5.       方块状态声明1和2
  6.     },
  7.     "stem_provider": { # 柄部方块
  8.       方块状态声明1和2
  9.     },
  10.     "foliage_radius": # (可选,默认值:2)顶部大小
  11.   }
  12. }
复制代码



真的太多了,实在没法一一列举,可以去中文百科查阅哦。
那么,这篇就到此了吧。
下期预告:结构地物
如果发现错误请告诉我。
参考资料来源:
Minecraft中文wikiMC百科

无烟
666666666666666

LeicaCat
差点就看懂了,就差亿点

x_sonner
mcbbs有你更精彩

ruhuasiyu
适用版本都不写的吗?

雷霆嘎巴LT
ruhuasiyu 发表于 2022-3-23 18:33
适用版本都不写的吗?

当然是以最新版本为准啊!

ruhuasiyu
本帖最后由 ruhuasiyu 于 2022-3-24 08:52 编辑
雷霆嘎巴LT 发表于 2022-3-23 19:05
当然是以最新版本为准啊!

那你知不知道wiki上根本还没更新到最新版本


3412968801
差一点就看懂了

奇葩~
我一直好奇数据包能实现添加新方块吗

雷霆嘎巴LT
奇葩~ 发表于 2022-4-19 14:36
我一直好奇数据包能实现添加新方块吗

添加方块做不到,但能修改一个方块到无限接近于新方块,再搭配上Custom model data标签通过材质包几乎就是个新方块

1004062852
感谢大佬教学,学到了学到了

Dinawa
刚看完十就来看十一了 感觉讲得很细

BNDSER
好耶,有大佬!正在努力学习中…

SuYing1
那个版本都可以?

割藕狗
牛啊,虽然我看不懂

2263942505
6666666666666

钩远贪
本帖最后由 钩远贪 于 2022-5-7 10:26 编辑

大佬…太强了…
甚至注释全都写了一步不漏…吾辈楷模关于“花朵方块状态声明,一共分为两种,普通("minecraft:plain_flower_provider"),森林("minecraft:forest_flower_provider")”这一部分,是由群系决定的吗?

kxy2005214
谢谢楼主了

雷霆嘎巴LT
钩远贪 发表于 2022-5-7 10:25
大佬…太强了…
甚至注释全都写了一步不漏…吾辈楷模关于“花朵方块状态声明,一共分为两种,普通("minecra ...

就是什么个样式的,普通的就是类似于草原上的花朵啊,你看普遍都是一格高嘛,森林它就有两个高的和一格高的嘛,就类似与这个

似潇game
6666666666666666

买了个表~
一开始看见数据包的时候真的觉得这玩意好吊,没想到现在已经走到我们身边了

waiting9887
说实话,写的很细了