本帖最后由 雷霆嘎巴LT 于 2022-3-15 19:02 编辑 
好的兄弟们,我们又来开始教程了,我打算啊,等我全部更新完了就搞个目录,方便你们阅读。
地形雕刻器
废话不多说,我们来看看wiki解释:
地形雕刻器(Carver)用于添加雕刻出的生物群系的区域,并用空气或液体代替。其以JSON文件的形式存储在数据包的data/<命名空间>/worldgen/configured_carver目录下。
em,没话可说啊,放代码吧。
复制代码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,没话可说,我们继续看代码吧。
复制代码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(之后直接说就可以了)
复制代码复式方块状态声明(我把他命名为方块状态声明2。
复制代码花朵方块状态声明,一共分为两种,普通("minecraft:plain_flower_provider"),森林("minecraft:forest_flower_provider"),没有配置项,统称为方块状态声明3
当然不止这个,还有一个均匀分布整数:
此数据结构代表一个在base到base + spread之间(含)的随机生成的整数,在上述区间内每个整数被抽取到的概率相同。spread必须大于等于0。额外的,不同的配置选项会在此处加上更多限制条件;这些限制条件会用minBase、maxBase和maxSpread表达。这些限制条件的边界都是取得到的。若没有声明这些限制条件,那么任意的base和非负的spread都是可接受的。或者,整个复合标签都可以被一个整型数据代替,这相当于将base设为该整数,将spread设为0,效果上等同于声明一个常量。此时,若minBase和maxBase存在,它们依然生效(有注明怎么样,就完全按说的填)。
正常情况下的结构为:
复制代码来,上代码,注释直接写代码里了,有多段代码(对应各种类型)
类别:树
复制代码类别:花或随机堆
复制代码类别:方块堆,诡异/绯红森林草
复制代码类别:涌泉
复制代码类别:绿宝石矿
复制代码类别:冰或森林岩石或湖
复制代码类别:大型红色蘑菇或大型棕色蘑菇
复制代码
真的太多了,实在没法一一列举,可以去中文百科查阅哦。
那么,这篇就到此了吧。
下期预告:结构地物
如果发现错误请告诉我。
参考资料来源:
Minecraft中文wiki;MC百科
好的兄弟们,我们又来开始教程了,我打算啊,等我全部更新完了就搞个目录,方便你们阅读。
地形雕刻器
废话不多说,我们来看看wiki解释:
地形雕刻器(Carver)用于添加雕刻出的生物群系的区域,并用空气或液体代替。其以JSON文件的形式存储在数据包的data/<命名空间>/worldgen/configured_carver目录下。
em,没话可说啊,放代码吧。
- {
 
-   "type": cave",
 
-   "config":
 
-     "probability": 0.5
 
-   }
 
- }
· 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,没话可说,我们继续看代码吧。
- {
 
-   "type": "nether",
 
-   "config":{
 
-     "top_material": {
 
-       "Name": "minecraft:grass_block"
 
-       "Properties":{
 
-         "snowy": false
 
-       },
 
-     },
 
-     "under_material":{
 
-       "Name": "minecraft:grass_block"
 
-       "Properties":{
 
-         "snowy": false
 
-       },
 
-     },
 
-     "underwater_material":{
 
-       "Name": "minecraft:grass_block",
 
-       "Properties":{
 
-         "snowy": false
 
-       }
 
-     }
 
-   }
 
- }
· 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(之后直接说就可以了)
- {
 
-   "type": # 方块状态声明类别,可以是"simple_state_provider"(普通)、"rotated_block_provider"(可旋转)中的一个。
 
-   "state":{
 
-      "Name": 方块的命名空间ID
 
-      "Properties":{ # 这个总所周知,没有是可以不填的。
 
-        属性
 
-      }
 
-    }
 
- }
- {
 
-   "type": "minecraft:weighted_state_provider" # 这个是方块状态声明类别,他只能是这种。
 
-   "entries":[ # 列表,就相当于方块状态声明1的格式
 
-     {
 
-       "weight" # 这边是指出现的概率,填数字,数字越高出现概率越高(0~1)
 
-       "data": { # 方块状态声明&
 
-         "Name": # 方块命名空间ID",
 
-         "Properties": { # 这个总所周知,没有是可以不填的。
 
-           属性
 
-         }
 
-       }
 
-     },
 
-     {
 
-       "weight" # 这边是指出现的概率,填数字,数字越高出现概率越高(0~1)
 
-       "data": { # 方块状态声明&
 
-         "Name": # 方块命名空间ID",
 
-         "Properties": { # 这个总所周知,没有是可以不填的。
 
-           属性
 
-         }
 
-       }
 
- }
当然不止这个,还有一个均匀分布整数:
此数据结构代表一个在base到base + spread之间(含)的随机生成的整数,在上述区间内每个整数被抽取到的概率相同。spread必须大于等于0。额外的,不同的配置选项会在此处加上更多限制条件;这些限制条件会用minBase、maxBase和maxSpread表达。这些限制条件的边界都是取得到的。若没有声明这些限制条件,那么任意的base和非负的spread都是可接受的。或者,整个复合标签都可以被一个整型数据代替,这相当于将base设为该整数,将spread设为0,效果上等同于声明一个常量。此时,若minBase和maxBase存在,它们依然生效(有注明怎么样,就完全按说的填)。
正常情况下的结构为:
- {
 
-   Base: # 可生成的最小数字,
 
-   spread: # 生成随机数字的闭区间的大小
 
- }
类别:树
- {
 
-   "type": "minecraft:tree", # 地物类型(树)
 
-   "config": { # 地物配置
 
-     "trunk_provider": { # 树干部分,注意当树干放置器为"fancy_trunk_placer"时,须使用含xyz标签的方块,如原木。
 
-       方块声明结构1或方块声明结构2
 
-     },
 
-     "leaves_provider": { # 树叶部分
 
-       方块声明结构1或方块声明结构2,
 
-     },
 
-     "foliage_placer": { # 树叶生成方式
 
-       "radius": { # 半径
 
-         均匀分布整数,其中minBase为0,maxBase为8,maxSpread为8。
 
-       },
 
-       "offset": {
 
-         均匀分布整数,其中minBase为0,maxBase为8,maxSpread为8。
 
-       },
 
-       "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"(深色橡树树叶型)。
 
-       #如果type是blob_foliage_placer, bush_foliage_placer, fancy_foliage_placer, 或jungle_foliage_placer:
 
-       #height: 影响树叶的高度与宽度,单位是方块。 取值必须为0到16(含0和16)。
 
-       #如果type是spruce_foliage_placer:
 
-       #trunk_height: {
 
-         #均匀分布整数,其中minBase为0,maxBase为16,maxSpread为8。
 
-       #}
 
-       #如果type是pine_foliage_placer:
 
-       #height: {
 
-         #均匀分布整数,其中minBase为0,maxBase为16,maxSpread为8。
 
-       #}
 
-       #如果type是mega_pine_foliage_placer:
 
-       #crown_height: { 
 
-         #均匀分布整数,其中minBase为0,maxBase为16,maxSpread为8。
 
-       #}
 
-     },
 
-     "trunk_placer": { # 控制树干的生成方式。
 
-       "type": # 树干放置器的类型,必须为下列值之一:"straight_trunk_placer"(竖直形),"forking_trunk_placer"(单分叉型),"giant_trunk_placer"(2×2竖直型),"mega_jungle_trunk_placer"(大丛林木型),"dark_oak_trunk_placer"(深色橡木型)或"fancy_trunk_placer"(多分叉型)。
 
-       "base_height": # 高,取值必须为0到32(含0和32)。
 
-        "height_rand_a": # 与水平分叉有关的随机高度,取值必须为0到24(含0和24)。
 
-        "height_rand_b": # 与竖直分叉有关的随机高度,取值必须为0到24(含0和24)。
 
-      },
 
-      "minimum_size": { #最小尺寸
 
-        "min_clipped_height": # (可选)0-80 之间的整数,最小剪切高度
 
-        "type": # 必须为"two_layers_feature_size"(两层)或"three_layers_feature_size"(三层)
 
-        #如果type是two_layers_feature_size:
 
-        #"limit": (可选)极限尺寸,取值必须为0到81(含0和81)。若不填写,默认值为1。
 
-        #"lower_size": (可选)最小尺寸取值必须为0到16(含0和16)。若不填写,默认值为0。
 
-        #"upper_size": (可选)最大尺寸,取值必须为0到16(含0和16),若不填写,默认值为1。
 
-        #如果type是three_layers_feature_size:
 
-        #"limit": (可选)极限尺寸,取值必须为0到80(含0和80),若不填写,默认值为1。
 
-        #"upper_limit": (可选)上限,取值必须为0到80(含0和80),若不填写,默认值为1。
 
-        #"lower_size": (可选)最小尺寸,取值必须为0到16(含0和16),若不填写,默认值为0。
 
-        #"middle_size": (可选)中等尺寸,取值必须为0到16含0和16),若不填写,默认值为1。
 
-        #upper_size: (可选)最大尺寸,取值必须为0到16(含0和16),若不填写,默认值为1。
 
-      },
 
-      "decorators": [ #装饰列表
 
-       {
 
-         "type": #装饰类型,分别有"minecraft:trunk_vine"(树干藤蔓),"minecraft:leave_vine"(树叶藤蔓),"minecraft:cocoa"(可可豆),"minecraft:beehive"(蜂巢),"minecraft:alter_ground"(替换地面)
 
-         #如果type是cocoa或beehive:
 
-         #probability: 取值必须为0到1的浮点数(含0和1(
 
-         #如果type是alter_ground:
 
-         #provider: { 用于替换地面的方块。
 
-           #方块状态声明1或方块状态声明2
 
-         #}
 
-       },
 
-       { # 这里是重复的,目的是体现这里的装饰可以有多个
 
-         "type": #装饰类型,分别有"minecraft:trunk_vine"(树干藤蔓),"minecraft:leave_vine"(树叶藤蔓),"minecraft:cocoa"(可可豆),"minecraft:beehive"(蜂巢),"minecraft:alter_ground"(替换地面)
 
-         #如果type是cocoa或beehive:
 
-         #probability: 取值必须为0到1的浮点数(含0和1(
 
-         #如果type是alter_ground:
 
-         #provider: { 用于替换地面的方块。
 
-           #方块状态声明1或方块状态声明2
 
-         #}
 
-       },
 
-     ],
 
-     "max_water_depth": # (可选)树在水下最大可生成深度,若不填写,默认值为0。
 
-     "ignore_vines": # (可选)时候忽略藤蔓
 
-     "heightmap": # 高度,不用管他,直接从下面几个选一个必须是"WORLD_SURFACE_WG"(地表面(世界生成))、"WORLD_SURFACE"(地表面)、"OCEAN_FLOOR_WG"(海床面(世界生成))、"OCEAN_FLOOR"(海床面)、"MOTION_BLOCKING"(阻挡实体运动面)或"MOTION_BLOCKING_NO_LEAVES"(阻挡实体运动面(不含树叶))中的一个。
 
-   }
 
- }
- {
 
-   "type": "minecraft:flower" # 地物类别,也可以是"minecraft:random_patch"
 
-   "config": {
 
-     "state_provider": { # 要使用的方块
 
-       方块状态声明或方块状态声明2
 
-     },
 
-     "block_placer": { # 方块放置器
 
-       "type": 要使用的方块放置器的类型。必须为这几种类型:"simple_block_placer"(单个),"double_plant_placer"大型花)(或"column_placer"(柱子)。
 
-       #如果type是column_placer:
 
-       # min_size: 最小尺寸
 
-       #extra_size: 额外尺
 
-      },
 
-     "whitelist": [ # 白名单,不填的话就留空
 
-       {
 
-         "Name": "minecraft:grass_block" #这个就不注释了吧,大家都懂
 
-         "Properties":{
 
-           "snowy"false
 
-         }
 
-       },
 
-       {
 
-         "Name": "minecraft:stone"
 
-       }
 
-     ],
 
-     "blacklist":[ # 黑名单,不填的话就留空
 
-       {
 
-         "Name": "diamond_ore"
 
-       },
 
-       {
 
-         "Name": "minecraft:dirt"
 
-       }
 
-     ],
 
-     "tries": # (可选,默认值:128)数值,尝试次数
 
-     "yspread": # (可选,默认值:3)数值,y轴扩散范围
 
-     "zspread": # (可选,默认值:7)数值,z轴扩散范围
 
-     "xspread": # (可选,默认值:7)数值,x轴扩散范围
 
-     "can_replace": # (可选,默认值false)是否替换原方块
 
-     "project": # (可选,默认值:true)
 
-     "need_water": # (可选,默认值:false)是否需要水
 
-   }
 
- }
- {
 
-   "type": "minecraft:block_pile" # 地物类别,这里我选"方块堆",也可以是minecraft:nether_forest_vegetation"(下界森林草)
 
-   "config": {
 
-     "state_provider": { # 要使用的方块
 
-       方块状态声明1及2
 
-     }
 
-   }
 
- }
- {
 
-   "type": "minecraftspring_feature",
 
-   "config": {
 
-     "state": { #生成涌泉所需要用到的液体
 
-       "Name": # 该液体的命名空间ID。
 
-       "Properties": { # 液体的状态。
 
-         状态
 
-       }
 
-     },
 
-     "requires_block_below": # (可选,默认值:true)下方是否需要方块
 
-     "rock_count": # (可选,默认值:4)岩石数量
 
-     "hole_count": # (可选,默认值:1)孔的数量
 
-     "valid_blocks": [ # 方块列表
 
-       "Name": #方块ID
 
-       "Name": #可以多个
 
-     ],
 
-   }
 
- }
- {
 
-   "type": "minecraft:emerald_ore",
 
-   "config": {
 
-     "target": { # 目标方块
 
-       "Name": # 该方块的命名空间ID。
 
-       "Properties": { # 方块的方块状态。
 
-         状态
 
-       }
 
-     },
 
-     "state": { #本身方块
 
-       "Name": # 该方块的命名空间ID。
 
-       "Properties": { # 方块的方块状态。
 
-         状态
 
-       }
 
-     },
 
-   }
 
- }
- {
 
-   "type": "minecraft:iceberg", # 也可以是forest_rock(森林岩石)或lake(湖)
 
-   "config": {
 
-     "state":{ #要使用的方块
 
-       "Name": #方块ID
 
-       "Properties": { # 该方块的所有方块状态
 
-         状态
 
-       }
 
-     }
 
-   }
 
- }
- {  
 
-   "type": "minecraft:huge_red_mushroom", # 也可以是huge_brown_mushroom(大型棕色蘑菇)
 
-   "config": {
 
-     "cap_provider": { # 顶部方块
 
-       方块状态声明1和2
 
-     },
 
-     "stem_provider": { # 柄部方块
 
-       方块状态声明1和2
 
-     },
 
-     "foliage_radius": # (可选,默认值:2)顶部大小
 
-   }
 
- }
真的太多了,实在没法一一列举,可以去中文百科查阅哦。
那么,这篇就到此了吧。
下期预告:结构地物
如果发现错误请告诉我。
参考资料来源:
Minecraft中文wiki;MC百科
666666666666666
差点就看懂了,就差亿点
mcbbs有你更精彩
适用版本都不写的吗?
ruhuasiyu 发表于 2022-3-23 18:33
适用版本都不写的吗?
当然是以最新版本为准啊!
差一点就看懂了
我一直好奇数据包能实现添加新方块吗
奇葩~ 发表于 2022-4-19 14:36
我一直好奇数据包能实现添加新方块吗
添加方块做不到,但能修改一个方块到无限接近于新方块,再搭配上Custom model data标签通过材质包几乎就是个新方块
感谢大佬教学,学到了学到了
刚看完十就来看十一了 感觉讲得很细
好耶,有大佬!正在努力学习中…
那个版本都可以?
牛啊,虽然我看不懂
6666666666666
 本帖最后由 钩远贪 于 2022-5-7 10:26 编辑 
大佬…太强了…
甚至注释全都写了一步不漏…吾辈楷模关于“花朵方块状态声明,一共分为两种,普通("minecraft:plain_flower_provider"),森林("minecraft:forest_flower_provider")”这一部分,是由群系决定的吗?
大佬…太强了…
甚至注释全都写了一步不漏…吾辈楷模关于“花朵方块状态声明,一共分为两种,普通("minecraft:plain_flower_provider"),森林("minecraft:forest_flower_provider")”这一部分,是由群系决定的吗?
谢谢楼主了
钩远贪 发表于 2022-5-7 10:25
大佬…太强了…
甚至注释全都写了一步不漏…吾辈楷模关于“花朵方块状态声明,一共分为两种,普通("minecra ...
就是什么个样式的,普通的就是类似于草原上的花朵啊,你看普遍都是一格高嘛,森林它就有两个高的和一格高的嘛,就类似与这个
6666666666666666
一开始看见数据包的时候真的觉得这玩意好吊,没想到现在已经走到我们身边了
说实话,写的很细了