MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

ModularMachinery Wiki(ZH)/配方修饰符 【进阶】

来自MCBBS Wiki
跳到导航 跳到搜索

[模块化机械于1.9版本之后添加的功能]

就目前而言,机械只能遵循机械多方块结构配方来建造。然而,如果魔改作者想给使用者提供“二次升级”的机会就需要用到“配方修饰符”功能了。例如更多的“次级输出”, 更多能源输出,更少的能源或物品消耗,更快的制造速度等升级。

配方修饰符需要遵循如下规则:“通过方块“Y”放置于相对于其他方块某个位置来组成配方,而不是通过把方块“X”放在某个“x,y,z”坐标上。”

为了使工作达到预期,确保你想让使用者放置的方块被放置在一个特殊的位置且不同于一般机械所要求的摆放方式。所以,如果你要求任意一个“石头变种方块”被放置在坐标“1, 2, 1”上,请确保你放置在坐标“1, 2, 1”的方块是为了获取特殊修饰的方块而不是任意石头变种方块!更通俗的来说:确保你想让使用者为了获得一个特殊修饰而放置的方块没有放在一个通常放在那个位置的方块的subset(map 节点里面的一个子节点,这将会在地图上的一个特定的位置,查看自位置中心指定大小的圆形区域,而不是查看整张地图。) 内。无法确定用户想要组成多方快机械的某个方块是否被修饰而使程序反复进行检测。这可能使系统运行不稳定并加大服务器负担

考虑到这点,让我们看看如何指定修饰符并得知他们能做什么。

修饰符必须在机械定义中明确定义。示例如下,机械"alloy_furnace"被运行时,该机械会作为默认或示例机械和模块化机械一同运行.

{
    "registryname": "alloy_furnace",
    "localizedname": "Alloy Smelter",
    "modifiers": [
        {
            "elements": "modularmachinery:blockcasing@1",
            "x": 0,
            "y": 1,
            "z": 0
        }
    ],
    "parts": [
        {
            ...
        },
[...]
        {
            "x": 0,
            "y": 1,
            "z": 0,
            "elements": "modularmachinery:blockcasing@2"
        },
[...]

所以如你所见,"modifier"的一部分与"part"数组中的默认元素相同, 其用于定义放苗坐标偏移和匹配应放置的方块。它也可以用于定义方块状态字符串,方块状态数组和方块状态变量。现在这些定义的使用方法你已经很清楚了,如果还不是很清楚,请查阅wiki的基础机械定义页面。

然而,现在使用者仍然无法知道该在哪里放置方块来获得修饰符。因此,我们需要添加描述("description")来让使用者得知什么地方该换成什么方块。模组本身不能独自做到这点,因为自动生成的说明可能过长,复杂,令使用者难以理解。

[...]
"localizedname": "Alloy Smelter",
"modifiers": [
    {
        "elements": "modularmachinery:blockcasing@1",
        "x": 0,
        "y": 1,
        "z": 0,
        "description": "Replace block above controller with machine vent!"
    }
],
"parts": [

可以通过以上示例的方法来添加描述。这可以让使用者明白他必须做什么来实现修饰符的。这个模组会在需要放置方块来满足修饰符条件的位置的方块预览下展示说明文字。此外,描述最好还包含一行短文来说明修饰符的实际作用来让使用者了解其功效。可以用“\n”来创建新行。 演示图片

描述Tag("description")为可选内容(1.9.6 版本之后)。若没有提供描述,预览界面则不会解释/展示修改内容。

现在”replacement“部分准备就绪,修饰符能真正被定义了:

[...]
"localizedname": "Alloy Smelter",
"modifiers": [
    {
        "elements": "modularmachinery:blockcasing@1",
        "x": 0,
        "y": 1,
        "z": 0,
        "description": "Replace block above controller with machine vent\nfor double item output!",
        "modifier": {
            "io": "output",
            "target": "item",
            "operation": 1,
            "multiplier": 2.0
        }
    }
],
...

这在"modifier"Tag中完成。一个修饰符需要很多部分内容。

  • "io":
定义它所针对的配方的 I/O类型。能作为“输入”或“输出”,因此将其用于处理“输入”或”输出“的组件。
  • "target":
定义它所针对的配方的目标类型。目标类型可以是“物品”,“能量”,“液体”,“工作时间” (处理配方所需时间),“气体”(通用机械模组及其气体附属模组)。“模块多样性”这样的模组还能添加其他可能具有不同名字的目标类型。例如“魔法”或其他任意模组所添加的目标类型
  • "operation":
定义操作类型。可能使用到的操作有:0 = 加法, 1 = 乘法。加法和乘法修改器都会在实际值被应用前运行。
  • "multiplier":
定义被应用于配方成分的加法,乘法的数字的实际值。
  • "affectChance": [可选]
在以上示例中没有定义此项。其可以为“true”或 “false”。 若没有定义,则默认为“false”。定义乘数是否被应用于配方成分的不是实际值(例如,乘数 2 应用于物品输出而不是其实际物品堆叠数量。该修饰符不是将其物品堆叠数量乘2,而是将它的输出概率概率将乘2。所以,如果一个物品的堆叠量为3,输出概率是0.4/40%,当修饰符被应用时,该生产堆积量为3的物品的生产概率为0.8/80%,而不是0.4/40%)

举例:这都是很有用的信息。一些东西通过例子来理解会更加容易。所以这有一些"modifier" tags和解释,来说明若机械的修饰符条件被满足,他们能起到怎样的功效。

1.

"modifier": {
    "io": "output",
    "target": "item",
    "operation": 1,
    "multiplier": 2.0
}

该机械的物品生产产出乘2。

2.

"modifier": {
    "io": "input",
    "target": "item",
    "operation": 0,
    "multiplier": -0.2,
    "affectChance": true
}

输入物品被消耗的概率-0.2; 所以物品被消耗的概率会降低0.2 / 20%。

3.

"modifier": {
    "io": "output",
    "target": "energy",
    "operation": 1,
    "multiplier": 1.5
}

能量生产产出乘1.5。换句话说就是能量生成量增加50%。

4.

"modifier": {
    "io": "output",
    "target": "fluid",
    "operation": 0,
    "multiplier": 50
}

该机器生产/产出的任何液体都会增加50mb。(通过加法来加50)

5.

"modifier": {
    "io": "input",
    "target": "item",
    "operation": 1,
    "multiplier": 0,
    "affectChance": true
}

输入物品被消耗的概率乘0.换句话说就是该配方不需要消耗任何输入物品。

Tr:喵鱿