建立配置环境
这步是编写Waila NBT配置文件的基础。首先你需要安装Waila NBT并成功启动一次游戏, 接着就会出现模组的config文件夹, 所有自定义配置文件都需要放进config文件夹才会被读取, 具体路径为游戏目录->.minecraft->config->WailaNBT
*以下图片中有许多都是我添加的, 原生的文件夹内只会出现default.json一个文件
↑↑↑↑
图中出现了两种扩展名的文件, .json与.cfg, 后者大家一定不陌生, 是许多Mod配置文件的常用文件形式; 而.json的编写方式也和.cfg文件一样; 当然编写它们都必须使用JSON格式。你也可以完成编辑cfg文件后将扩展名改为.json
编辑.json/.cfg文件的软件我建议使用Notepad++(下载地址)
新建文件+扩展名, 接着打开进行编辑。下面我会提供一些示例代码及其解释, 请务必按照教程编写 .json文本中只要错一个标点就会使其全部失效。
|
PartA. 配置文件开头(HoldItem)
这是配置文件的开始, 也是以下各种类型配置的通用开头部分。内容为玩家持有何物指向对象时显示相关数据。
这段代码代表着 "当玩家手持火把(torch)时指向熔炉, Waila上显示相关NBT数据, 并且只有当玩家手持火把指向熔炉才会显示数据"
*minecraft:torch意味火把的ID
(1.7.10的文字ID, 查看这类ID可以在安装Inventory Tweak的情况下按下F3+H, 接着会显示在物品信息栏内;
当然模组自带了查看文字ID的指令: 指令为/wnn, 指令回车后ID会出现在对话窗口)
如果你想要玩家持有任何物品(包括空手)都可以查看, 那么写入代码
如果你想要仅空手指向时才能显示数据, 那么写入代码(""中为空, 无空格)
由此我们得出一个开头部分代码的格式, 将不同的ID代入其中即可
|
PartB. 对象方块(TileEntity)
配置文件写到这步就需要使用NBTedit了, 对准熔炉, 输入指令/nbtedit, 即可打开熔炉NBT数据窗口, 如下图
图中红圈标注的即为熔炉的id
*BurnTime与CookTime分别代表"燃料剩余燃烧时间"与"烧制进度", 而"烧制进度"是从1~200的一个进度, 即数值从1进到200就烧制完成一件物品, "燃料剩余燃烧时间"代表熔炉内燃料还能燃烧多少时间, 是个递减数值, 最大数值不定
那么我们就有了以下代码:
- "Furnace": {
- "BurnTime":"Burn Time",
- "CookTime":"Cook Time"
- }
复制代码 第一行意为: 熔炉ID (记住, 对象方块ID必须用在NBT窗口中查到的(TE名), 不能是直接显示的文字ID)
第二行意为: "BurnTime(上面提到的tag, 必须与NBT窗口中完全符合, 包括大小写)":"Burn Time(waila上的显示名, 可以随便填, 没有客观要求)"
第三行意为: "CookTime(tag)":"Cook Time(显示名)"
知道了这些, 我们就可以得出一个代码格式
- "对象方块": {
- "TagA":"显示名A",
- "TagB":"显示名B"
- }
复制代码 *tag的多少是根据物品所含NBT与你的需要来定的, 不必全部写上
接下来是收尾工作, 数数前面你加了几个括号"{", 后面就得加几个"}", 换行加上, 最后得出的总代码是这样的
- {
- ".*": {
- "Furnace": {
- "BurnTime":"Burn Time",
- "CookTime":"Cook Time"
- }
- }
- }
复制代码 接着保存你的.cfg, 你可以不把它的扩展名改成.json, 但是检查一下是否已经放置在.minecraft->config->WailaNBT这个目录里
然后在游戏中输入指令/wnr ,即可刷新配置
然后就可以看到对象方块: 熔炉已经出现了前面我们加上的显示数据 (图中数值应用的单位为Ticks, 且显示名后有"s"字样, 这些问题都在 1.3/1.4 版本的Waila NBT中得以改善)
|
PartC. 对象实体(Entity)
在1.3版本后, Waila NBT支持了实体数据的显示, 实体是类似生物, 矿车等物品。编写实体配置文件时格式/内容与上面所述的没太大区别, 需注意的就是配置开头的代码
模组中新增了一条指令"/wne", 对准实体输入该指令后会在对话窗口显示该实体ID。例如我对着一只羊输入/wne
在对话窗口就出现了其ID - Sheep (必须大写首字母)
接着对羊输入/nbtedit
在NBT编辑窗口出现了许多Tag, 我只示范黄色箭头标出的部分, 先来解释一下
Fire - 生物着火剩余时间, 不着火时值为-1
Age - 生物交配冷却时间, 即一次交配后Age从一定数值递减, 还原到0时才可以进行交配. 幼年动物的"Age"值是一个负数, 当递增到0时即变为成年动物
InLove - 生物发情期剩余时间, 即用对应食物激活交配后产生一个数值, 数值降到0后再无法进行交配
那么我们写入如下代码
- {
- ".*": {
- "Sheep": {
- "Age":"Breed Cooldown",
- "InLove":"Breed Time Remain",
- "Fire":"Fire Time"
- }
- }
- }
复制代码 格式之类的就不再解释了, 唯一改变的内容明显就是ID与Tag, 显示名
接着保存, 在游戏中输入/wnr刷新配置文件, 即可看到效果
你也可以通过这种方式更改非生物实体, 例如熔炉矿车的燃料剩余等数据
|
PartD. TagCompound(Tag组)
接下来示范另一种代码形式, 对象为TE4中的蒸汽能源炉
首先以下代码已经包括了"查看数据物品", "对象ID", "Tag"以及"显示名"这四个部分的代码, 如下:- {
- ".*": {
- "thermalexpansion.DynamoSteam": {
- "Energy":"Energy",
- "Fuel":"Fuel",
- "FuelMax":"Max Fuel",
- "SteamTank>>>Amount":"Steam Amount",
- "WaterTank>>>Amount":"Water Amount"
- }
- }
- }
复制代码 *上面写到的".*"与对象ID我之前解释过了, 我解释一下"Energy", "Fuel"分别代表着"能源炉中存储能量(RF)", "产能进度(从最大数值到最小数值完成一个周期)"
下面是重点内容, 我们对着蒸汽能源炉打开NBT窗口(/nbtedit)
可以看到相比之前的窗口多出了"TagCompound"部分, 即为红色箭头标出的地方, 它的意思是 蒸汽能源炉中存储蒸汽的槽
现在能源炉中没有任何蒸汽, 所以显示Empty(蓝色箭头标出部分)
如果我加入水和煤炭, 使能源炉产生蒸汽, 再次进入nbt edit
可以看到名为"SteamTank"的"TagCompound"下出现了三条新的tag, 我们只需要用到下面两条
第一条Amount, 意味蒸汽多少(mB)
第二条FluidName, 意味蒸汽槽中存储的液体种类 (当然是蒸汽啦, 这不是废话嘛)
("WaterTank"同理)
所以我们在来看看上面完成的代码中, 写到了:
- "SteamTank>>>Amount":"Steam Amount",
- "WaterTank>>>Amount":"Water Amount"
复制代码 可以看到多出了">>>"这串代码, 这就代表着从NBT根目录到StamTank/WaterTank的TagCompound中获取数据
同理可得FluidName的代码:
- "SteamTank>>>FluidName":"Steam",
- "WaterTank>>>FluidName":"Water"
复制代码 与应对"TagCompound"的代码格式:
- "TagA(Tag组)>>>TagB/C/D":"显示名"
复制代码
来看一下效果吧, TagCompound中的数据也能显示在Waila上了
另外你可能还会遇到一个问题, 就是一个TagList下带有多个Tag组, 且它们自身没有可以分辨的名字, 例如
1.4版本的Waila NBT解决了这个问题, 你可以在写代码时从0开始对应每一个无名的Tag组
例如图中的两个Tag组, 可以在代码中写成如下格式
- "TagList>>>0>>>Tag组下的Tag1":
复制代码- "TagList>>>1>>>Tag组下的Tag2":
复制代码 如此一来就对应了两个Tag组
|
PartE. 衔接代码
这里示范两种衔接代码的形式:
第一种, 将两个不同模组, Tag名, 显示名, TE名都不同的物品代码部分并放在一个配置文件中, 即空手时既能查看熔炉数据又能查看蒸汽能源炉数据。代码如下
- {
- ".*": {
- "Furnace": {
- "BurnTime":"Burn Time",
- "CookTime":"Cook Time"
- },
- "thermalexpansion.DynamoSteam": {
- "Energy":"Energy",
- "Fuel":"Fuel",
- "FuelMax":"Max Fuel",
- "SteamTank>>>Amount":"Steam Amount",
- "WaterTank>>>Amount":"Water Amount"
- }
- }
- }
复制代码 其实内容不需要什么改动, 你也可以无限制的衔接各种代码. 需要注意的地方是在一个部分的结尾"}"后必须加上"," 否则会被视为无效代码
第二种, 将在同一个模组中, 且TE名开头有相同之处的物品合并在一起
大家可以去下个旋转工艺(RotaryCraft), 用/nbtedit查查里面的机器, TE名开头都为"RC"。例如DC引擎: "RCdc"、转轴: "RCshaft"等等... 遇到带有类似这样TE名的物品就可以直接按照如下代码编写
- {
- ".*": {
- "共通TE名开头.*": {
- "Tag名A":"显示名A",
- "Tag名B":"显示名B"
- }
- }
- }
复制代码 这样的话只要是TE名为RC开头的物品, 且拥有其中的Tag名, 就可以通用显示。如果遇上类似情况可以减少配置文件的大小和工作量
|
PartF. 让NBT数据显示在Tooltip上
1.3版本新加入的功能; 因为写该功能的配置文件时要更改开头部分的代码, 所以我建议将一些物品的tooltip代码合起来放在一个新的配置文件里
Tooltip配置代码不需要在内容或格式上作太大的改动, 唯一要改动的就是开头代码(持有物品)
改成这样, 然后在下面继续写物品ID, Tag名和显示名之类的就可以了
P.S. 其实我感觉现在这个功能没什么太大的意义, 无非就是可以显示背包中一些机器的能量储存量什么的..
下图是作者Sama在自己blog贴的一份tooltip代码教程, 是显示头颅所有者, 查看头颅(对象物件)的途径是把它放进箱子里, 然后nbtedit箱子, 在TagCompound中找到相关数据。 大家勉强按照这个操作自己写吧....
|
PartG. 更改string的字体, 颜色等显示
这个功能也是前两天作者Sama告诉我的, 是Waila的自带功能, 大家可以在Waila源码中的"SpecialChars.java"文件中找到。这里我列举一下+解释使用方法, 效果我就不发图了
首先先要知道MCStyle / WailaStyle / WailaIcon这三条string, 一些自定义的显示样式都是建立在这个基础上的
MCStyle = \u00A7
WailaStyle = \u00A4
WailaIcon = \u00A5
*例如如下所说的"MCStyle +0", 即要写成"\"的形式, 并加在显示名或Tag名或其它string的前面, 且在' '内- "Tag名":"function p(v){var r = (v);return '\u00A70显示名: '+r+'\u00A70后缀内容'};"
复制代码 A. MCStyle部分, 将显示的string改为
黑色字体 - MCStyle +0
深蓝色字体 - MCStyle +1
深绿色字体 - MCStyle +2
青色字体 - MCStyle +3
深红色字体 - MCStyle +4
深紫色字体 - MCStyle +5
金色字体 - MCStyle +6
灰色字体 - MCStyle +7
深灰色字体 - MCStyle +8
蓝色字体 - MCStyle +9
绿色字体 - MCStyle +a
亮青色字体 - MCStyle +b
红色字体 - MCStyle +c
亮紫色字体 - MCStyle +d
黄色字体 - MCStyle +e
白色字体 - MCStyle +f
OBF(波动的乱码) - MCStyle +k
粗体 - MCStyle +l
划横线 - MCStyle +m
下划线 - MCStyle +n
斜体 - MCStyle +o
重置为默认显示的字体 - MCStyle +r
B. WailaStyle&WailaIcon部分, 在显示的string前面
加上一颗心的标志 - WailaStyle+WailaIcon +a
加上半颗心的标志 - WailaStyle+WailaIcon +b
加上空心的标志 - WailaStyle+WailaIcon +c
Tab空格string - WailaStyle+WailaStyle+a
居右string- WailaStyle+WailaStyle+b
居中string- WailaStyle+WailaStyle+c
|
PartH. 更改NBT数据的显示
Waila NBT的1.4版本新增功能。之前一定有人抱怨有些NBT数据太奇葩, 不好理解什么的, 现在就出现了自行更改 / 处理数据显示的功能
先说明一下, 1.4版本之前的那种代码形式仍然能用, 即为上述教程使用的形式
A. 在NBT数据的string后加上单位等字样 & 值的运算处理
这个嘛... 要改的就是"显示名"部分的代码, 将例如我想在蒸汽能源炉的"Energy"后加上"RF"单位, 就如下编写
- {
- ".*": {
- "thermalexpansion.DynamoSteam": {
- "Energy":"function p(v){var r = (v);return 'Energy: '+r+' RF'};"
- }
- }
- }
复制代码 很明显可以看出代码变的更加复杂, 使用了javascript, 所以我在这里解释一下
function p(v){var r =function语句, 不用管加上就可以了
{var r = (v);值的处理, 可以在(v)括号中改成v/20或v*20等运算, 具体"v"代表NBT数据的值, "v/20"即为数值除以20, 其它运算同理
如果不想让v进行运算处理, 那么直接写入(v)
return 'Energy: '+r+' RF'};"
'Energy' 显示名, 不作解释。' '内的内容无客观要求, 就如同普通的显示名
+r+ "r"为NBT数据的值, 配合前部分可以理解为"Energy: 数值"
'RF' 加上的后缀内容, 不作解释
所以我们可以得出一个代码格式, 将一些代码代入其中即可
- "Tag名":"function p(v){var r = (v或v的运算);return '显示名'+r+'后缀内容'};"
复制代码 *如果你只想更改值的运算, 不想在后面加一些显示内容, 就直接在"+r"后结尾- "Tag名":"function p(v){var r = (v或v的运算);return '显示名: '+r};"
复制代码 *如果你只想加后缀内容
- "Tag名":"function p(v){;return '显示名: '+r+'后缀内容'};"
复制代码
B. 去除小数的显示
这个问题也有人反馈过, 现在已经能够解决了, 代码格式为
- "Tag名":"显示名 %.保留位数f 可加后缀内容"
复制代码 或
- "Tag名":"function p(v){var r = (v或v的运算);return '显示名: '+r.toFixed(保留位数)+'可加后缀内容'};"
复制代码 以上两种格式的代码都可以, 如果你不想留有小数, 就可以写成"%.0f"或".toFixed(0)"
需注意的是, 如果一个原来就没有小数的值被加上这样的代码将会强制留有小数
C. 将NBT数据中的物品ID转换为对应的名字
例如你编写配置文件使Waila能显示漏斗中的物品, 但原有NBT数据都会显示为物品的id。这个时候就可以用如下代码
- "Items>>>0>>>id": "function p(v){return names[v]}"
复制代码 这种代码的格式为
- "TagList名>>>TagCompound组数>>>id": "function p(v){return names[v]}"
复制代码 其中"TagCompound组数"代表着第几组TagCompound, 这个在PartD中有详细说明
来看一下效果, 首先是NBT显示处理, 对比以前教程里发的那张图, 可以看出已经得到了很大的优化
具体处理了: string字体颜色>白色 / 各种显示名+冒号+单位
所写的代码为
- {
- ".*": {
- "thermalexpansion.DynamoSteam": {
- "Energy":"function p(v){var r = (v);return '\u00A7fEnergy: '+r+' RF'};",
- "Fuel": "function p(v){var r = (v);return '\u00A7fFuel Left: '+r};",
- "FuelMax": "function p(v){var r = (v);return '\u00A7fMax Fuel: '+r};",
- "SteamTank>>>Amount": "function p(v){var r = (v);return '\u00A7fSteam Amount: '+r+' mB'};",
- "WaterTank>>>Amount": "function p(v){var r = (v);return '\u00A7fWater Amount: '+r+' mB'};"
- }
- }
- }
复制代码
漏斗和矿车漏斗 (作者Sama的截图), 显示了内存物品数量及物品名称
|
JavaScript语句
1.4版本后的Waila NBT已经支持了js语句, 也就是说可以用if , switch , while等语句来写配置文件, 运算符, 逻辑运算符也能参与配置文件
|
|