跳到主要内容

4.1 数据驱动物品

如读者所知,物品、方块、实体是组成 Minecraft 世界的三大最重要的组成部分。在本章,我们将从最简单的自定义物品开始入手,来了解附加包的最核心内容。

原版虽然有形形色色的各种物品,但是依然无法满足我们的全部需求。例如:

  • 你一定在某些服务器的主菜单见过各式各样的物品,右键就能调出某些 UI。但是原版物品无法做到。
  • 假如说你想要一种炸弹,落地即炸。但是原版物品没有对应的物品。
  • 假如说你想要一种食物,比如饺子,你可能还需要类似于面粉、肉泥这样的原材料作为合成配方,但是原版没有类似功能的物品。
  • 再假如说你想要一把可以造成 666 伤害的秒人斧,很遗憾,基岩版并不支持锋利等级过高的附魔。

你会在实际遇到各种各样的需求,这就需要我们自定义物品了。

提示

在命令社区的各路大佬大显神通的情况下,其实很多类似的功能确实可以通过命令实现得七七八八。然而,我们必须要强调的是:

  1. 从这里开始,我们学习的是基岩版的模组教程,不是命令。如果你需要命令的相关教程,请移步命令的相关教程,这里并不是讨论命令的地方。
  2. 我们应该坚决反对命令万能论——命令不是万能的!总有一些功能是命令做不到的。而且,因为 Mojang 和微软对命令的优化并不好,一个相同的功能点,通常命令做出来都是性能消耗大、精度又低的。
  3. 我们还应该坚决反对技术等级论——要对命令和附加包等技术持有正确的态度,不要认为用命令就「高人一等」或「低人一等」,也不要认为用附加包就一定「高人一等」。虽然大多数时候用附加包和脚本是最优解,但我们应用某项技术的时候应当从自身实际出发,了解需要什么功能后再决定用什么技术。不要在用数驱或脚本更简单的时候强用命令撑着,也不要在明明使用命令更简单的时候非要使用数驱或脚本来解决一切。

好在,对于 Minecraft 基岩版,自定义物品并不是什么难事。我们只需要按照 Mojang 和微软为我们提供的接口,提供一些必要的数据,剩下的就可以让 Minecraft 自行处理这些数据并注册物品,这就是数据驱动物品(Data-Driven Items,简称数驱物品)

我们后面还会学习到数据驱动方块和数据驱动实体等,这些内容我们统称为数据驱动(或者数驱)。数据驱动的主要优点在于不需要我们自己修改游戏逻辑,不需要我们自己写脚本写代码,只需要简单地提供数据就可以创建各种功能的物品。但缺点就是不能满足我们的一切需求,有一些需求最终还是需要通过脚本实现。

完全可以说,我们自定义物品的过程,就是编写数驱物品的过程。

数驱物品能做到什么?

在正式开始讲怎么写物品之前,我们先来吊一下读者的胃口——来看看以下的这些物品:

  • custom_item_1
    这是我们的地图《冒险小世界:剑之试炼》的自定义武器,它可以增加 25 点的攻击伤害!
  • custom_item_2
    这是我们的地图《30 种死法 2》的物品,右键即可在聊天栏蹦出提示!

是不是很赞?事实上,数驱物品能够实现的功能还是比较广泛的。例如:自定义食物、自定义合成材料、武器、工具、盔甲装备等。虽然我们不能说数驱物品能够实现所有读者想要的功能,但功能也的确足够广泛了。

至于以上几类常见的特殊物品实现,我们就放到第 3 节来详细讲解。

原版物品与数驱物品的关系

从 Mojang 给我们的模板中,好消息是,我们可以看到 Mojang 已经给了我们一些原版物品实例,这意味着我们仍然可以模仿官方的写法去写一个物品。坏消息是,显然这点物品并不是原版物品的全部。怎么回事?我们可以看到原版提供的物品只有食物、收纳袋和一些种子而已,类型十分有限:

vanilla_and_data_driven_1

这是因为,原版的绝大多数物品并不是数驱物品,而是硬编码物品(Hard-Coded Items)。硬编码物品是利用游戏内部代码强行实现的,并不是我们所说的「向游戏引擎提供数据,由游戏引擎自行按数据注册的物品」。因此,绝大多数的原版物品的行为是不可通过数驱物品修改的

这听起来确实很令人沮丧,不过随着脚本(ScriptAPI)的正式推出和不断完善,这种情况已有一些改善。所以,我们需要时不时地尝试拆一些优质的附加包,来帮助我们更好地理解物品的运行原理。

同样地,读者需要注意,我们是不被允许更改原版硬编码物品的——连使用minecraft命名空间都是不被允许的。强行修改原版硬编码物品会导致内容日志报错:

vanilla_and_data_driven_2

不过经过实测,由模板给出的原版物品都是数据驱动的原版物品,比如苹果,这些物品是可以被修改的。所以,非必要情况下请勿修改原版物品。


总结

在本节,我们介绍了什么是数据驱动物品——按照 Mojang 和微软为我们提供的接口,由 Minecraft 自行处理我们提供的数据并注册的物品。数据驱动物品也叫做数驱物品。

我们还简单了解了数驱的概念,知道数驱就是我们简单提供数据,由 Minecraft 自行处理这些数据的过程。凡事都有两面性,它可以简化我们的工作,但缺点就是过于简单的逻辑会导致我们在实现复杂功能的时候还需要借助命令或脚本来实现,这些我们就留到后面再谈了。

数驱物品可以实现的主要内容,就是读者所熟知的那些东西——普通物品、武器、装备、食物、弹射物等等,涵盖的功能也是相对齐全的。

我们还谈到了原版物品和附加包的关系。原版物品大多数都是硬编码的物品,我们在编写物品的过程中,要注意不能使用minecraft命名空间,因为这代表着你写的是原版物品,但事实上并不是。然而,原版所提供的数驱物品,我们是可以随意修改的。