前言:
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
- tree
- _constants.json
- domain
- technologies
- ftgumod
在存档文件夹中,FTGU的配置文件结构如下:
- world save folder
- data
- technologies
- domain
- _constants.json
- tree
- name.json
- name.json
- tree
- name.json
- name.json
- domain
- technologies
- data
当在mod中添加配置文件时,mod id将会作为科技文件的domain(域)。 文件夹结构也有一点不同:
- resources
- assets
- modid
- technologies
- _constants.json
- tree
- name.json
- name.json
- tree
- name.json
- name.json
- technologies
- modid
- assets
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坐标,例如:
- {
- "display": {
- "x": 10,
- "y": 6
- }
- }
灵感配方
灵感配方在idea对象中设置。该对象有两个标签: amount和ingredients。 amount 是从1到3的整数,他表示idea配方中需要多少个特殊物品才能发现科技;ingredients是可选物品的列表,它需要的物品数目至少为amount中标识的数目。
例如:
- {
- "idea": {
- "amount": 2,
- "ingredients": [
- {
- "item": "minecraft:stone",
- "data": 0
- },
- {
- "item": "minecraft:cobblestone"
- },
- {
- "item": "minecraft:dirt",
- "data": 0
- }
- ]
- }
- }
研究配方
研究配方在 research 对象中设置。如果不进行设置,那么灵感工作台将会直接提供给玩家研究羊皮卷。 有两种类型的谜题可供选择:ftgumod:match 和 ftgumod:connect。使用哪种谜题由type标签指定。
匹配谜题
除了type标签,一个匹配谜题还会包含pattern标签和一个 key标签.
pattern标签是一个字符串数组,每一个唯一的字符都是一个不同的项目。 它必须由3个字符串组成,而且每个字符串必须有3个字节。每个字符串都是研究台中的一行。如果一个位置中没有任何东西,可以使用空格
key 标签是一个对象,他决定什么字符属于什么项。其中的每个对象都包含另外三个标签: item、hint和decipher。 item是一个物品,hint是一条关于该位置的提示。 decipher是可选的,它的决定是你用放大镜检查一个方块时给予的提示。 decipher是一个对象数组。每一个对象都含有一个hint和一个decipher。decipher是一个方块名。
例如:
- {
- "research": {
- "type": "ftgumod:match",
- "pattern": [
- " ",
- "CIC",
- "CFC"
- ],
- "key": {
- "C": {
- "item": {
- "item": "minecraft:cobblestone"
- },
- "hint": "Insulator"
- },
- "I": {
- "item": {
- "item": "minecraft:iron_ore"
- },
- "hint": "Smelt"
- },
- "F": {
- "item": {
- "item": "minecraft:furnace"
- },
- "hint": "Heat",
- "decipher": [
- {
- "hint": "Furnace",
- "decipher": {
- "block": "minecraft:furnace"
- }
- }
- ]
- }
- }
- }
- }
链接谜题
除了type标签,一个链接谜题还包含left和right 标签。它们都是一个物品。
例如:
- {
- "research": {
- "type": "ftgumod:connect"
- "left": {
- "item": "minecraft:planks",
- "data": 0
- },
- "right": {
- "item": "minecraft:wool",
- "data": 0
- }
- }
- }
解锁
unlock 标签是一个物品的数组。当科技研究完成时,这些物品的合成表将会被解锁。
例如:
- {
- "unlock": [
- {
- "item": "minecraft:glass"
- },
- {
- "item": "minecraft:stained_glass",
- "data": 32767 // Wildcard value, all stained glass will be unlocked
- }
- ]
- }
MOD支持
Game Stages
如果你安装了Game Stages,科技是通过阶段来解锁的。将一个科技锁定到一个阶段很简单:只要添加gamestage标签,例如:
- { "gamestage": "iron_age" }
要令科技解锁一个阶段,你需要添加一个gamestages:stage类型的解锁。包含有一个 stage 标签(解锁了什么阶段)和一个 message标签 (解锁后向玩家发送什么消息)。如果没有 message,那么将会发送一个Game Stages默认的消息。
例如:
- {
- "unlock": [
- {
- "type": "gamestages:stage",
- "stage": "iron_age",
- "message": "You have now entered the Iron Age!"
- }
- ]
- }
沉浸工程
如果你安装了沉浸工程,科技还能解锁多方块结构。为了实现这个目的,你需要添加一个 immersiveengineering:multiblock类型的解锁。 它还包含一个multiblock标签。
例如:
- {
- "unlock": [
- {
- "type": "immersiveengineering:multiblock",
- "multiblock": "IE:CokeOven"
- }
- ]
- }
常量
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
- tab/
- _constants.json
创建常量
- {
- "ingredient": [ // A list of items
- {
- "item": "minecraft:stone_slab",
- "data": 3
- },
- {
- "item": "minecraft:stone_stairs"
- },
- {
- "item": "minecraft:cobblestone_wall",
- "data": 0
- },
- {
- "item": "minecraft:cobblestone_wall",
- "data": 1
- }
- ],
- "name": "cobble" // The name of the constant
- }
- ]
用法
你可以在任何位于相同的domain文件夹下的科技文件里使用该常量。
- {
- "item": "#cobble"
- }