我的世界模组制作教程:数据包

§2 数据包
数据包 (datapacks) 可用于覆盖或添加新的函数、进度、战利品表、战利品表谓词、物品修饰器、配方、结构、标签、维度、维度类型和自定义世界生成。数据包文件夹位于 .minecraft/saves/世界名称/datapacks
,其下方子文件夹或 zip
文件即为一个数据包。
安装数据包:单人游戏中,对于新创建的世界,在创建时点击创建新的世界->世界预设->数据包
,将数据包拖入并选择至右侧即可。对于已生成的世界,选择你需要安装数据包的世界,点击编辑->打开世界文件夹->打开文件夹 datapacks
,并将数据包 .zip
文件或文件夹放入其中。多人游戏中,打开服务器文件夹->worlds->datapacks
文件夹,并将数据包 .zip
文件或文件夹放入其中。数据包放置好后,在首次生成该世界/重新进入该世界/下次服务器启动时会启用该数据包。管理员也可以输入 /reload
来加载数据包,但这不适用维度和自定义世界生成。
原版数据包是 Minecraft 自带的一个默认开启的数据包,其 data
文件夹位于 .minecraft/versions/版本号/版本号.jar/data
,其中包含的原版进度、战利品表、配方、结构和标签等内容,是制作数据包的文件样板。注意原版的维度和自定义世界生成不在该路径,可从此处下载这些内容。
对于创建世界时添加的数据包,可以在数据包选择页面调整加载次序。其它情形添加的数据包优先级最高,即最后加载。同时加入的数据包优先级则和文件名顺序相关。数据包的优先级顺序储存在文件 level.dat
中,可以通过 /datapack
命令查看或修改。在游戏中通过命令 /datapack
可以禁用/启用数据包,最后启用的优先级最高。由于数据包加载顺序不定,因此在制作数据包的过程中,尽量不要依赖数据包的加载顺序。原版数据包的优先级一般是最低的。
使用 /datapack list
命令显示数据包名称时,原版数据包为 [vanilla]
,玩家自定义的数据包为 [file/数据包名称]
。
文件夹结构
由于命名空间ID的命名要求,data
下所有文件和文件夹可使用的字符为 _-.abcdefghijklmnopqrstuvwxyz0123456789
,不可使用大写字母、空格或中文,所有文本文件使用 UTF-8
编码。为了便于传播,发布时可将所有内容压缩为一个 zip
文件。压缩和解压的时候,注意文件层次,应当打开 zip
文件就可以看到数据包的 pack.mcmeta
。稳妥的做法是 打开文件夹->全选->右键->发送到->压缩文件夹
或 打开文件夹->全选->7-Zip->添加到 "文件夹名.zip"
。文件夹格式的数据包若有错误文件仍可以加载,但 zip
格式的会无法加载。
§2.1 元信息和图标
Minecraft 通过文件 pack.mcmeta
来识别数据包,因此该文件是不可或缺的。例如:
其中数据包描述为单个字符串或一个原始JSON文本。创建新的世界时,它会显示在数据包菜单中数据包名称下方。在数据包列表下,光标移动到对应的数据包时会显示此处填写的描述。
1.16版本原版数据包里的 pack.mcmeta
文件为
数据包可以包含一个 pack.png
,它是正方形的图片,用于创建新的世界时在数据包菜单中显示。
§2.2 命名空间
命名空间 (namespace) 为玩家自定义的、可操作的空间。使用独立的命名空间也有利于解决和他人的冲突。数据包下可以有多个命名空间,如果不同数据包中有相同的命名空间,则其中相同的文件名内容会根据加载先后顺序被覆盖。特别地,原版内容被保存在 minecraft
命名空间,想要修改和替换原版的内容只需在你的数据包内建立 minecraft
命名空间和相应的同名文件并修改即可。
标签文件,即 tags
中的文件内容默认追加而不是覆盖。因此标签文件是解决数据包冲突和联动的有力工具。

1.16~1.16.1 版本的维度、维度类型和世界生成文件位置为 minecraft/类型/命名空间/路径/文件名.json
而不是 命名空间/类型/路径/文件名.json
。
若命名空间为 minecraft
,则可直接省略 minecraft:
。本文中我们会混用两种写法,注意区分。除此之外,如战利品表的 type
、战利品表谓词的 condition
等诸多情形的值也是 minecraft
命名空间下的命名空间ID,因此此时也可以省略 minecraft:
。
§2.3 函数

Function
函数 (Function) 是一系列顺次执行的命令列表,可以被命令 function 命名空间ID
来依次执行函数的每一条命令,还可被调用于进度JSON文件的 rewards->function
。函数每一行表示一个单独的命令,无需 /
开头。执行时会按顺序依次执行,使用 #
开头的行是注释。
如果函数被另一个函数执行,则默认无执行者,执行位置为出生点,除非在执行时继承调用它的函数的执行者和执行位置。如果函数被命令方块执行,则无执行者,执行位置为命令方块位置。如果函数被玩家手动执行,则执行者为玩家自身,执行位置为玩家位置。如果函数被进度奖励,执行者为完成进度的玩家,执行位置为玩家位置。这些情形下的执行者和执行位置均可使用命令 execute
来改变。
如果需要函数在游戏加载/每刻执行,则需要将其加入函数标签中。
§2.4 进度

Advancement
进度 (Advancement) 为游戏内检测玩家行为,触发后完成并执行奖励的系统,游戏内按 L
即可查看,可被用作命令 advancement
的参数,以授予或移除玩家的特定进度。
注意1.17的物品谓词和方块谓词与旧版本的有差异。
没有 parent
的进度被称为根进度。若其有 display
,则它定义了一个进度的选项卡。
当一个进度没有 display
时,或者其上游的根进度没有 display
时,它不会显示在进度页面中。解锁配方的进度,以及我们只是用来实现某些效果而并非希望将其添加到进度页面的进度,应当省略 display
以隐藏之。
当进度需要所有的条件都达成时才能完成时,我们不需要定义 requirements
,这等价于 "requirements": [["条件 1"],["条件 2"],...,["条件 n"]]
。如果我们需要复杂的组合条件时,就需要使用该字段。requirements
的格式为或的与(合取范式),即其列表中的每一个项(该项还是一个条件的列表)中的均至少有一个条件满足。例如 "requirements": [["条件 a", "条件 b"],["条件 c", "条件 d"]]
表示当 条件 a
和 条件 b
至少有一个满足且 条件 c
和 条件 d
至少有一个满足时,进度会完成。不过较为常见的还是所有条件只要有一个满足即可,这时写作 "requirements": [["条件 1","条件 2",...,"条件 n"]]
。例如下例中两个条件 sealing_wand
, dream_wand
分别表示玩家获取了相应 NBT 物品的触发器,只要其中有一个满足即可完成进度。
完整的触发器和触发器的条件请查看进度/JSON格式#触发器列表。我们简要列出常见的触发器:

所有的触发器条件均有一个可选的战利品表谓词列表 player
字段用于要求玩家额外需要满足的战利品表谓词。例如
奖励中的解锁配方一般适用于数据包添加的配方相应的解锁进度,这样的进度无需 display
字段,参考配方。奖励中的经验建议仅在高难度进度完成时给予,这样的进度通常设置 frame
为挑战。奖励中的函数的执行者为完成进度的玩家,位置为玩家的位置。
游戏内或函数内使用 advancement
命令可以手动给予或剥夺进度。进度配合奖励函数剥夺玩家该进度,则该进度可反复触发,可用于诸如检测玩家生物群系、饮食、放置方块等需要循环检测的情形。这样的进度需要缺省 display
字段。例如:
原版进度 如果需要修改原版的进度,只需要在数据包中添加相同路径的相应名称文件并修改之即可。原版的进度被划分为5个选项卡,命名空间ID分别为 minecraft:story/*
, minecraft:nether/*
, minecraft:end/*
, minecraft:adventure/*
, minecraft:husbandry/*
。其中 minecraft:nether/all_effects
, minecraft:adventure/hero_of_the_village
, minecraft:adventure/arbalistic
为隐藏进度。这些进度没有奖励,或只有奖励经验值。
除此之外,原版获取配方的进度命名空间ID为 minecraft:recipes/*
。
§2.5 战利品表

Loot table
战利品表:从入门到重新入门
战利品表 (Loot table) 用于生成随机的一些物品,可作为容器的随机物品、实体的掉落物、方块的掉落物、钓鱼的战利品、猪灵以物换物的内容、猫和村民的礼物、进度的完成奖励、loot
命令的参数以给予玩家特定战利品表物品等。
setblock ~ ~ ~ chest{LootTable:"cpp:chests/something"}
give @s barrel{BlockEntityTag:{LootTable:"cpp:chests/something"}}
summon bat ~ ~ ~ {DeathLootTable:"cpp:entities/something"}
loot spawn ~ ~ ~ loot cpp:something
即使没有指定战利品表种类,或指定为 minecraft:generic
,游戏也会根据实际应用的场景来决定它的类型。这意味着在相应情形无效的条件和函数不会生效,而且游戏不会报错提示。例如在方块战利品表中检测击杀者。
rolls
, bonus_rolls
, 以及在战利品表、战利品表谓词和物品修饰器中的大部分数值可以有如下形式之一:
项目会根据种类的不同而拥有不同的JSON格式:
我们在设计物品时,可以将物品信息打包成一个战利品表。之后我们便可以在其它战利品表中使用 loot_table
类型来方便地引用,见物品设计。alternatives
类型在需要判断条件时很有用,例如原版的树叶掉落物就使用了该类型。当工具为剪刀或附有精准采集魔咒时,掉落树叶,否则掉落树苗。dynamic
类型配合潜影盒可以掉落不定 id
的物品,见物品输出和修改玩家背包。
战利品表条件 用于对战利品表进行一些条件判断。仅当条件列表 conditions
中每一个条件都被满足时,其同层次的随机池/项目/函数才会被选取。战利品表条件和战利品表谓词JSON对象的格式完全相同。
战利品表函数 用于对战利品表进行一些修改。函数列表 functions
中每一个函数会依次应用于同层次的随机池/项目生成的战利品上,函数的不同顺序可能有不同效果。战利品表函数和物品修饰器JSON对象的格式完全相同。
下面这个例子是对原版牛的掉落物进行的修改。
该例子战利品表表示牛死亡时
掉落
0-(2+抢夺等级)
个皮革;掉落
1-(3+抢夺等级)
个牛肉,着火则掉落熟牛肉;被玩家杀死时,有
(2.5+抢夺等级)%
几率掉落战利品表cpp:limb_of_ridge
的物品;被玩家杀死时,有
(2.5+抢夺等级)%
几率掉落战利品表cpp:cow_head
的物品。
战利品表除上述用途外,还可用于生成随机数,见随机数;指定自定义机器的配方,见配方处理等诸多场景。
原版战利品表用于决定方块、实体的默认掉落物以及游戏的一些默认内容。如果需要修改原版的战利品表,只需要在数据包中添加相同路径的相应名称文件并修改之即可。原版的战利品表被划分为实体掉落物 minecraft:entities/*
, 方块掉落物 minecraft:blocks/*
, 箱子战利品表 minecraft:chests/*
和游戏内容(钓鱼、猪灵以物换物、村民礼物、猫的礼物) minecraft:gameplay/*
。
§2.6 战利品表谓词

Predicate
【CBL|SPG】[1.16] Predicate —— 数据包的组成文件之一
战利品表谓词 (Predicate) 用于对所在情形进行条件判断,可作为战利品表的条件、命令 execute
的条件子命令 (if|unless) predicate foo:bar
、目标选择器参数 predicate={foo:bar}
、进度中判断实体条件等。战利品表的条件和战利品表谓词格式相同。
注意1.17和旧版本的物品谓词和方块谓词有差异。
这个例子表示玩家的分数 cppChainTick
至少为 1
时,或者手持物具有特定标签时通过。
战利品表谓词文件也可以为战利品表谓词JSON对象的列表。这个例子表示玩家的手持物或盔甲拥有指定标签,且玩家不拥有 cpp:temperancer
时通过。
§2.7 物品修饰器

Item modifier
【CBL|SPG】[1.16] Predicate —— 数据包的组成文件之一
物品修饰器 (Item modifier) 用于在命令 /item
中对物品添加战利品表函数。战利品表的函数和物品修饰器格式相同,但物品修饰器不可被战利品表的函数引用。
物品修饰器也可以为物品修饰器JSON对象的列表。例如下例中我们提前将需要设置的耐久存入 storage cpp:_
的 Damage
,且已损伤的耐久不小于 25
时将其数量-1。
例:将玩家1个副手物品移动到头盔栏。注意引用时应当先检测玩家头盔栏是否为空再执行该函数。
例:获取函数执行者手持物的最大耐久。
§2.8 配方

Recipe
配方 (Recipe) 为游戏内指定工作台合成、切石机合成、熔炉烧炼、高炉烧炼、烟熏炉烧炼、营火烧炼和锻造台合成的格式,一般不支持带 NBT 标签。
在默认情形(限制配方关闭)下,玩家总是可以使用所有的配方,且使用一个配方会使玩家自动发现它。因此建议为你的自定义配方添加合适的进度来获取该配方。一旦配方被发现,就将被加入玩家的配方书。配方只会在玩家使用与当前配方类型所匹配的方块时显示。例如,烧炼配方将只在熔炉的界面中显示。当在背包中使用配方书时,只有能在玩家的 2×2
背包合成栏内使用的配方才会显示。已发现的配方储存在玩家 recipeBook
的NBT中。
原版的合成、烧炼使用配方文件即可实现,较为简单,但是无法识别且无视配方材料的NBT(除了特殊合成配方),因此只能实现原版物品的合成和烧炼。同时原版模组若使用了相关物品,则相应的模组物品亦可代替原物品进行合成。想要实现带NBT的合成需要藉由其它方式,见NBT合成与烧炼。
锻造台则会保留要升级的物品的NBT信息而只修改其id。
大部分配方中所使用的配方材料格式可以为下述几种。
§2.8.1 有序合成
使用6羊毛+鸡蛋工字形有序合成两个羊刷怪蛋。
这里 cpp:wools
为自定义的包含所有颜色羊毛的物品标签。
§2.8.2 无序合成
配料可以重复。单个物品配方请使用有序合成而不是无序合成。
2沙子和红石无序合成2红沙。
§2.8.3 切石机配方
注意 result.count
不能省略。
使用切石机切割橡木木板为2台阶。
§2.8.4 烧炼配方
熔炉配方的默认烧炼时间是200刻,即10秒。高炉配方和烟熏炉配方的默认烧炼时间是100刻,即5秒。营火的默认烧炼时间是100刻,即5秒,但所有的原版营火配方都将烧炼时间修改为了600刻,即30秒。
熔炉烧炼皮革装备、腐肉、鞍为兔子皮。
§2.8.5 锻造台配方
使用锻造台使用钻石将铁斧升级为钻石斧。
§2.8.6 工作台特殊配方
工作台有一些特殊配方由游戏内部的代码处理,无法通过JSON文件来修改。这些配方均涉及物品的NBT修改。当原版数据包被禁用时,你可以用它们来重新启用你所需要的特殊合成配方。
§2.8.7 覆盖原版配方
在数据包的pack.mcmeta
中可以指定忽略的数据包文件,例如下面就屏蔽了原版棕色蘑菇合成兔肉煲的配方,以及用于解锁该配方的相应进度。
1.19之前的版本如果想要修改原版的合成或烧炼配方,先使用压缩软件打开版本 .jar
文件,依次打开 data/minecraft/recipes
,找到相应的配方文件,然后在自己的数据包中的相同位置(必然是 minecraft
命名空间下)放入同名文件即可覆盖默认的配方。
将橡木台阶合成数量改为8。
将原版白色床+墨囊=黑色床的合成配方修改为任意床+墨囊=黑色床。
如果需要删除原版配方,可使用生存无法获得的方块如基岩=基岩、屏障=屏障、结构空位等物品来合成。配方文件内容为 {}
时会被认为是错误文件而无法覆盖原配方。同时,我们需要将解锁该配方的进度触发器设置为 minecraft:impossible
。
§2.8.8 配方获取
一个完整的配方应当有相应的进度来使玩家获取之,通常触发器为玩家背包含有合成材料。也可以根据需要在函数中使用命令 recipe
给予。
§2.9 结构

Structure Block
建筑党也能愉快享用结构方块-图文并茂教会你使用结构方块
如何使用结构方块
结构 (Structure) 存储了一个长方体区域的方块和实体信息,玩家可以使用结构方块来创建、保存、调用结构。结构大小一般至多为 48×48×48
,1.15及更早版本则至多为 32×32×32
。
在游戏中获得结构方块后,放置好所需要的方块结构和实体,然后放置结构方块,设置为保存模式,调整好大小,输入名称(命名空间ID),点保存即可(注意区分是否需要保存实体)。然后从 .minecraft/saves/世界名称/generated/命名空间/structures/路径/文件名.nbt
复制到数据包内。调用时,在结构方块中输入命名空间ID来加载(注意区分是否需要加载实体)。
我们也可以在函数中加载,先放置结构方块,然后放置并清除红石块,最后清除结构方块。这个技巧配合战利品表和断言,可用于随机在世界生成结构,也可直接用于模板池。例如:
结构文件的NBT结构为:
size 结构的长宽高;
entities 结构包含的实体;
blocks 结构包含的方块,其中 pos 指定了相对坐标,state 指定了该方块在方块状态列表的编号,从0开始;
palette 方块状态列表,其中 Name 为方块命名空间ID,Properties 指定该方块的所有方块状态。也可以为palettes,这个列表的每一个项目都是一个方块状态列表,然后调用结构时会根据种子(坐标和完整度)来确定选择哪一个列表来使用,原版的沉船就使用该方式来存储。
通过直接编辑结构文件,我们可以绕过使用结构方块保存的一些限制。在游戏内保存好大致的结构后,使用NBT编辑器打开:
通过直接修改结构的
palettes
,可以将设置随机的结构方块状态列表;通过直接修改结构的
size
,可以将结构设置为大于48的区域;通过修改
blocks
的pos
,我们可以指定长方体区域外位置的方块;通过修改
entities
,我们可以删除实体不需要保存的一些NBT,这通常包括Air, FallDistance, Fire, Motion, NoGravity, OnGround, PortalCooldown, Pos, Rotation, UUID
等,blockPos
也可以删除。
这些技巧的使用请参考任意纯方块结构。
如果结构用于结构地物中,当结构只有部分在已加载区块中时,系统会根据结构的size
来确定还有哪些部分没有被加载。blocks
的pos
不在长方体区域内,这可能会导致生成的结构不完整。
§2.10 标签
Tag
标签 (Tag) 用于将多个具有相同性质的内容放置在一起以便于调用。Minecraft 中有很多内容都叫做标签,注意区分它们。
由于数据包加载次序难以控制,因此 "replace": true
的情形较为少用,一般仅用于覆盖原版标签。
标签的 required
设置为 false 时,可用于添加其他模组的相应ID。这在为数据包添加对模组的支持时很有用,例如cpp/tags/blocks/chests.json。而函数标签则为数据包添加附属和扩展提供了方便的接口。
标签共包括6种,分别用于不同情形。
§2.10.1 方块标签

方块标签 (Block tag) 可以在用命令测试方块时以 #命名空间ID
的格式调用,只要方块满足了该标签中定义的任何一个方块,命令就会测试通过。方块标签还可在进度、断言、战利品表中以 "tag": "命名空间ID"
的格式调用。调试模式(F3)下,玩家指向方块时会显示含有该方块的所有方块标签。
原版方块标签被用于各种方块属性,我们按照功能分类并列出。我们不列出仅用于其它标签、进度、断言、战利品表、影响生物寻路和影响方块连接的方块标签。



检测玩家头部是否被方块卡住。
然后执行命令
因为命令执行地点为实体的脚,所以我们使用 anchored eyes
来使得局部坐标的位置变为玩家的眼睛。
让末影人无法拿起任何方块。
§2.10.2 物品标签

物品标签 (Item tag) 在配方、进度、断言、战利品表中用 "tag": "命名空间ID"
的格式使用。还可在创造模式物品栏输入 #命名空间ID
来搜索相应标签物品。物品标签命名空间ID命名空间:路径/文件名
对应的文件为 命名空间/tags/items/路径/文件名.json
。
原版物品标签被用于各种物品属性,我们按照功能分类并列出。我们不列出仅用于其它标签、配方、进度、断言、战利品表,影响生物寻路和影响方块连接的物品标签。

让纸可以作为熔炉燃料使用,每次可烧炼一个物品。
§2.10.3 函数标签

函数标签 (Function tag) 可以在 function
命令中以 #命名空间ID
的形式调用,所有在该标签中指定的函数都会按照它们出现的顺序执行,不会重复执行。函数标签命名空间ID命名空间:路径/文件名
对应的文件为 命名空间/tags/functions/路径/文件名.json
。
minecraft
命名空间中的标签
minecraft/tags/functions/load.json
中的函数会在加载时被执行一次,我们常称之为加载函数、load函数。用于初始化的函数应当添加至该标签。minecraft/tags/functions/tick.json
中的函数每刻会被执行一次,我们常称之为循环函数、主函数、tick函数。需要高频执行的函数应当添加至该标签。
本文中我们有时会不加注明地使用命名空间:load
和命名空间:tick
表示这两个函数标签中的函数。
§2.10.4 实体类型标签

实体类型标签 (Entity type tag) 标签可以在实体选择器参数 type
以及战利品表条件中以 #命名空间ID
的形式调用,只要实体满足了该标签中定义的任何一个类型,就会被选中。实体类型标签命名空间ID命名空间:路径/文件名
对应的文件为 命名空间/tags/entity_types/路径/文件名.json
。
原版实体类型标签被用于各种实体属性,我们在此列出。

§2.10.5 流体标签

流体标签 (Fluid tag) 标签很少使用,修改后会影响空气、水和熔岩的性质,其命名空间ID命名空间:路径/文件名
对应的文件为 命名空间/tags/fluids/路径/文件名.json
。
流体和流体对应的方块是不同的,例如 flowing_water
不是一个合法的方块,但流体可以为
原版流体标签 minecraft:water
和 minecraft:lava
用来决定何种流体具有类似水和熔岩的性质,具体见标签#流体,我们在此省略。
§2.10.6 游戏事件标签

游戏事件标签 (Game event tag) 标签目前仅用于指定影响潜声传感器的事件,其命名空间ID命名空间:路径/文件名
对应的文件为 命名空间/tags/game_events/路径/文件名.json
。
原版游戏事件标签 minecraft:vibrations
用于决定哪些事件会被潜声传感器检测到,minecraft:ignore_vibrations_stepping_carefully
用于决定哪些事件在玩家潜行时不会被潜声传感器检测到,具体见标签#游戏事件。
§2.11 维度和维度类型
维度和维度类型用于自定义维度。维度和自定义世界生成无法通过命令 /reload
在游戏内更新。

Custom dimension
维度 (Dimension) 规定了维度的生成方式和生物群系。
噪声型维度的的地形由噪声设置 generator.settings
确定,生物群系由 generator.biome_source
的不同可分为五种情形,其中类型为 multi_noise
时,游戏会生成四维柏林噪声图,然后对每个坐标选择噪声最接近的生物群系。其中生物群系的 offset
会影响计算接近程度,从而影响该生物群系的大小,offset
越大,该生物群系越难被选中。
超平坦型维度仅需指定方块层的分布、生物群系和使用的结构参数即可。如果生成要塞,则要塞由原点向外逐个生成在一系列的环上,直到总数达到 count
。其中第 i
个环的要塞数量为 spread × (i+1) × (i+2)/6
向下取整,第 i
个环到原点的平均距离为 distance × (6i-2)
个区块。
调试世界维度仅用于调试世界,没有其它可选的设置。
原版的维度包括
§2.11.2 维度类型

维度类型
Dimension type
维度类型 (Dimension type) 规定维度的一些与地形无关的信息。
可用的维度类型
这些是 Minecraft 内部已生成的维度类型命名空间ID,可直接使用。已省略 minecraft:。
§2.11.3 实例
定义好新的维度之后,我们还需要为其设计传送方式。简单的可以使用物品触发,见右键交互。更常见的则是使用多方块结构为传送检测方式。
定义一个新的维度,其中仅有繁花森林生物群系。使用高花摆放成八边形并在中间放置白色羊毛激活传送门。
检测传送门是否完整。检测玩家位置来传送。
§2.11.4 自定义世界
自定义世界是一种世界类型,它用自定的特性取代了世界的普通地形。创建世界时,点击更多选项->导入世界->选择JSON文件
即可。这种方式还可以用来创建额外的维度而不借助于数据包,但是默认只能使用命令 /execute in 维度名称
进入额外的维度。
§2.12 自定义世界生成
Custom world generation
自定义世界生成 (Custom world generation) 允许数据包改变世界的生成方式,这需要和维度配合使用。本节中列出的很多JSON内容的作用仍然需要测试。点此可下载原版所有的 worldgen
内容 (slicedlime 提供)。注意原版的维度和维度类型并不保存在原版数据包中。
§2.12.1 噪声设置

噪声设置
Noise settings
噪声设置 (noise_settings) 用于设置维度生成的噪声。噪声设置文件为JSON文件,格式可参考Noise Settings – Official Minecraft Wiki。噪声设置的命名空间ID命名空间:路径/文件名
对应的文件为 命名空间/worldgen/noise_settings/路径/文件名.json
。
当维度的高度或最低高度发生改变时,再次进入该维度会导致区块 (regions
文件夹下文件)重新生成,但实体 (entities
文件夹下文件)会保留。
可用的噪声设置
这些是 Minecraft 内部已生成的噪声设置命名空间ID,可直接使用。

§2.12.2 生物群系

生物群系
Biome/JSON format
生物群系 (Biome) 规定了生物群系的特性,可用于维度JSON文件的相应参数。
可用的生物群系
这些是 Minecraft 内部已生成的生物群系命名空间ID,可直接使用。



§2.12.3 地形雕刻器

地形雕刻器
Carvers
地形雕刻器 (Carver) 用来在地形中雕刻出空气或液体的区域,被调用于生物群系JSON文件的 carvers
。
可用的地形雕刻器
这些是 Minecraft 内部已生成的地形雕刻器命名空间ID,可直接使用。

§2.12.4 地表生成器

地表生成器
Configured surface builder
地表生成器 (Surface builder) 用来刻画地面的起伏和构成地形的默认方块,被调用于生物群系JSON文件中的 surface_builder
。
可用的地表生成器
这些是 Minecraft 内部已生成的地表生成器命名空间ID,可直接使用。

§2.12.5 地物

地物
Configured feature
地物 (Feature) 是指树、花、矿石等,被调用于生物群系JSON文件的 features
中。
上述JSON格式中的
均匀分布的整数可以为一个JSON对象或一个非负整数。
可用的地物
这些是 Minecraft 内部已生成的地物命名空间ID,可直接使用。已省略 minecraft:
。






装饰物
可用的装饰物
这些是 Minecraft 内部已生成的装饰物命名空间ID,可直接使用。已省略 minecraft:
。

§2.12.6 结构地物

结构地物
Configured structure feature
结构地物 (Structure feature) 指定特定类型的结构以及结构的参数,被调用于生物群系JSON文件的 starts
。
可用的结构地物
这些是 Minecraft 内部已生成的结构地物命名空间ID,可直接使用。已省略 minecraft:
。

§2.12.8 模板池

模板池
Jigsaw pools
拼图方块与模板池教程
模板池 (Template pool) 使用结构文件来生成结构,其中结构包含的拼图方块会工作以生成更复杂的结构。拼图方块是一个允许游戏使用较小模板生成结构的拼接方块:
name
名称,该拼图方块的标记。pool
目标池,指的是拼图方块将要使用的模板池。target
目标,与该拼图方块连接的另一拼图方块的name
。joint
连接类型,rollable
(默认值) 或aligned
。当拼图方块朝上或朝下时才有,其中aligned
指拼接的结构位置固定,rollable
指的是拼接的结构可随机旋转。final_state
转变为:指的是拼图方块在整个功能被放置后会转变的方块。默认为minecraft:air
。层数,
0~7
之间,指生成完之后拼接的结构继续生成的嵌套层数。保留拼图方块,与其拼接的结构生成完之后其包含的拼图方块保留还是转变为
final_state
指定方块。
拼图方块目前仅用于生成掠夺者前哨站、村庄和堡垒遗迹类型的结构地物。这些结构的生成开始于包含拼图方块的模板。每个拼图方块都使用下列流程来生成另一个模板:
在目标池内随机选择一个模板。
在该模板的拼图方块,至少存在1个模板含有目标拼图方块。如果有多个方块符合条件,那么会随机选择其中的一个。
这会使两个拼图方块连接使得第2个拼图方块朝向第1个拼图方块并与之相邻。
最后,两个拼图方块会被替换为对应的“转变方块”设置的方块。
初始模板和附加模板里的拼图方块都会重复上述流程,直到没有剩余的拼图方块或者结构足够大为止。使用结构方块加载结构不能复现上述过程。
§2.12.9 处理器列表

处理器列表
Processor lists
处理器列表 (Processor list) 用于指定拼图方块生成结构之后拼图方块本身的处理方式。
可用的处理器列表
这些是 Minecraft 内部已生成的处理器列表命名空间ID,可直接使用。已省略 minecraft:
。
