组装机

组装机

alaindustrial:assembler
机器MV已实现tier-mvprocessingautomationassemblerblueprintcrafting

概览

组装机 是本模组第一台 MV 等级机器,也是对 64 堆物品手动合成的终结。它会记住工作台配方(记录在 装配蓝图 上),只要有原料和能量就持续不断地生产。无需红石,机器会自行运作。

原料并非取自机器自身的物品栏或管道,而是来自由 存储模块 拼装而成的自有仓库。成品则放入独立的输出区,避免产物与原料混淆。

与原版 "合成器"(每个红石脉冲重新求解一次网格、什么都不记忆)不同,本机会保存一个 三格蓝图队列,并在它们之间自动切换。

能量

字段数值
角色消费端
缓存(EU/FE)12000
最大输入(EU/FE/刻)128(MV)
最大输出(EU/FE/刻)不适用
EU/FE/刻12

通过 金缆(MV 传输,48 EU/FE/刻)由现有发电机供电即可,启动时 无需 单独的 MV 发电机或变压器。LV 铜缆(12 EU/FE/刻)也能刚好应付:机器需要的正好是 12 EU/FE/刻。

能量 仅在工作刻消耗。任何原因的空闲(无蓝图、无原料、输出区无空位)都完全不消耗 EU/FE。

加工

字段数值
能组装的内容任何工作台配方,有形无形皆可
持续时间(刻)40
单次操作消耗(EU/FE)480
自动卸料

机器没有自己的配方类型。 它通过标准工作台配方机制求解普通的工作台配方,因此会自动支持原版配方、本模组自身的配方(它们以普通 minecraft:crafting_shaped 声明)、任何第三方模组 的配方以及数据包。标签机制免费可用:配方中的 #minecraft:planks 就意味着 "任意木板",与在工作台上完全一致。

本模组的机器配方(粉碎、熔炼、提取)不会被本机执行,它们是独立的配方类型,归独立的机器处理。

从队列中选取蓝图

蓝图按 轮转(round-robin)方式轮询,游标位置会在循环之间保留。出现以下任一情况时,蓝图会被跳过:

仓库中缺少某项原料; 输出区放不下产物; 该蓝图的配方不存在(例如更换数据包后消失了)。

如果没有任何蓝图就绪,机器会进入休眠,并在仓库或能量发生变化时醒来。

轮转而非 "自上而下" 的严格优先级是刻意为之:在严格优先级下,第一个拥有无限原料的蓝图永远不会把队列让给其他蓝图。

单次操作的执行顺序

顺序是硬性的,偏离会破坏结果或残余物的归还:

  1. 从蓝图网格组装输入,并检查仓库中每项原料是否齐备。
  2. 检查产物能否放入输出区,残余物能否回到仓库。不能则根本不启动操作(正是这一步防止了物品丢失)。
  3. 扣除 EU/FE 并推进进度。
  4. 完成时:先获得配方产物,然后是残余物,最后才消耗原料。

步骤 1–2 在仓库和输出区的 副本 上执行:操作要么整体计算完毕,要么根本不启动,而写入世界所用的正是用来检查容量的那些数组。检查与执行是同一段代码,因此 "检查能否放下" 与 "实际放入" 绝不会出现分歧。

一次操作会 计算两遍,启动时一次(决定是否开始),结束时一次(仓库可能在 40 刻内发生变化),但不会在中间的四十刻上反复计算。如果结束时计划不再成立(仓库被掏空、配方消失),机器会停在终点线上:进度和已花费的 EU/FE 都会保留,一旦计划重新吻合,操作就会立刻完成。

原料替换

默认情况下,机器从仓库取出 与蓝图记录完全一致的物品,按物品本身比较,忽略组件(与标准 Ingredient 的行为相同)。因此,如果蓝图中放的是崭新工具,磨损过的工具同样可用。

替换开关("写入" 右侧的方形箭头按钮)会为 窗口正在显示其布局的那张蓝图,即队列中被框选的那张切换此设置。该设置保存在蓝图物品本身上:把蓝图搬到另一台组装机,它在彼处同样生效。

启用替换时的优先顺序如下:

  1. 首先是玩家放入的物品。 只要仓库中还有它,就只取它。Refined Storage 不会这么做,这也是玩家长期诟病的一点。
  2. 如果它没有了,则取自该配方槽位对应 Ingredient 的候选项,按配方自身的顺序。并非 "从标签中任意取":对于通过 #minecraft:planks 书写的配方(木棍、工作台、碗),有 12 个候选项;而对于 oak_stairs(其原料字面上就是 minecraft:oak_planks),则根本没有候选项,替换不会生效。"蓝图里是任意木板,仓库里有橡木和白桦,不知会得到哪种楼梯" 这种情形 根本不可能发生:原版的楼梯类配方是按木种一一对应的。
  3. 替换只有在重新组装能得到相同结果时才会被接受,配方依旧成立,且组装出的物品堆与蓝图在工具提示中承诺的(含组件与数量)一致。不一致则操作根本不会开始,不消耗 EU/FE,不动仓库。

位置信息取自 Recipe.placementInfoslotsToIngredientIndex 是一个与配方槽位平行的列表,其中的值是 ingredients 中的索引(空格为 −1)。对于 ShapedRecipe,槽位即图案的格子,因此索引通过同样的裁剪、并在镜像匹配时通过同样的反射转换为 3×3 网格坐标,与残余物归还完全一致。对于非 ShapedRecipe(主要指无形配方),按定义没有位置信息,此时每个占用格子的候选项就是配方的全部原料,再由第 3 条剔除多余项。

为何默认关闭。 标准 Ingredient 只比较物品、忽略组件,因此启用替换时,可能会把附魔书当成普通书,或把磨损工具当成崭新工具送入格子。按钮的工具提示会就此警示,而启用了替换的蓝图也会附带一行单独标注。

来自其他模组的材料(铜、锡、银)能否生效,完全取决于配方中的原料是否以通用 c: 标签书写,这是另一项工作,并非本机的属性。

残余物

带容器(蛋糕里的桶、瓶装物)的配方会把容器物品归还。残余物会被放回 当初取走其原料的那个仓库格子;若该格被占用则放到任意空格;仓库满则放到输出区;输出区也满则操作不开始(步骤 2)。

"归还到原格" 并非为了美观:正是因为它,锻造锤才会原地不动,仅仅损失一点耐久,而不是每合成一次就在仓库里挪一格。从技术角度说,这正是必须把 CraftingInput 的坐标裁剪展开的原因:残余物列表是以 裁剪后 网格的坐标返回的,不做反向换算,"原格" 就会被算错。

依赖堆叠的残余物(本模组的锻造锤每用一次损失一点耐久而非消失)会自动生效,因为残余物是经由配方取出的,而非直接取自物品。

物品栏

槽位接受数量
蓝图已记录配方的 装配蓝图3
输出区仅出料(机器放入,玩家取走)6
空白蓝图空白 装配蓝图,"写入" 的对象1
升级升级模块4(工作槽为第一个)
仓库任意物品27 + 每个存储模块 +27,上限 108

配方设定网格 并不属于物品栏:它是九个 "幽灵" 格子,其中的物品既不会被消耗也不会被储存,只用于展示要写入蓝图的布局。

输出区为 6 格是经过深思熟虑的:单格输出是机器卡死的常见原因,当产物堵满唯一一格时生产就会停摆。

外部自动化:物品管道负责填充 仓库 并从 输出区 取走。无需、也无法通过管道直接向机器送料。

界面

机器窗口(右键组装机打开)由 两个标签页 组成:"工作" 和 "写入"。这是同一个方块、同一个窗口,切换的只是所显示的内容。

过去这个窗口会同时承担两件互不相关的工作:一边是用来 构思 配方的 3×3 网格,一边是生产的实时状态。这样的窗口让人无从分辨哪些已被记录、现在正在做什么、以及哪个网格是哪个。写入与生产是两件不同的事,如今各有各的标签页,它们在屏幕上不再共用任何空间。

切换标签页是切换视图,而非模式。 玩家停留在写入页时,机器仍在继续合成:标签页不动队列、不动进度、不动能量。会暂停生产以便写入的模式被刻意排除,否则 "想再记一个配方" 就会变成停下整条产线。

"工作" 标签页

机器当前正在做的事:

三个蓝图槽位即队列,活动蓝图带边框; 活动蓝图的 3×3 布局及其产物,仅作展示(见下); 6 格输出区; 能量条与进度条; 状态行:运行中 / 无蓝图 / 缺原料 / 输出已满 / 无能量 / 配方未找到。玩家需要能区分空闲的原因,否则 "机器停着" 与 "机器坏了" 将无从分辨。

"写入" 标签页

构思配方时所用:

3×3 幽灵格子网格; 结果预览,即该布局会合成出什么; 空白蓝图槽; "写入" 按钮,把空白蓝图变成已记录的蓝图; "写入" 左侧的方形箭头按钮,即所显示蓝图的 替换开关:灰色箭头表示关闭,绿色表示开启。

网格格子通过点击填充:将物品悬停在光标上点击某个格子,该格子就会放入一份它的副本;空光标点击则清除该格。期间物品 不会被消耗:网格只是展示布局,而非存储它。

空白蓝图放在 此处,而非蓝图队列中,这与上面的决策一脉相承:写入标签页应当自给自足。如果 "写入" 要从队列里取空白蓝图,玩家就得跑到 "工作" 页才能记录配方,两件事又被绑在了一起。记录完成的蓝图会出现在空白蓝图的位置,再从那里取出放入 "工作" 页的队列。记录并不等同于排队,操作顺序本身就把这点讲明白了。

隐藏标签页的槽位不可访问

属于当前不可见标签页的槽位既不能填充也不能清空,无论是点击、Shift 点击、拖拽,还是双击 "收集全部"。隐藏的标签页不仅仅是没有绘制:在它隐藏期间,其槽位对游戏而言根本不存在。

标签页是窗口状态而非机器状态:它不会被保存到任何地方,两个玩家面对同一台组装机可以查看不同标签页而互不干扰。

活动蓝图的展示

"工作" 标签页会 显示队列中蓝图的布局,即机器正在执行的蓝图;若机器空闲,则显示第一张已记录的蓝图。否则运行中的机器看起来会是这样:状态写着 "组装中",输出区在被填充,而窗口空空如也,"无从得知记录的是什么配方"。蓝图的产物会绘制在它所填充的输出区下方。

被展示的布局被标记为 他人且不可编辑:物品呈暗淡状,格子的工具提示会追加一行 "蓝图 N 的布局,仅作展示"。蓝图槽周围有淡蓝色边框,标明布局取自三张中的哪一张。

展示的内容不可能与自身布局混淆:所展示的蓝图只是 绘制 在标签页视图之上,那里根本没有任何槽位,无论哪个客户端都无从取物。玩家自己的布局在另一个标签页,互不影响:当他在编排自己的配方时,"工作" 标签页仍会显示机器的所作所为。(在引入标签页之前恰好相反:玩家布局会盖过展示,机器布局会从他手下消失。)

队列中的边框含义不同:橙色 表示当前操作所用的蓝图,淡蓝色 表示正在被展示布局的蓝图。通常两者是同一张,橙色会盖过蓝色。

此外,每张已记录的蓝图 其产物直接绘在物品图标上,详见 装配蓝图。队列中的三张蓝图无需悬停即可区分,在箱子或物品栏中也同样可辨。

仓库窗口存储模块 的窗口,通过右键模块本身打开,而非组装机里的按钮:

整体仓库网格,按连接的模块数有 3–12 行; 没有翻页、滚动条和搜索,108 格的上限正是为了让一切都能塞进屏幕。

仓库窗口与储存模块打开的窗口相同。

如果附近根本没有仓库,组装机的表现与空仓库完全一致:状态行显示 "缺原料",不消耗 EU/FE,也不会出任何故障。

方块属性

字段数值
形状16³ 完整立方
硬度3.0
爆炸抗性6.0
工具
能量 NBT 掉落

破坏组装机时,槽位中的蓝图和输出区内容会掉落。仓库的内容 留在模块中,损失的只是连通关系,模块在装上新组装机之前会保持空闲。TC-ASM-026 对此做了固定:掉落数量按精确值计入,因此既看得出蓝图的丢失(它无法被重新合成),也看得出输出区的双重掉落。

蓝图队列、进度和轮转游标位置能挺过重载,TC-ASM-027 会通过 NBT 驱动机器走一遍,与区块的保存和加载同一条路径。这个列表里的游标是唯一没有可见症状的字段:一旦丢失,轮转会默默从第一张蓝图重新开始,而队列公正性(游标存在的全部理由)会悄然失效。

正面被标记,与模组其他机器一样被排除在自动化之外:插到正面的管道看不到任何槽位。

配方

合成: 没有加工配方,机器使用原版 minecraft:crafting

按照该品类的范式组装:对应等级的机器外壳 + 两张蓝图 + "身份" + "存储",四个角则填以驱动这些部件运转的机械结构:

正中是高级机器外壳——机器的核心,也是它的等级所在。上方是工作台,即机器所做的事;下方是存储模块,它从那里取零件。外壳左右各一块电子电路,负责读取装配蓝图。四个角全是铁齿轮——把零件送入网格的"手"。

链接:高级机器外壳电子电路存储模块铁齿轮

四个角放的正是齿轮而非更多的板:组装机是本模组第一台自己搬动零件的机器,而齿轮正是本模组专门用于此事的零件(便携式流体储罐物品管道 的读法相同)。填满的九格也使本合成与本模组其他机器保持一致,那里空角才是例外。

进阶

等级:MV — 本模组第一台 MV 机器,MV 阶段的锚点。 需要:存储模块(没有仓库,机器无处取原料)和 装配蓝图。 自 起还要求已打通石油产线,不是直接的,而是通过 高级机器外壳:其中现在要放 2 张 高级电路,而每张高级电路需要 4 份橡胶。组装机自身的合成网格没有变化,但其总成本因此多了这 2 张电路,在建造 聚合机硫化机 之前已无法造出组装机。 升级方向:无。"按需自动合成"(下达 "做 64 个 X" 的订单,附带子合成的依赖树)是一个独立的未来系统,并非本机的升级。

相关内容

存储模块 — 组装机取原料的仓库 装配蓝图 — 存储配方的物品 金缆 — MV 机器的能源供应 物品管道 — 填充仓库、取走输出 锯木机 — 在 GUI 中可切换模式的机器范例

合成

有序合成
铁齿轮
Crafting Table
铁齿轮
电子电路
高级机器外壳
电子电路
铁齿轮
存储模块
铁齿轮
工作台
组装机
组装机