本篇教程由作者设定使用 CC BY-NC-SA 协议。
准备工作
安装mod。
启动游戏,你会在 .minecraft\config\requious 文件夹找到5个json文件,这五个json文件将作为我们修改的基础。
如果可以,建议下载Visual Studio Code来编辑json/zs文件。
(后文中如果没有指定文件地址,默认为.minecraft\config\requious)
自定义流体单元
原始文件
打开 fluid_cell.json ,默认的json代码是这样的:
[
{
"generateSubItems": true,
"capacity": 1000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "cell",
"model": "requious:cell",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"stackSize": 64
}
]
具体信息
每个流体单元的json信息:
名称 | 类型 | 含义 |
generateSubItems | boolean | ? |
capacity | int | 流体存储量(mb) |
minInput | 每次最小输入流体量(mb) | |
maxInput | 每次最大输入流体量(mb) | |
minOutput | 每次最小输出流体量(mb) | |
maxOutput | 每次最大输出流体量(mb) | |
showTooltip | boolean | 是否显示流体信息 |
resourceName | string | 注册物品名,如"cell" → "requious:cell" |
model | string | 模型名,如"requious:cell" → "assets/requious/models/item/cell.json" |
stackSize | short | 最大堆叠,1~64 |
名称 | 子成员 | 类型 | 含义 |
colors | r | short | RGBA颜色,每个数组对应一个图层 |
g | short | ||
b | short | ||
a | short |
json分解(?)
[{对象}数组] | {对象} | generateSubItems(boolean) | |||
capacity(int) | |||||
minInput(int) | |||||
maxInput(int) | |||||
minOutput(int) | |||||
maxOutput(int) | |||||
resourceName(string) | |||||
model(string) | |||||
stackSize(int) | |||||
colors(对象数组) | {对象} | r(short) | |||
g(short) | |||||
b(short) | |||||
a(short) | |||||
……(另一个格式同上的对象) | |||||
……(另一个格式同上的对象) |
自定义带电量物品
简称电池
原始文件
打开 fluid_cell.json ,默认的json代码是这样的:
[
{
"capacity": 1000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "battery_copper",
"model": "requious:battery_small",
"colors": [
{
"r": 220,
"g": 64,
"b": 16,
"a": 255
},
{
"r": 255,
"g": 192,
"b": 64,
"a": 255
}
],
"stackSize": 64
},
{
"capacity": 2000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "battery_iron",
"model": "requious:battery_medium_fill0",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
{
"r": 255,
"g": 192,
"b": 64,
"a": 255
},
{
"r": 255,
"g": 0,
"b": 0,
"a": 255
}
],
"stackSize": 64
},
{
"capacity": 64000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "energy_gem",
"model": "requious:energy_diamond",
"colors": [
{
"r": 255,
"g": 0,
"b": 0,
"a": 255
},
{
"r": 255,
"g": 192,
"b": 192,
"a": 255
}
],
"stackSize": 64
},
{
"capacity": 256000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "lapotron",
"model": "requious:lapotron_diamond",
"colors": [
{
"r": 0,
"g": 0,
"b": 255,
"a": 255
},
{
"r": 192,
"g": 192,
"b": 255,
"a": 255
},
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"stackSize": 64
},
{
"capacity": 2048000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "lapotron_orb",
"model": "requious:containment_gem",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
{
"r": 0,
"g": 0,
"b": 255,
"a": 255
}
],
"stackSize": 64
},
{
"capacity": 68000000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "quantron",
"model": "requious:lapotron_emerald",
"colors": [
{
"r": 128,
"g": 255,
"b": 0,
"a": 255
},
{
"r": 255,
"g": 255,
"b": 192,
"a": 255
},
{
"r": 64,
"g": 64,
"b": 64,
"a": 255
}
],
"stackSize": 64
},
{
"capacity": 1000000000,
"minInput": 0,
"maxInput": 2147483647,
"minOutput": 0,
"maxOutput": 2147483647,
"showTooltip": true,
"resourceName": "positron_unit",
"model": "requious:containment_fill0",
"colors": [
{
"r": 128,
"g": 255,
"b": 192,
"a": 255
},
{
"r": 255,
"g": 255,
"b": 0,
"a": 255
}
],
"stackSize": 64
}
]
具体信息
每个带电量物品的json信息:
名称 | 类型 | 含义 |
capacity | int | FE存储量 |
minInput | 每次最小输入FE | |
maxInput | 每次最大输入FE | |
minOutput | 每次最小输出FE | |
maxOutput | 每次最大输出FE | |
showTooltip | boolean | 是否显示电量信息 |
resourceName | string | 注册物品名,如"battery_copper" → "requious:battery_copper" |
model | string | 模型名,如"requious:battery_small" → "assets/requious/models/item/battery_small.json" |
stackSize | short | 最大堆叠,1~64 |
名称 | 子成员 | 类型 | 含义 |
colors | r | short | RGBA颜色,每个数组对应一个图层 |
g | short | ||
b | short | ||
a | short |
json分解(?)
[{对象}数组] | {对象} | capacity(int) | |||
minInput(int) | |||||
maxInput(int) | |||||
minOutput(int) | |||||
maxOutput(int) | |||||
resourceName(string) | |||||
model(string) | |||||
stackSize(int) | |||||
colors(对象数组) | {对象} | r(short) | |||
g(short) | |||||
b(short) | |||||
a(short) | |||||
……(另一个格式同上的对象) | |||||
……(另一个格式同上的对象) |
很明显这俩几乎都是一模一样的……
自定义机器
自定义激光
注:"激光"是ReF自己加的无线传输格式,且未完成。
自定义流体/气体激光
原始文件
打开 fluid_emitter.json ,默认的json代码是这样的:
[
{
"capacity": 1000,
"allowLiquid": false,
"allowGas": false,
"minTemperature": 0,
"maxTemperature": 0,
"interval": 40,
"canEmit": false,
"canReceive": false,
"canRelay": false,
"resourceName": "liquid_emitter",
"model": "requious:fluid_emitter",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
},
{
"capacity": 1000,
"allowLiquid": false,
"allowGas": false,
"minTemperature": 0,
"maxTemperature": 0,
"interval": 40,
"canEmit": false,
"canReceive": false,
"canRelay": false,
"resourceName": "gas_emitter",
"model": "requious:fluid_emitter",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
}
]
能量激光
原始文件
[
{
"capacity": 64,
"interval": 40,
"canEmit": false,
"canReceive": false,
"canRelay": false,
"resourceName": "red_emitter_basic",
"model": "requious:red_emitter",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
},
{
"capacity": 128,
"interval": 20,
"canEmit": false,
"canReceive": false,
"canRelay": false,
"resourceName": "red_emitter_advanced",
"model": "requious:red_emitter",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
}
]
自定义机器
原始文件
[
{
"placeType": "Any",
"layerType": "Cutout",
"hasGUI": true,
"extraVariants": [],
"resourceName": "item_gate",
"model": "requious:assembly_block",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
},
{
"placeType": "Any",
"layerType": "Cutout",
"hasGUI": true,
"extraVariants": [],
"resourceName": "laser",
"model": "requious:assembly_laser",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
},
{
"placeType": "Any",
"layerType": "Cutout",
"hasGUI": true,
"extraVariants": [],
"resourceName": "assembler",
"model": "requious:assembly_slab",
"colors": [
{
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
],
"hardness": 5.0,
"blastResistance": 5.0,
"aabb": {
"x1": 0.0,
"y1": 0.0,
"z1": 0.0,
"x2": 1.0,
"y2": 1.0,
"z2": 1.0
}
}
]
具体信息
名称 | 类型 | 含义 |
placeType | string | 可用选项:Any,Up,Down,Horizontal,Vertical,HorizontalUp,HorizontalDown 建议选项:Any 含义:代表机器方向 |
layerType | string | 可用选项:Cutout,Translucent,MultiLayer 建议选项:Cutout 含义:未知 |
hasGUI | boolean | 是否有GUI,建议填true(填false可用去用CoT来写新方块了) |
extraVariants | ???数组 | 未知 |
resourceName | string | 注册物品名,如"item_gate" → "requious:item_gate" |
model | string | 模型名,如"requious:item_gate" → "assets/requious/models/block/item_gate.json" |
hardness | float | 方块硬度 |
blastResistance | float | 防爆等级? |
名称 | 类型 | 子成员 | 含义 |
aabb | 对象 | x1 | minX |
x2 | maxX | ||
y1 | minY | ||
y2 | maxY | ||
z1 | minZ | ||
z2 | maxZ | ||
colors | 对象数组 | 见2.2的colors | |
对坐标的解释:见CrT百科。
json分解(?)
[{对象}数组] | {对象} | placeType(string) | ||
layerType(string) | ||||
hasGUI(boolean) | ||||
extraVariants(unknown) | ||||
resourceName(string) | ||||
model(string) | ||||
hardness(float) | ||||
blastResistance(float) | ||||
aabb | x1 | |||
x2 | ||||
y1 | ||||
y2 | ||||
z1 | ||||
z2 | ||||
colors(对象数组) | {对象} | r(short) | ||
g(short) | ||||
b(short) | ||||
a(short) | ||||
……(另一个格式同上的对象) | ||||
……(另一个格式同上的对象) |
自定义配方
开始
我建议你看这个教程,不过创建自定义机器的方法前面已经讲了。
创建槽位
上述教程有告诉你创建槽位的办法,但是让我们扩展下。
物品槽
尽管教程说添加物品槽时capacity不能大于64,但是不知道为啥这个限制上调到了2^31-2。2^31-1当然还没超过int上限,但是容易溢出导致那个槽位的物品清空。
在物品槽的物品大于64时,物品的显示较为独特:
256显示为256
6465显示为6k
101450显示为.1M
6666666显示为6M
914500000显示为.9B
2147483646显示为2B
2147483647显示为2B,此时如果试图与该槽位交互会发生以下事情:
当槽位不可交互时,无事发生;
当有物品在鼠标指针上时,右键同类物品会导致手上物品数量变成 (原手上数量+槽位物品数量-槽位物品上限) ,同时槽位物品设为槽位上限,超过2,147,483,647时鼠标指针上物品会清空;
当没有物品在鼠标指针上时且可与槽位交互时,拿取(默认为左键)物品和普通槽位没有区别,但右键物品会导致槽位清空。
2147483647+1……不显示(这不是废话吗.jpg),同时溢出为-214748367而不会自动归零,意味着在这个槽位的物品数量被重新填充到0之前都是占用状态,且无法拿出物品,且所有合成都会忽略该槽位
能量槽
事实上当能量槽放入电池时,这个槽位并不会充电,但是这个槽位的存储电量会变成原存储电量+电池电量,存储上限会变成原上限+电池存储上限,但作者没考虑到电量溢出这一点;
当把鼠标放到zs文件定义中能量槽的位置时,能量槽会高亮。
文本槽
感谢@youyihj对部分问题的提醒!
创建
开始
//mods.requious.Assembly.setTextSlot(int x, int y);
//mods.requious.TextSlot.setVisual(SlotVisualCT visual, @Optional String variableAmount, @Optional String variableCapacity);
<Assembly:item_gate>.setTextSlot(2,3).setVisual(SlotVisual.create(1,1));
//给机器item_gate添加文本槽,位置在[2,3],并添加空背景。
槽位效果
有趣的事实
事实上10种槽位中4种(物品槽、流体槽、选择槽、能量槽)有setBackGround方法,4种(持续时间槽、激光槽、Duration槽、文本槽)有setVisual方法,1种(Mechanical槽)没做完,剩下的Base槽无法调用,所以实际上能用的所有槽位都可以有槽位效果(实际上Duration槽没有教程,文本槽已知会闪退);
槽位效果可以覆盖物品栏,如果覆盖物品栏的是除持续时间槽之外的槽位会发生鬼故事,比如无法访问那些槽位的物品栏;
create(width,height);方法中两个参数必须同时为正/负数,否则无法加载材质,但是当两个参数同为负数时会导致材质往反方向渲染,使得自定义GUI成为可能(如果你忽略无法填充的边缘4格)。
配方
你当然可以看教程,但是有些神奇的操作是由于特性而实现的。
自动NPE
用MachineContainer的setItem()方法把任意物品槽位的数据改成null,会触发NPE错误然后崩端。
取消配方
全部取消
向配方的输入组输出物品,所有的输入、输出都会被取消,但配方事件仍然会执行,可以由此实现复杂操作,比如伪进度条、手动定义配方操作、多方块机器等。当然,多方块机器本不在作者的更新计划之内。
部分取消
取消输出
看看5.2.1的第八条,显然你已经有答案了。
提示:在部分输出槽位满情况下配方仍会正常运作,所以理论上你可以给一个空槽位输出空气,并给满槽位输出物品。但是更好的办法是不输出……