本篇教程由作者设定使用 CC BY-NC 协议。
准备工作
选择工具->文件夹选项,查看->高级设置,取消勾选“隐藏已知文件类型的拓展名”。
新建文件夹,打开它,右击选择新建->文本文档,重命名为“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请反馈。
注意:请不要在任何地方使用全角标点!