本帖最后由 世界边境 于 2019-4-1 11:29 编辑


前言:
FTGU是一个独具创意的mod,它模仿神秘时代的配方解锁方式将游戏中的合成表锁定,给玩家带回第一次进入Minecraft时的体验。

虽然FTGU这个mod已经发布了一些时日,而且也已经有了不少或知名或无名的玩家做了攻略或实况。
但是至今仍没有玩家发布关于如何编写FTGU配置文件的教程,于是我翻译了mod作者在Github上的wiki,希望能对各个整合包作者或玩家提供一些微小的帮助。
鉴于1.10/1.11版本已经落后太多,所以我并不打算翻译利用CraftTweaker进行配置的那篇文档。

官方文档地址:https://github.com/Astavie/From-the-Ground-Up/wiki/JSON



JSON


FTGU允许玩家利用JSON文件来创建自定义科技树。这种文件类型也同样被用于自定义Minecraft原版进度和战利品列表。 FTGU的"科技"文件类似于"进度"文件,而且使用了一些与"进度"文件相同的结构或语句。

文件夹结构


FTGU遵循严格的文件夹结构, 由domain(域)、tree(树)、name(名)组成。内部ID是由这些东西结合在一起组成的,结构如下: domain:tree/name。 配置文件可以被放在以下三个位置:config文件夹里,存档文件夹里或者mod的jar文件里。


在config文件夹中,FTGU的配置文件结构如下:
  • config
    • ftgumod
      • technologies
        • domain
          • _constants.json
            • tree
              • name.json
              • name.json
            • tree
              • name.json
              • name.json

在存档文件夹中,FTGU的配置文件结构如下:
  • world save folder
    • data
      • technologies
        • domain
          • _constants.json
          • tree
            • name.json
            • name.json

          • tree
            • name.json
            • name.json

当在mod中添加配置文件时,mod id将会作为科技文件的domain(域)。 文件夹结构也有一点不同:
  • resources
    • assets
      • modid
        • technologies
          • _constants.json
          • tree
            • name.json
            • name.json
          • tree
            • name.json
            • name.json


Domain、tree和name可以相同,但是最终的mod id必须不同。
比如同一个域下可以有两个相同名字的科技,但是它们不能在同一个tree里,或上一级的tree名不能一样





科技

科技文件类似于Minecraft
进度文件。它们有一个display标签,可以有requirements标签,甚至可以有rewards标签。文件中的任何内容都在object {}中。
以下是标签列表:

名称 数据类型 描述
display Object {} 描述该科技如何在科技书中显示出来
parent String "" 父科技的mod id
start 布尔型 true/false 如果设置成true,那么在游戏一开始的时候,这个科技就是研究完成的状态
copy 布尔型 true/false 如果设置为false,则无法在研究书籍中拷贝该科技
criteria Object {} 一个进度列表。满足该列表才能解锁这个科技
requirements Array [] 一组标准数组。如果requirements数组中的所有数组全都满足至少一个条件,则该科技将被解锁
idea Object {} 发现该科技的idea(灵感)配方
research Object {} 解锁该科技的research(研究)配方
unlock Array [] 研究完成后,可以合成的物品的列表
rewards Object {} 研究完成后,给于的进度成就的列表

display、criteria、 requirements和 rewards 是直接取自于进度配置文件的JSON格式,只在display标签有一点不同:你可以设置在科技书中的x、y坐标,例如:
  1. {
  2.     "display": {
  3.         "x": 10,
  4.         "y": 6
  5.     }
  6. }
复制代码


灵感配方

灵感配方在idea对象中设置。该对象有两个标签: amount和ingredients。 amount 是从1到3的整数,他表示idea配方中需要多少个特殊物品才能发现科技;ingredients是可选物品的列表,它需要的物品数目至少为amount中标识的数目。
例如:
  1. {
  2.    "idea": {
  3.        "amount": 2,
  4.        "ingredients": [
  5.             {
  6.                 "item": "minecraft:stone",
  7.                 "data": 0
  8.             },
  9.             {
  10.                 "item": "minecraft:cobblestone"
  11.             },
  12.             {
  13.                 "item": "minecraft:dirt",
  14.                 "data": 0
  15.             }
  16.        ]
  17.    }
  18. }
复制代码

研究配方


研究配方在 research 对象中设置。如果不进行设置,那么灵感工作台将会直接提供给玩家研究羊皮卷。 有两种类型的谜题可供选择:ftgumod:match 和 ftgumod:connect。使用哪种谜题由type标签指定。


匹配谜题

除了type标签,一个匹配谜题还会包含pattern标签和一个 key标签.
pattern标签是一个字符串数组,每一个唯一的字符都是一个不同的项目。 它必须由3个字符串组成,而且每个字符串必须有3个字节。每个字符串都是研究台中的一行。如果一个位置中没有任何东西,可以使用空格
key 标签是一个对象,他决定什么字符属于什么项。其中的每个对象都包含另外三个标签: item、hint和decipher。 item是一个物品,hint是一条关于该位置的提示。 decipher是可选的,它的决定是你用放大镜检查一个方块时给予的提示。 decipher是一个对象数组。每一个对象都含有一个hint和一个decipher。decipher是一个方块名。
例如:
  1. {
  2.     "research": {
  3.         "type": "ftgumod:match",
  4.         "pattern": [
  5.             "   ",
  6.             "CIC",
  7.             "CFC"
  8.         ],
  9.         "key": {
  10.             "C": {
  11.                 "item": {
  12.                     "item": "minecraft:cobblestone"
  13.                 },
  14.                 "hint": "Insulator"
  15.             },
  16.             "I": {
  17.                 "item": {
  18.                     "item": "minecraft:iron_ore"
  19.                 },
  20.                 "hint": "Smelt"
  21.             },
  22.             "F": {
  23.                 "item": {
  24.                     "item": "minecraft:furnace"
  25.                 },
  26.                 "hint": "Heat",
  27.                 "decipher": [
  28.                     {
  29.                         "hint": "Furnace",
  30.                         "decipher": {
  31.                             "block": "minecraft:furnace"
  32.                         }
  33.                     }
  34.                 ]
  35.             }
  36.         }
  37.     }
  38. }
复制代码

链接谜题

除了type标签,一个链接谜题还包含left和right 标签。它们都是一个物品。
例如:
  1. {
  2.     "research": {
  3.         "type": "ftgumod:connect"
  4.         "left": {
  5.             "item": "minecraft:planks",
  6.             "data": 0
  7.         },
  8.         "right": {
  9.             "item": "minecraft:wool",
  10.             "data": 0
  11.         }
  12.     }
  13. }
复制代码

解锁

unlock 标签是一个物品的数组。当科技研究完成时,这些物品的合成表将会被解锁。
例如:
  1. {
  2.     "unlock": [
  3.         {
  4.             "item": "minecraft:glass"
  5.         },
  6.         {
  7.             "item": "minecraft:stained_glass",
  8.             "data": 32767 // Wildcard value, all stained glass will be unlocked
  9.         }
  10.     ]
  11. }
复制代码

MOD支持


Game Stages


如果你安装了Game Stages,科技是通过阶段来解锁的。将一个科技锁定到一个阶段很简单:只要添加gamestage标签,例如:
  1. { "gamestage": "iron_age" }
复制代码
要令科技解锁一个阶段,你需要添加一个gamestages:stage类型的解锁。包含有一个 stage 标签(解锁了什么阶段)和一个 message标签 (解锁后向玩家发送什么消息)。如果没有 message,那么将会发送一个Game Stages默认的消息。
例如:
  1. {
  2.     "unlock": [
  3.         {
  4.             "type": "gamestages:stage",
  5.             "stage": "iron_age",
  6.             "message": "You have now entered the Iron Age!"
  7.         }
  8.     ]
  9. }
复制代码


沉浸工程

如果你安装了沉浸工程,科技还能解锁多方块结构。为了实现这个目的,你需要添加一个 immersiveengineering:multiblock类型的解锁。 它还包含一个multiblock标签。
例如:

  1. {
  2.     "unlock": [
  3.         {
  4.             "type": "immersiveengineering:multiblock",
  5.             "multiblock": "IE:CokeOven"
  6.         }
  7.     ]
  8. }
复制代码



常量


FTGU允许用户为他们的科技创建自定义常量。每个常量都是一个项目列表,你可以为它命名,当需要在JSON中使用时,只需要在名字前面加上#号。



常量JSON文件

要创建常量文件,必须将其命名为_constants.json否则他无法工作。 FTGU遵循严格的文件夹结构,类似于原版进度文件。本例中, _constants.json文件是在你的domain文件夹下。对于domain:tab/tech的文件结构,你可以把常量文件放在domain:_constants.json
  • domain/
    • _constants.json
      • tab/
        • tech1.json
        • tech2.json

      • tab2/
        • tech1.json
        • tech2.json

创建常量

  1.   {
  2.     "ingredient": [ // A list of items
  3.       {
  4.         "item": "minecraft:stone_slab",
  5.         "data": 3
  6.       },
  7.       {
  8.         "item": "minecraft:stone_stairs"
  9.       },
  10.       {
  11.         "item": "minecraft:cobblestone_wall",
  12.         "data": 0
  13.       },
  14.           {
  15.         "item": "minecraft:cobblestone_wall",
  16.         "data": 1
  17.       }
  18.     ],
  19.     "name": "cobble" // The name of the constant
  20.   }
  21. ]
复制代码


用法

你可以在任何位于相同的domain文件夹下的科技文件里使用该常量。
  1. {
  2.    "item": "#cobble"
  3. }
复制代码