📔
TerraCraft
  • TerraCraft
  • English
    • Mod Document
      • Mod Dev Official Tutorial
      • Mod API Document
        • Data Types and Enums
        • JSON
        • Entity
        • NPC
  • 简体中文(旧版教程)
    • 模组文档
      • Engine API
        • App
        • AssetBundle
        • AtlasInfo
        • AtlasTextureManager
        • Audio
        • Bytes
        • File
        • GameObject
        • GlobalHook
        • Graphics
        • Hotfix
        • Image
        • ImageInfo
        • IntegratedClient : IntegratedEnv
        • IntegratedEnv
        • JsonUtil
        • Log
        • MathHelper
        • Matrix
        • Path
        • Random
        • Rect
        • Rigidbody
        • TextureLocation
        • TextureManager
        • Transform
        • Vector2
        • Vector3
        • Vector4
      • Game API
        • Attack
        • ArrayList<T>
        • EffectUtils
        • Entity
        • LightingUtils
        • ModNpc
        • ModProjectile
        • Npc : Entity
        • NpcUtils
        • Projectile : Entity
        • ProjectileUtils
        • Reg
        • SoundUtils
        • Utils
      • 模组API文档
        • 数据类型、枚举类型
        • JSON API
        • 引用API
        • 注册信息API
        • 语言API
        • 通用API
        • 物品API
        • 实体API
        • 特效API
        • 抛射物API
        • 状态效果API
        • 附魔API
        • 玩家API
        • NPC API
        • 骨骼模型API
        • 光照API
        • 音效API
        • 方块API
        • 方块实体API
        • 地图API
        • 渲染API
        • 指令API
        • 用户图形界面UI
        • 其他API
      • 模组开发官方教程
        • ExampleMod源代码仓库
        • 1.0 教程对应游戏版本(Indev 1.1)
        • 1.1 开始
        • 1.2 安装Visual Studio Code
        • 1.3 配置模组环境
        • 1.4 认识模组路径
        • 1.5 认识JSON数据表
        • 1.6 第一个物品
        • 1.7 认识地图元素
        • 1.8 第一个图块TODO
        • 1.9 第一个家具TODO
        • 1.10 加入合成表TODO
        • 未完待续……
      • 模组数据表文档
        • 基本JSON类型
        • 模组配置表(tcmod.json)
        • 物品表(contents/items/...)
        • 物品配置表
        • 弹药表(ammos.json)
        • 状态效果表(buffs.json)
        • 音效配置表(sound_config.json)
        • 音效表(sounds.json)
        • 背景表(backgrounds.json)
        • 皮肤表(skins.json)
        • 着色器表(shaders.json)
  • 新版教程
    • 1 基础部分
      • 1.1 安装集成开发环境
      • 1.2 获取TerraCraft源码
      • 1.3 认识Lua
      • 1.4 Mod架构
      • 1.5 游戏主生命周期和主状态机
      • 1.6 Lua实战
      • 1.7 第一个物品
      • 1.8 本地化翻译
      • 1.9 配方系统初探和矿物字典
Powered by GitBook
On this page
  • JSON数据表的命名空间
  • 数据表注册机制
  • 编写建议

Was this helpful?

  1. 简体中文(旧版教程)
  2. 模组文档
  3. 模组开发官方教程

1.5 认识JSON数据表

Previous1.4 认识模组路径Next1.6 第一个物品

Last updated 4 years ago

Was this helpful?

在整个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_egg、ender_zombie、ironman_mark38。

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