本篇是组件篇,教程来源于官方Wiki,此教程仅作为Wiki翻译。
作为一台机器,当然可以不止仅有外观,你还可以写上一些功能性的组件。
在Custom Machinery中,你可以写上4个组件:custommachinery:item,custommachinery:fluid,custommachinery:energy,custommachinery:redstone。
这些组件必须写在机器的json里,且可以不受限制的写入。
如果你要使用它们,那么你需要遵循以下这个样板:
"components": [
{
//组件
},
{
//组件
}
...
]
本篇所有东西都是可选的,因此如果你不需要可以不用写上。
这些组件都必须要用type来定义。如"type":"custommachinery:item"
能量
在默认情况下,Custom Machinery使用的能源单位是FE,因此只要是可以提取FE或RF的管道或机器,都可以提取出本模组的机器能量。
能量组件被认为是一个独特的组件,因此你的机器只能允许有一个能源槽位,如果你试图制作多个能源槽,那么只会运行第一个。
要对机器定义能量,你需要在json里写上:"type": "custommachinery:energy"
特性
容量(必填)
你需要填写你的机器可以最大容纳多少FE。
//这台机器可以容纳10000FE
"components": [
{
"type": "custommachinery:energy",
"capacity": 10000
}
]
最大输入
每tick可以给这台机器输入多少的FE。
//这台机器只能接受每tick输进去1000FE
"components": [
{
"type": "custommachinery:energy",
"maxInput": 1000
}
]
最大输出
这台机器可以每tick输出多少的电出去。
//这台机器允许输出1000FE/t的电量
"components": [
{
"type": "custommachinery:energy",
"maxOutput": 1000
}
]
例子
//这台机器允许存入10000FE,并且只能输入和输出1000FE/t
"components": [
{
"type": "custommachinery:energy",
"capacity": 10000,
"maxInput": 1000,
"maxOutput": 1000
}
]
注:配方所产生的FE消耗和增加将会绕过最大限制,且不计入在内。
最大限制只计算管道或机器提取或输入的能量。
流体
一般来说,Custom Machinery的流体兼容所有mod的流体,因此你也可以使用其他mod的管道或者泵来提取机器内部的流体。
你可以使用"type": "custommachinery:fluid"来为机器添加一个储液罐。
同时,该组件并不独特,因此你可以添加任意数量的储液罐。
特性
容量(必填)
请填写一个整数,1代表1mb,1000代表一桶(1000mb)。
//一个可以存储10000mb的储罐
"components": [
{
"type": "custommachinery:fluid",
"capacity": 10000
}
]
ID(必填)
不同于能量,流体由于可以写入多个,因此你需要为每个流体写入一个ID来区分不同的储液罐。
//一个储液罐,其中ID为tank1
"components": [
{
"type": "custommachinery:fluid",
"id": "tank1"
}
]
最大输入
每tick可以朝这个机器输入流体的最大速度。
//一个可以以1000mb/t的速度输入的储液罐。
"components": [
{
"type": "custommachinery:fluid",
"maxInput": 1000
}
]
最大输出
该储罐可以每tick向外输出的最大速度。
//一个可以以1000mb/t的速度输出的储液罐。
"components": [
{
"type": "custommachinery:fluid",
"maxOutput": 1000
}
]
过滤器
默认情况下,一个储液罐可以接受所有的流体。
//一个只接受水的储液罐
"components": [
{
"type": "custommachinery:fluid",
"filter": ["minecraft:water"]
}
]
同时,你也可以使用#代表标签,例如#minecraft:water就代表了一个只接受水和其他含有水标签的储液罐。
白名单
再此基础上,你可以使用whitelist来选择过滤器是否是白名单,false是黑名单,true就是白名单。
默认情况下,whitelist为true(白名单过滤)
//一个除了水以外都可以接受的储液罐
"components": [
{
"type": "custommachinery:fluid",
"filter": ["minecraft:water"]
"whitelist": false
}
]
模式
储罐有四种模式,分别是:input(输入),output(输出),both(输入/输出),none(无),
默认情况下,储罐是both模式,也就是可以同时输入和输出,若是input,则储罐只能输入,不能输出。
若是output,则储罐只能输出,不能输入,若是none,则这个储罐什么都不会做。
管道只能从输入模式储罐中抽入,从输出模式储罐中抽出液体。桶和配方也是一致的。
//一个只能输入,不能输出的流体组件。
"components": [
{
"type": "custommachinery:fluid",
"mode": "input"
}
]
注:若你固定了模式,则之前定义的"maxInput"和"maxOutput"有可能不起作用,例如模式为input的储罐,即使maxOutput定义过数字,但仍然视为0。
例子
"components": [
{
"type": "custommachinery:fluid",
"capacity": 10000,
"id": "tank1",
"maxInput": 2000,
"maxOutput": 1000,
"filter": ["minecraft:lava"],
"whitelist": false,
"mode": "both"
}
]
一个ID为tank1,可以存储10000mb的流体储罐组件,同时可以输入2000mb/t,输出1000mb/t,并且除了岩浆以外的流体都可以接受。
物品
物品槽可以允许机器和物品进行交互。
每个物品组件都会向机器添加一个槽位,每个槽位都可以容纳任意个物品,你可以添加任意个物品组件。
物品组件的定义为"type": "custommachinery:item"。
特性
ID(必填)
物品同样需要填写id来区分不同的物品插槽。
//一个名叫slot1的物品插槽
"components": [
{
"type": "custommachinery:item",
"id": "slot1"
}
]
容量
默认情况下,一个物品插槽只能容纳一组物品(64),你可以自定义每个格子的容纳数量,但不能超过一组。
//一个只能堆叠4个物品的物品插槽
"components": [
{
"type": "custommachinery:item",
"capacity": 4
}
]
过滤器
同样的,物品插槽默认情况下可以存放所有的物品。
你可以使用#来代表物品标签。
//这个插槽只接受钻石和所有的木头。
"components": [
{
"type": "custommachinery:item",
"filter": ["minecraft:diamond", "#minecraft:logs"]
}
]
白名单
和流体一样,你可以使用whitelist来说明过滤器是否为黑/白名单,false为黑名单,true为白名单。
默认情况下,whitelist为true(白名单)
//这个插槽只接受苹果。
"components": [
{
"type": "custommachinery:item",
"filter": ["minecraft:apple"],
"whitelist": true
}
]
模式
物品同样含有四种模式:input(输入),output(输出),both(输入/输出),none(无)。
通常情况下,物品插槽的模式为both。
漏斗,管道等只能从input/both模式的物品槽中输入物品,从output/both模式的物品槽中抽出物品,配方合成也是一样的。
//一个输入插槽,不准输出。
"components": [
{
"type": "custommachinery:item",
"mode": "input"
}
]
变体
你可以使用variant属性来定义这个物品插槽的特殊属性。
物品插槽具有三种不同的变体:
custommachinery:default,最基础的物品插槽。
custommachinery:fuel,燃料插槽,它只允许具有燃烧时间的物品并消耗它们来为机器提供动力。
custommachinery:upgrade,升级插槽,仅允许定义为自定义机器升级的项目。
默认情况下,插槽为custommachinery:default,最普通的那种。
注:一般来说燃料插槽可以输入和输出,但如果只定义为输出,那么就只能通过配方来放入物品进去,因此建议改为input或者both类型。
//一个升级插槽
"components": [
{
"type": "custommachinery:item",
"variant": "custommachinery:upgrade"
}
]
例子
"components": [
{
"type": "custommachinery:item",
"id": "fuel",
"filter": ["minecraft:coal", "minecraft:charcoal"],
"whitelist": true,
"mode": "input",
"variant": "custommachinery:fuel"
}
]
一个id为fuel的燃料插槽,且只能放入煤炭或者木炭,并且不准取出。
红石
该组件是定义机器对于红石的交互,并不会储存任何内容。
该组件完全可选,若不填写,则会添加默认红石控制:
机器永不停止,机器不准发出红石信号。
该组件是独特的,因此你只能定义一个红石组件,否则只启用第一个红石组件。
你可以使用"type":"custommachinery:redstone"来定义红石组件。
特性
暂停
//机器如果收到大于等于5的红石信号时,将会暂停
"components": [
{
"type": "custommachinery:redstone",
"powertopause": 5
}
]
默认值为0,即永不暂停。
运行信号输出
//机器在运作时会产生15级的红石信号
"components": [
{
"type": "custommachinery:redstone",
"craftingpoweroutput": 15
}
]
默认值为0,即永不产生。
空闲信号输出
//机器在闲置时会产生15级的红石信号
"components": [
{
"type": "custommachinery:redstone",
"idlepoweroutput": 15
}
]
默认值为0,即永不产生。
错误信号输出
//机器在发生错误时会产生15级的红石信号
"components": [
{
"type": "custommachinery:redstone",
"erroredpoweroutput": 15
}
]
比较器信号输出
若附近有红石比较器时,机器将会根据选择的组件不同而产生不同的信号:
custommachinery:item,与原版箱子一致,将输出与其插槽中的物品相对应的信号。
custommachinery:fluid,将输出与罐中液体量相对应的信号,0为空,15为满,8为半。
custommachinery:energy,将输出与其缓冲区中的能量相对应的信号,0为空,15为满,8为半。
//机器将会产生根据流体储罐的相同红石信号
"components": [
{
"type": "custommachinery:redstone",
"comparatorinputtype": "custommachinery:fluid"
}
]
默认值为:custommachinery:energy,根据能量的数量来输出红石信号,若没有则为0。
比较器信号id
在此之上,若需要让比较器精准到具体的流体或物品插槽,则需要声明其对应的id。
若找不到声明的id,则输出0红石信号。
//机器将会找到id为tank1的流体储罐,并根据存储的数量输出对应的红石信号
"components": [
{
"type": "custommachinery:redstone",
"comparatorinputtype": "custommachinery:fluid"
"comparatorinputid": "tank1"
}
]
例子
"components": [
{
"type": "custommachinery:redstone",
"powertopause": 15,
"craftingpoweroutput": 7,
"erroredpoweroutput": 14,
"comparatorinputtype": "custommachinery:item",
"comparatorinputid": "input"
}
]
一个红石控制,具体为:
空闲时输出红石信号0
制作时输出红石信号7
出错时输出红石信号14
当收到 15 的红石信号时暂停
附近的比较器将根据 ID 为“input”的槽中的项目输出信号