物品介绍

Factory Manager(工厂管理器)

工厂管理器是工厂的核心,通过编程控制整个工厂,可以多核。

放入磁盘后,点击Edit按钮进行编程,Reset按钮清除储存的程序和标签。

超级工厂管理编程教程及实例-第1张图片工厂管理器gui

Inventory Cable(存储线缆)

连接工厂各部分,有任意一面相连即可,编程时可以指定IO(输入输出)方向。超级工厂管理编程教程及实例-第2张图片用存储线缆连接木桶

Factory Manager Program Disk(工厂管理程序磁盘)

放入工厂管理器中,储存程序和标签。

Label Gun(标签枪)

给方块添加标签,标签用于在编程时选择对象,一个标签可以有多个方块,一个方块可以有多个标签。

右键空气时,打开gui,可选择标签。超级工厂管理编程教程及实例-第3张图片标签枪gui

右键方块时,为方块添加标签,如果方块已有该标签则移除。

Shift+滚动滚轮时,在标签之间切换。

Ctrl+右键方块时,为所有相连的相同方块添加标签,如果方块已有该标签则移除。

Shift+右键方块时,移除该方块所有标签。

右键工厂管理器时,将标签写入磁盘。

Shift+右键工厂管理器时,从磁盘读取标签。

Network Tool(网络工具)

手持时,高亮所有线缆。右键方块时,获取该方块信息和当前方块可用的input示例(包含物品、流体、能量、化学等,方向为点击时的方向)。

超级工厂管理编程教程及实例-第4张图片手持网络工具超级工厂管理编程教程及实例-第5张图片右键方块获取信息

Water Tank(水罐)

至少有两个面接触水源时,供给水,相连的水罐视作一个整体,每个水罐提高1000mB/t的抽取量。超级工厂管理编程教程及实例-第6张图片水罐

编程

在物品栏界面按Ctrl+I键,可显示物品栏槽位,点击左上角的Export Inspector按钮将显示可用的输出的示例。

超级工厂管理编程教程及实例-第7张图片超级工厂管理编程教程及实例-第8张图片抽象语法树。
超级工厂管理编程教程及实例-第9张图片AST

将磁盘放入工厂管理器,用存储线缆连接各工作方块,用标签枪标记后右键工厂管理器存入标签,点击Edit按钮或Ctrl+E开始编程。

--为注释符,在注释符后的内容不会被执行,Ctrl+/可切换行注释。

教程语法说明:

[]可选项。

<>必填项。

*可复数填写。

|或。

Trigger(触发器)

超级工厂管理编程教程及实例-第10张图片name <string>

为磁盘物品命名,string字符串


every <number> (ticks|seconds) do [block] end

每隔number(ticks)或(seconds)运行里面的内容,numberint类型。

计时单位为ticks时,number至少为20,仅包含能量IO时至少为1,可以在config/sfm-common.toml里修改。

计时单位为seconds时,number至少为1


every redstone pulse do [block] end

每次红石脉冲(上升沿)时运行里面的内容,同tick里可多次激活,接入高频脉冲可解决最小只能20ticks的限制。

IO(输入输出)

超级工厂管理编程教程及实例-第11张图片

input [resourceid]* from <label>*

label*里匹配*resourceid的对象输入到工厂里,对象还留在原方块里,只有在输出时才会进行转移。

可以用,(逗号)分割多个目标,这些目标将视作一个整体,一个label的多个方块视作一个整体,resourceid默认为sfm:item:[modid]:[name],比如钻石为minecraft:diamond,用*(星号/乘号/通配符)匹配任意字符串任意次,在解析时会将::替换为:*::$替换为:*,所以:::*:*等价原来是正则表达式


output [resourceid]* to <label>*

从工厂输出匹配resourceid*的对象到label*,转移数量没有限制。

超级工厂管理编程教程及实例-第12张图片

input [[number] [retain <number>] [resourceid]]* [except <resourceid>*] from [each] <label>*

label*里输出number个但保留number_个匹配的对象但排除resourceid_*对象到工厂,此处的number均为long型。

如果为each,则多个标签与标签下多个方块都独立计算。


output [[number] [retain<number>] [resourceid]]* [except <resourceid>*] to [each] <label>*

从工厂输出number个但输出对象至多有number_个匹配的对象但排除resourceid_*对象到label*,此处的number均为long型。

如果为each,则多个标签与标签下多个方块都独立计算。

超级工厂管理编程教程及实例-第13张图片4.19.0版本加入。

(input|output) [[resourceid] [(with|without[tag] <withClause>]]* [except <resourceid>*] (from|to) <label>*

匹配标签。未指定命名空间时,匹配所有命名空间。tag关键字和#号至少填写一个。通配符匹配当前深度,使用双通配符**匹配任意深度。

注:当前4.19.0版本语法通过但未实现not、and、or功能,without与with效果一致。

超级工厂管理编程教程及实例-第14张图片

forget [label]*

遗忘label*的输入,不添加参数时为遗忘所有输入。


input from [each] <label>* [round robin by (block|label)] [<side> side] [slots <range>*]

label*里以方块(block)或标签(label)循环的在range*范围内的槽位在side面输入到工厂。

eachround robin同时存在时与each一致。

sidetop bottom north east south west,即顶面 底面 北面 东面 南面 西面

side未指定时可能无法IO。

range可以是数值范围,如50-3,数据类型均为long型。


output to [each] <label>* [round robin by (block|label)] [<side> side] [slots <range>*]

从工厂输出到label*里以方块(block)或标签(label)循环的目标以side面输入到range*的槽位里。

eachround robin同时存在时与each一致。超级工厂管理编程教程及实例-第15张图片

resourceidsfm:[resourceTypes]:[modid]:[name]

可用的resourceTypesitem(物品,默认选项)、forge_energy(能量)、fluid(流体)、chemical(化学,mc1.21.1及以上版本)、gas(气体)、infusion(灌注)、slurry(浆液)、pigment(颜料)。通常需要指定side

ferfenergypowerforge_energy的别名。

gasinfusionslurrypigmentchemical的别名(mc1.21.1及以上版本)。

将上文全部结合起来可得

(input|output) [[number] [retain <number>] [resourceid] [(with|without) [tag] <withClause>]]* [except <resourceid>*] (from|to) [each] <label>* [round robin by (block|label)] [<side> side] [slots <range>*]

If(逻辑判断)

超级工厂管理编程教程及实例-第16张图片if <boolexpr> then [block] end

如果boolexpr的结果为true则运行里面的内容,boolexpr如下:

true|false

真值|假值


( <boolexpr> )

优先运算。


not <boolexpr>

逻辑非,反转boolexpr的结果。


<boolexpr> and <boolexpr>

逻辑与,都为true时才为true


<boolexpr> or <boolexpr>

逻辑或,至少有一个为true时为true


redstone [<comparisonOp> <number>]

不加参数时redstone表示本身是否有红石信号。

添加参数时,红石信号数值与number进行comparisonOp比较。

comparisonOp可以输入:

>gt 大于

<lt小于

=eq 等于

<=le小于或等于

>=ge大于或等于。


[setOp] <label>* has <comparisonOp> <number> [resourceid]

setOpevery所有个体都满足

             eachevery

             some至少有一个以上个体满足

             one只有一个个体满足

             lone零个或一个个体满足

             overall整体满足,默认选项


if <boolexpr> then [block]

else if <boolexpr> then [block]

else [block]

end

支持if...else if...else...end表达式和嵌套if

实例

有机灌注器阵列

以热力系列+神秘农业的精华产线为例,Ctrl+右键快速标记所有有机灌注器。

超级工厂管理编程教程及实例-第17张图片输入能量、水、种子、肥料,产出精华和种子。超级工厂管理编程教程及实例-第18张图片

在物品接口标记肥料(植育一号),从水罐抽水到流体储罐缓存水,将有机灌注器的顶部设置为输入/输出。超级工厂管理编程教程及实例-第19张图片

Mek聚变反应堆自适应速率

聚变反应堆可以直接通入氘氚燃料,燃料速率为1-1000mB/t0就直接停机了,用终极化学品储罐储存燃料,设计目标为储罐拥有8,000,000mB燃料时速率达到1000mB/t,且燃料速率随着燃料储量降低而降低,需要一直输入燃料避免停机,所以每tick都必须运行一次,使用every redstone pulse触发器和1tick脉冲发生器。

超级工厂管理编程教程及实例-第20张图片1tick脉冲发生器

超级工厂管理编程教程及实例-第21张图片1tick脉冲发生器

所有活塞均为粘性活塞。超级工厂管理编程教程及实例-第22张图片

做好标记,设置好输入/输出面,temp是一个空的终极化学品储罐。

超级工厂管理编程教程及实例-第23张图片

超级工厂管理编程教程及实例-第24张图片

超级工厂管理编程教程及实例-第25张图片