本篇是组件篇,教程来源于官方Wiki,此教程仅作为Wiki翻译。

作为一台机器,当然可以不止仅有外观,你还可以写上一些功能性的组件。

在Custom Machinery中,你可以写上4个组件:custommachinery:itemcustommachinery:fluidcustommachinery:energycustommachinery: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就是白名单。

默认情况下,whitelisttrue(白名单过滤)

//一个除了水以外都可以接受的储液罐
"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为白名单。

默认情况下,whitelisttrue(白名单)

//这个插槽只接受苹果。
"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”的槽中的项目输出信号