世界边境
本帖最后由 世界边境 于 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


2021.12 数据,可能有更多内容


前言:
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. }



cuibingwei
有个问题,使用connect谜语之后,中间会有三个需要解密的空,这些放什么怎么定义

世界边境
cuibingwei 发表于 2020-1-1 20:04
有个问题,使用connect谜语之后,中间会有三个需要解密的空,这些放什么怎么定义 ...

不需要去定义,连接谜题是基于合成表的,你只要把与前一项合成直接有关的物品摆进去就可以。
比如左端是个镐子,右端是个木剑,那么他的连接可以是这样的:镐子-木棍(镐子的材料)-木板(木棍的材料)-木棍(木板的产物)-木剑(木棍的产物)。
只要相邻两者在合成上有直接关系就行(前者是后者的产物或材料)