本篇教程由作者设定使用 CC BY-NC-SA 协议。

准备工作

  1. 安装mod。

  2. 启动游戏,你会在 .minecraft\config\requious 文件夹找到5个json文件,这五个json文件将作为我们修改的基础。

  3. 如果可以,建议下载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
名称子成员类型含义
colorsrshortRGBA颜色,每个数组对应一个图层
gshort
bshort
ashort

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
intFE存储量
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
名称子成员类型含义
colorsrshortRGBA颜色,每个数组对应一个图层
gshort
bshort
ashort

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"
hardnessfloat方块硬度
blastResistancefloat防爆等级?



名称类型子成员含义
aabb对象x1minX
x2maxX
y1minY
y2maxY
z1minZ
z2maxZ
colors对象数组见2.2的colors


对坐标的解释:见CrT百科

json分解(?)


[{对象}数组]{对象}placeType(string)
layerType(string)
hasGUI(boolean)
extraVariants(unknown)
resourceName(string)
model(string)
hardness(float)
blastResistance(float)
aabbx1
x2
y1
y2
z1
z2
colors(对象数组){对象}r(short)
g(short)
b(short)
a(short)
……(另一个格式同上的对象)
……(另一个格式同上的对象)

自定义配方

开始

我建议你看这个教程,不过创建自定义机器的方法前面已经讲了。

创建槽位

上述教程有告诉你创建槽位的办法,但是让我们扩展下。

物品槽

尽管教程说添加物品槽时capacity不能大于64,但是不知道为啥这个限制上调到了2^31-2。2^31-1当然还没超过int上限,但是容易溢出导致那个槽位的物品清空。

在物品槽的物品大于64时,物品的显示较为独特:

  1. 256显示为256

  2. 6465显示为6k

  3. 101450显示为.1M

  4. 6666666显示为6M

  5. 914500000显示为.9B

  6. 2147483646显示为2B

  7. 2147483647显示为2B,此时如果试图与该槽位交互会发生以下事情:

    1. 当槽位不可交互时,无事发生;

    2. 当有物品在鼠标指针上时,右键同类物品会导致手上物品数量变成 (原手上数量+槽位物品数量-槽位物品上限) ,同时槽位物品设为槽位上限,超过2,147,483,647时鼠标指针上物品会清空;

    3. 当没有物品在鼠标指针上时且可与槽位交互时,拿取(默认为左键)物品和普通槽位没有区别,但右键物品会导致槽位清空。

  8. 2147483647+1……不显示(这不是废话吗.jpg),同时溢出为-214748367而不会自动归零,意味着在这个槽位的物品数量被重新填充到0之前都是占用状态,且无法拿出物品,且所有合成都会忽略该槽位

能量槽

  1. 事实上当能量槽放入电池时,这个槽位并不会充电,但是这个槽位的存储电量会变成原存储电量+电池电量,存储上限会变成原上限+电池存储上限,但作者没考虑到电量溢出这一点;

  2. 当把鼠标放到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],并添加空背景。

槽位效果

有趣的事实

  1. 事实上10种槽位中4种(物品槽、流体槽、选择槽、能量槽)有setBackGround方法,4种(持续时间槽、激光槽、Duration槽、文本槽)有setVisual方法,1种(Mechanical槽)没做完,剩下的Base槽无法调用,所以实际上能用的所有槽位都可以有槽位效果(实际上Duration槽没有教程,文本槽已知会闪退)

  2. 槽位效果可以覆盖物品栏,如果覆盖物品栏的是除持续时间槽之外的槽位会发生鬼故事,比如无法访问那些槽位的物品栏

  3. create(width,height);方法中两个参数必须同时为正/负数,否则无法加载材质,但是当两个参数同为负数时会导致材质往反方向渲染,使得自定义GUI成为可能(如果你忽略无法填充的边缘4格)

配方

你当然可以看教程,但是有些神奇的操作是由于特性而实现的。

自动NPE

用MachineContainer的setItem()方法把任意物品槽位的数据改成null,会触发NPE错误然后崩端。

取消配方

全部取消

向配方的输入组输出物品,所有的输入、输出都会被取消,但配方事件仍然会执行,可以由此实现复杂操作,比如伪进度条、手动定义配方操作、多方块机器等当然,多方块机器本不在作者的更新计划之内。

部分取消

取消输出

看看5.2.1的第八条,显然你已经有答案了。

提示:在部分输出槽位满情况下配方仍会正常运作,所以理论上你可以给一个空槽位输出空气,并给满槽位输出物品。但是更好的办法是不输出……