[数据包日记]从萌新到入门的je1.14数据包制作教程
注意:这里的标签不是指nbt标签,也不是命令/tag的标签。
这里的标签是指一些东西的合集。
举例来说,在原版中,可以使用#minecraft:planks来代表所有种类的木板
这个#minecraft:planks就是一个标签
这里的标签是指一些东西的合集。
举例来说,在原版中,可以使用#minecraft:planks来代表所有种类的木板
这个#minecraft:planks就是一个标签
标签位于命名空间下的tags文件夹中。
tags有5中,方块(blocks)、实体类型(entity_types)(1.14新增)、物品(items)、流体(fluids)和函数(functions)。
添加方法为在tags文件夹内建立一个文件夹,然后修改为对应名称,再打开后写入内容,即可。
比如,我要加入一个新的方块标签,我就需要在tags下新建一个名为blocks的文件夹,再往里添加json格式文件即可。
tags的json格式内含两个值:布尔值replace和数组values
replace后加true或false,可不填,表示是否替换原标签(若为true则会使原标签失效,若为false则作为原标签的补充),不填则默认为false
values后接中括号,内部写上各种元素,可以引用另一个标签。不要忘记加引号
tags有5中,方块(blocks)、实体类型(entity_types)(1.14新增)、物品(items)、流体(fluids)和函数(functions)。
添加方法为在tags文件夹内建立一个文件夹,然后修改为对应名称,再打开后写入内容,即可。
比如,我要加入一个新的方块标签,我就需要在tags下新建一个名为blocks的文件夹,再往里添加json格式文件即可。
tags的json格式内含两个值:布尔值replace和数组values
replace后加true或false,可不填,表示是否替换原标签(若为true则会使原标签失效,若为false则作为原标签的补充),不填则默认为false
values后接中括号,内部写上各种元素,可以引用另一个标签。不要忘记加引号
举个例子,我需要一个标签,能够让我同时选中所有种类的僵尸
于是我在命名空间为dod下的tags文件夹内新建一个名为entity_types的文件夹,后在其中新建一个文件,写入以下内容
{
"replace": false,
"values": [
"minecraft:zombie",
"minecraft:drowned",
"minecraft:husk",
"minecraft:zombie_villager"
]
}
后保存,更名为zombie,格式为json
进入游戏后,使用/kill @e[type=#dod:zombie] 即可同时杀死所有种类的僵尸
于是我在命名空间为dod下的tags文件夹内新建一个名为entity_types的文件夹,后在其中新建一个文件,写入以下内容
{
"replace": false,
"values": [
"minecraft:zombie",
"minecraft:drowned",
"minecraft:husk",
"minecraft:zombie_villager"
]
}
后保存,更名为zombie,格式为json
进入游戏后,使用/kill @e[type=#dod:zombie] 即可同时杀死所有种类的僵尸
唔~好像又是一个没啥用的内容~~~
实际上,标签在数据包内的出场率也是非常高。
除了能省下一些敲键盘的时间以外,一些特定的标签还拥有特殊的功能,这些功能集中在以minecraft作为命名空间的标签中。
比如,方块标签minecraft:enderman_holdable决定了哪些方块可以被末影人拿起。据此,我们可以做一些有趣的事情。
在minecraft命名空间下建立tags/blocks目录并建立名为enderman_holdable,后缀名为json的文件,在里面写入以下内容:
{
"replace": false,
"values": [
"minecraft:bedrock"
]
}
后进入游戏,我们可以发现
更多这样的标签的作用详见wiki“标签”页面
实际上,标签在数据包内的出场率也是非常高。
除了能省下一些敲键盘的时间以外,一些特定的标签还拥有特殊的功能,这些功能集中在以minecraft作为命名空间的标签中。
比如,方块标签minecraft:enderman_holdable决定了哪些方块可以被末影人拿起。据此,我们可以做一些有趣的事情。
在minecraft命名空间下建立tags/blocks目录并建立名为enderman_holdable,后缀名为json的文件,在里面写入以下内容:
{
"replace": false,
"values": [
"minecraft:bedrock"
]
}
后进入游戏,我们可以发现
更多这样的标签的作用详见wiki“标签”页面
另外说两个函数标签吧,也是非常常用的标签
minecraft:tick 拥有这个标签的函数将在每刻执行一次
minecraft:load 拥有这个标签的函数将在数据包加载时(如进入地图、输入/reload)执行一次
具体用法不再详细介绍
minecraft:tick 拥有这个标签的函数将在每刻执行一次
minecraft:load 拥有这个标签的函数将在数据包加载时(如进入地图、输入/reload)执行一次
具体用法不再详细介绍
配方用于自定义合成表,可以根据需要制作出自定义的合成、熔炼等合成表
不过,由于配方不支持自定义nbt,导致其理应很有用,实际存在感却不强。
不过,由于配方不支持自定义nbt,导致其理应很有用,实际存在感却不强。
配方保存至命名空间下的recipes文件夹中,为json格式的文件
所有形式的配方文件借助type这个参数来区分。type参数后可接minecraft:crafting_shaped(有序合成)、minecraft:crafting_shapeless(无序合成)、minecraft:smelting(熔炉)、minecraft:blasting(高炉)(1.14新增)、minecraft:campfire_cooking(篝火)(1.14新增)、minecraft:smoking(烟熏炉)(1.14新增)、minecraft:stonecutting(切石机)(1.14新增)和特殊配方。其中特殊配方应用于旗帜、烟火之星、地图等,本节不做介绍。
所有形式的配方文件借助type这个参数来区分。type参数后可接minecraft:crafting_shaped(有序合成)、minecraft:crafting_shapeless(无序合成)、minecraft:smelting(熔炉)、minecraft:blasting(高炉)(1.14新增)、minecraft:campfire_cooking(篝火)(1.14新增)、minecraft:smoking(烟熏炉)(1.14新增)、minecraft:stonecutting(切石机)(1.14新增)和特殊配方。其中特殊配方应用于旗帜、烟火之星、地图等,本节不做介绍。
先来介绍有序合成
有序配方通过pattern参数使用密钥对配方进行描述,然后借助key参数对密钥进行解释,使用result参数决定合成结果。
pattern内借助字符串来表示合成表的样子,如:
"pattern": [
"AAA",
"ABA",
"AAA"
]
这就表示我设计的配方是需要8个物品A和1个物品B来合成物品,并且需要使用物品A将物品B围成一圈。这里的字母A和字母B就是密钥。
如果对应区域没有物品,使用空格来代替密钥即可。
密钥可以使用任意字符,也可以使用符号。
然后使用key参数对密钥进行解释
"key":{
"A": {
"item": "minecraft:iron_bars"
},
"B": {
"item": "minecraft:nether_star"
}
}
这里说明了物品A是铁栅栏,物品B是下界之星。
同时,密钥里也可以使用标签。需要将item换成tag,然后把物品id换成标签id即可,不要加井号。
最后使用result参数决定最终合成的物品
"result": {
"count": 1,
"item": "minecraft:spawner"
}
有序配方通过pattern参数使用密钥对配方进行描述,然后借助key参数对密钥进行解释,使用result参数决定合成结果。
pattern内借助字符串来表示合成表的样子,如:
"pattern": [
"AAA",
"ABA",
"AAA"
]
这就表示我设计的配方是需要8个物品A和1个物品B来合成物品,并且需要使用物品A将物品B围成一圈。这里的字母A和字母B就是密钥。
如果对应区域没有物品,使用空格来代替密钥即可。
密钥可以使用任意字符,也可以使用符号。
然后使用key参数对密钥进行解释
"key":{
"A": {
"item": "minecraft:iron_bars"
},
"B": {
"item": "minecraft:nether_star"
}
}
这里说明了物品A是铁栅栏,物品B是下界之星。
同时,密钥里也可以使用标签。需要将item换成tag,然后把物品id换成标签id即可,不要加井号。
最后使用result参数决定最终合成的物品
"result": {
"count": 1,
"item": "minecraft:spawner"
}
那么,刚刚的那个配方的完整形式是
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"ABA",
"AAA"
],
"key": {
"A": {
"item": "minecraft:iron_bars"
},
"B": {
"item": "minecraft:nether_star"
}
},
"result": {
"count": 1,
"item": "minecraft:spawner"
}
}
最终效果如下
由于无法加nbt,导致只能做出猪的刷怪笼。
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"ABA",
"AAA"
],
"key": {
"A": {
"item": "minecraft:iron_bars"
},
"B": {
"item": "minecraft:nether_star"
}
},
"result": {
"count": 1,
"item": "minecraft:spawner"
}
}
最终效果如下
由于无法加nbt,导致只能做出猪的刷怪笼。
切石机配方有点迷。。。
切石机使用ingredients参数来表示所需物品(不加中括号),可以使用物品或标签。
在输出结果一栏,使用result直接接物品id,再使用count参数来决定数量(喂,和wiki上说的一点都不一样啊)
示例:
{
"type": "minecraft:stonecutting",
"ingredient": {
"item": "minecraft:prismarine"
},
"result": "minecraft:prismarine_shard",
"count": 4
}
效果:
切石机使用ingredients参数来表示所需物品(不加中括号),可以使用物品或标签。
在输出结果一栏,使用result直接接物品id,再使用count参数来决定数量(喂,和wiki上说的一点都不一样啊)
示例:
{
"type": "minecraft:stonecutting",
"ingredient": {
"item": "minecraft:prismarine"
},
"result": "minecraft:prismarine_shard",
"count": 4
}
效果:
熔炉、高炉、烟熏炉、篝火的配方格式相同,这里只介绍熔炉的配方格式。
使用ingredients参数来决定输入物品,格式同无序合成
使用result参数直接接生成物品
使用experience来决定配方给予的经验
使用cookingtime来决定熔炼时间(单位:游戏刻)
示例:
{
"type": "minecraft:smelting",
"ingredient": [
{
"item": "minecraft:rotten_flesh"
}
],
"result": "minecraft:leather",
"experience": 0.1,
"cookingtime": 200
}
表示将腐肉经过10秒的熔炉后烧制成皮革,并奖励0.1点经验(原版腐肉烧皮革get)
使用ingredients参数来决定输入物品,格式同无序合成
使用result参数直接接生成物品
使用experience来决定配方给予的经验
使用cookingtime来决定熔炼时间(单位:游戏刻)
示例:
{
"type": "minecraft:smelting",
"ingredient": [
{
"item": "minecraft:rotten_flesh"
}
],
"result": "minecraft:leather",
"experience": 0.1,
"cookingtime": 200
}
表示将腐肉经过10秒的熔炉后烧制成皮革,并奖励0.1点经验(原版腐肉烧皮革get)
战利品表算是一个比较常用的功能吧,
通过自定义战利品表,可以使宝箱随机生成内容,也可以控制实体的掉落物,算是一个比较实用的内容吧。
战利品表的结构还算比较容易理解,但是。。。写起来是真的头疼(我想事先准备一个战利品表,方便些教程。本来不想写太多,然而。。。一不小心写了113行)
通过自定义战利品表,可以使宝箱随机生成内容,也可以控制实体的掉落物,算是一个比较实用的内容吧。
战利品表的结构还算比较容易理解,但是。。。写起来是真的头疼(我想事先准备一个战利品表,方便些教程。本来不想写太多,然而。。。一不小心写了113行)
战利品表的组成是一个个随机池。在执行战利品表的时候,会在每一个随机池里抽出一定数目的物品,后将这些物品作为战利品掉落或放入箱子。
(1.14里)战利品表用有多种类型,不同类型的战利品表由参数type控制。type后可接参数有:
empty 空战利品表
entity 实体战利品表
block 方块战利品表
chest 宝箱战利品表
fishing 钓鱼战利品表
advancement_reward 进度战利品表
generic 其他类型战利品表(可应用于所有类型的战利品表,类似于1.13)
empty 空战利品表
entity 实体战利品表
block 方块战利品表
chest 宝箱战利品表
fishing 钓鱼战利品表
advancement_reward 进度战利品表
generic 其他类型战利品表(可应用于所有类型的战利品表,类似于1.13)