本篇教程由作者设定使用 CC BY-NC 协议。

准备工作

选择工具->文件夹选项,查看->高级设置,取消勾选“隐藏已知文件类型的拓展名”。

如何添加带NBT合成表(数据包)-第1张图片如何添加带NBT合成表(数据包)-第2张图片

新建文件夹,打开它,右击选择新建->文本文档,重命名为“pack.mcmeta”。

打开,输入

{
    "pack": {
      "pack_format":10,
      "description":"*"
    }
}

,"*"内为描述。

新建->PNG图像,重命名为【pack.png】。

此图像为数据包封面。

新建文件夹,重命名为【data】。

打开,新建文件夹,重命名为【namespace】。(namespace只能使用小写字母a-z,数字0-9,连接线-,下划线_。

工作台中NBT合成

打开,新建文件夹,重命名为【recipes】。(recipes意为配方

在recipes文件夹里可以有子文件夹,用于分组。

新建文件,重命名为test.json(test推荐命名为"成品"_"制作方式")

打开文件,以有序配方为例,输入

{
    "type": "minecraft:crafting_shaped",
    "pattern": [
        "",
        "",
        ""
    ],
    "key": {
        "": {
            "":""
        },
        "": {
            "":""
        },
    },
    "result": {
        "item": "minecraft:knowledge_book",
        "count": 
    }
}


pattern里通过键描述合成表,如

压力板为

"AA"

台阶为

"AAA"

楼梯为

"A  ",

"AA ",

"AAA"

注意:

1.如果一个格子没有物品,需用空格代替,不可不输入!

2.每行的键数量必须相等,最多3行3列!

ke:y通过物品ID描述键,

 "A": {
            "item/tag":"modid:item/tag"
        }

A为代号,

当第二栏输入item是,第三栏可为modid:item(如minecraft:stone);

当第二栏输入tag是,第三栏可为modid:tag(如minecraft:wool)。

result为输出的成品,count为数量。

返回到命名空间文件夹,新建文件夹,重命名为advancements。

打开,新建文件,重命名为adv_test.json(adv_test推荐命名为"adv"_"成品"_"制作方式")

打开,输入

{
    "criteria": {
      "Power": {
        "trigger": "minecraft:recipe_unlocked",
        "conditions": {
          "recipe": "namespace:test"
          }
      }
    },
    "rewards": {
      "function": "namespace:give_test"
    }
  }

返回到命名空间文件夹,新建文件夹,重命名为functions。

打开,新建文件,重命名为give_test.mcfunction(give_test推荐命名为"give"_"成品"_"制作方式")

打开,输入

recipe take @s namespace:test
advancement revoke @s only namespace:adv_test
clear @s knowledge_book 1
give @s modid:item{NBT:"NBT"}

modid:item为任意物品,如minecraft:stone。

{NBT:"NBT"}为物品的NBT,可以通过/data get entity @s SelectedItem获得。

/data get entity @s SelectedItem

地板合成

目标:将物品丢在一起

在namespace\functions下新建文件,重命名为test2.mcfunction。

在give_test2.mcfunction里输入

execute as @e[type=item,nbt={Item:{id:"modid:item",Count:1b}}] at @s if entity @e[distance=..1,type=item,nbt={Item:{id:"modid:item2",Count:1b}}] (if entity @e[distance=..1,type=item,nbt={Item:{id:"modid:item3",Count:1b}}]) run function 命名空间:give_test2

execute as @e[type=item,nbt={Item:{id:"modid:item",Count:1b}}] at @s if entity @e[distance=..1,type=item,nbt={Item:{id:"modid:item2",Count:1b}}] (if entity @e[distance=..1,type=item,nbt={Item:{id:"modid:item3",Count:1b}}]) run function 命名空间:give_test2

(扩号内是非必要的,)

as:切换命令执行者。

id:"modid:item":物品名称。

Count为物品数量,后面需要b。

if entity:检查其他实体是否存在。

distance=..1:距离小于等于1。

run function:执行函数。

在命名空间\functions下新建文件,重命名为give_test2.mcfunction。

在give_test2.mcfunction里输入

kill @e[limit=1,distance=..1,type=item,nbt={Item:{id:"modid:item2",Count:1b}}](
kill @e[limit=1,distance=..1,type=item,nbt={Item:{id:"modid:item3",Count:1b}}])
summon item ~ ~ ~ {Item:{id:"modid:item4",Count:1b,tag:{id:"NBT:NBT"}}}
kill @s


kill @e[limit=1,distance=..1,type=item,nbt={Item:{id:"modid:item2",Count:1b}}]

summon item ~ ~ ~ {Item:{id:"modid:item4",Count:1b,tag:{id:"NBT:NBT"}}}

kill @s

测试数据包

将data文件夹,pack.png,pack.mcmeta打包放到.minecraft\versions\[verison]\saves\new world\datapacks里。

也可以不打包直接将文件夹放datapacks里面,可能会标,是因为版本不匹配,无影响(如果不显示请检查是否使用了中文,大写字母作为文件夹名称,它们不能被识别)。/reload重载游戏,测试你的数据包。

如有Bug请反馈。

注意:请不要在任何地方使用全角标点!