1.5 认识JSON数据表

在整个Mod开发流程中填写相关数据通常采用编写JSON数据表的形式进行,而逻辑处理则采用编写Lua脚本语言进行。仅仅进行数据表填写操作,也可以完成大部分Mod的功能。

JSON数据表的命名空间

Mod对于所有对象均采用JSON数据表的形式进行初始化。数据表内部所有的名称使用空间均为Mod所在的私有空间,而不是使用全局空间。如果想要进行Mod之间的联动,需要指向其他Mod的对象,请使用其他Mod的命名空间:名称。举个例子:

假设当前加载了命名空间为happy_days和coco_world的两个模组,happy_days模组有一个叫做cat_bullet的物品,coco_world模组希望与happy_days模组进行联动,设计了一把枪械叫做dog_gun,希望用happy_days的cat_bullet作为弹药。 那么在coco_world数据表的dog_gun中写入的弹药物品应为happy_days:cat_bullet。如果直接写cat_bullet只会在原版物品和当前模组物品中查找这个名称,找不到就直接报错。

如果Mod私有空间中的对象名称跟TerraCraft原版名称相同,则实际指向Mod的这个对象,而不是TerraCraft原版的对象。如果想指向TerraCraft原版的对象,请使用tc:名称。还是举个例子:

假设当前希望编写一个模组,将9个原版泥土合成1个钻石,而当前模组已经出现了命名为dirt的物品。如果直接使用dirt,那么会采用模组的dirt来合成钻石。而如果使用tc:dirt,则会采用原版的泥土合成钻石。

数据表注册机制

在编写第一个数据表之前,您需要简单地了解一下数据表是干什么用的。游戏在加载所有模组时会自动对数据表的每个对象进行注册(Register),之后每个对象会得到游戏内动态生成的唯一数字ID,这个数字ID在整个游戏运行时是不会发生改变的。这个知识点在Lua脚本教程中会用到哦0w0。

编写建议

如果你想要编写一个数据表,我们建议从/devmods/terracraft/data以及/devmods/terracraft/contents中仿照对应数据表的格式进行编写。同时您应该按照严格格式的数据表规范进行编写,参阅模组数据表文档。注意,数据表严格采用JSON格式填写,并且并不支持注释。

使用VS Code编写JSON文件时,VS Code会智能地提示出现语法错误的地方,您可以根据VS Code的提示修正语法问题。

contents文件夹下的所有JSON文件一般而言,均为此类格式:

{
  "id名称": {
    "属性1": "值",
    "属性2": "值",
    ...
  }
}

其中,id名称表示即将注册到游戏中对应游戏元素的id。

实体化id名称(如NPC、方块、物品、成就、等)应使用小写+下划线+数字命名,数字不能在最前面。例如:golden_eggender_zombieironman_mark38

功能性id名称(如方块实体、NPCAI、抛射物AI、特效AI、GUI等)应使用大驼峰命名(UpperCamelCase):每个单词的第一个字母大写,其他字母小写。例如:IronmanEffectSuperChest128

Last updated