MINECRAFT数据包-进度与合成配方
注意!!!本章学习需要进度和合成配方方面的一定基础
本章讨论 [进度] 与 [合成配方] 相关内容
在数据包制作过程中,我们总是会使用到 进度 这个数据包的重要部分。
首先,我们需要先了解 进度 这个东西是个啥


一般地,像原版游戏内提示进度已达成这样的文字,就说明你完成了这个进度
那么,进度在数据包制作中有什么作用呢?
--答:检测游戏实体相关动作、事件等。
下面我们就来看一个例子:
问:如何通过工作台合成出一把锋利1的钻石剑

配方书写部分不在赘述,如下
这里我们需要改变一个地方
在result的item这条中,我们只需要将其修改为任意原版的物品
因为我们只需要达成 解锁配方 这个目标。
(注意:最好是生存无法直接获取的物品)
我这里是使用原版的 知识之书。
我们都知道,原版数据包的自定义合成中是不能够直接合成NBT物品的(废话)。
但是,进度中有一个触发器:minecraft:recipe_unlocked
这个触发器可以在玩家解锁配方时触发,就像我们在原版生存中挖掘了第一块原木,然后解锁了各类木头相关的配方一样。
依据这个,我们可以对一个数据包定义的配方的合成进行检测。
首先,我们需要保证这个配方是未解锁的(没有直接地出现在合成书中)。
于是,我们需要在数据包的#minecraft:load这个标签的函数中写入这行指令
这样,我们就完成了这个配方的初始化。
接下来,我们就需要编辑进度文件了(注:进度文件为JSON格式)。
在data/test/advancements/目录下新建sharp_sword.json文件

接下来用文本编辑软件打开(VsCode等软件皆可),然后在文件中写入下面的内容:
(必须严格按照JSON格式写入!!!)
恭喜你,你完成了进度部分的编辑。
接下来我们来解析这个进度:
其中,rewards下有一条名为function的内容。
function 顾名思义就是函数的意思。
实际上,它的意义也便是进度达成后所要执行的函数。
所以,接下来我们需要编辑对应的函数即可
在data/test/functions/craft/目录下新建sharp_sword.mcfunction。
(注意,这是一个函数,不同于我们先前编辑的进度)
使用文本编辑软件,写入以下内容:
这样,我们就完成了这样一个含NBT的合成配方。