存储模块

存储模块

alaindustrial:storage_module
实用方块已实现storagemultiblockautomationutility

概览

存储模块——一个 27 格方块,它最擅长的是:与邻居合并。把两个模块紧挨着放——就成了 一个 54 格的一体仓库,共用一个窗口。三个——81。四个——108,这就是上限。

点击任意模块即可打开:窗口始终显示整个仓库,而不是你点击的那个方块的 27 格。

不需要能量,不需要红石,形状随意——墙、柱、L 形都行。唯一规则:模块之间必须以面 相接,而不是以棱或角。

示例: 放了一个模块,塞满了——不够。紧挨着再搭一个:打开两个中的任意一个,里面 已经是 54 格作为一个列表。

能量

字段数值
角色无
缓存(EU/FE)0
最大输入(EU/FE/刻)n/a
最大输出(EU/FE/刻)n/a
EU/FE/刻0

模块不参与能源网络:不传导 EU/FE,也不连接电缆。

物品栏

槽位接受数量
模块仓库任何物品27(3 行 × 9)

物品物理上存放在被放入的那个模块里。 没有公共的「主」物品栏:仓库窗口是同时查看所有 模块物品栏的视图,而不是独立的存储。由此衍生出其余一切行为:破坏时掉落什么、卸载区块时 发生什么。

整体仓库如何累加

相邻模块数仓库格数总行数可见行数滚动
12733无
25466无(滚动条不激活)
381963 行
41081266 行
5 个或更多108(上限)1266 行

槽位和行数没有变——改变的只是窗口:它最多显示六行,其余通过右侧的滚动条呈现。为什么 是六——正好是原版大型箱子(游戏自带的最高容器窗口)的高度,到处都能放得下。

合并规则

界面

什么被同步。 ContainerData 中的两个数字:仓库总行数和窗口当前所在行。前者让客户端 绘制滚动条,后者让客户端放置滑块;两者都由服务器决定。滚动本身走原版的 , 按钮编号就是所需顶行;服务器会夹紧它,因此「显示第 500 行」的数据包不会读到仓库之外。

为什么是视图而不是槽位搬家。 Slot.x/Slot.y 是 public final,菜单槽位列表属于网络 契约:ClientboundContainerSetSlot 中的索引就是其中的位置,在活动菜单下重新组装列表会让 客户端失去同步。原版中唯一可滚动的展示(创造物品栏)也是这样做的:槽位不动,动的是容器 在它们背后负责的内容。

方块属性

字段数值
形状完整 16³ 立方体
硬度3.0
爆炸抗性6.0
工具镐
带 NBT 掉落false——内容不保存在物品中

外观:仓库看起来像一个柜子

模块是带三个抽屉的钢制柜子:每个抽屉对应它为窗口添加的一行九格。顶部和底部不是抽屉, 而是带嵌入式服务面板的机身板。

相邻模块也会在外观上合并。两个模块相接的那个面上,框架消失:抽屉的正面跨过接缝延伸, 顶板融合成一个台面,框架只留在仓库的外围。2×2 的墙看起来像一个六抽屉柜,四个一排看起来 像一个长柜。

合并的外观恰好意味着仓库是一体的。 一旦结构中的模块超过四个,框架会立即全部回来, 结构再次看起来像一组独立柜子。这不是装饰,而是诚实的信号:在这种结构中仓库取决于点击 哪个模块(见「合并规则」),没有任何接缝能承诺两个方块是一个存储。移除多余的模块—— 合并外观就会回来。

以棱或角相接既不合并机制也不合并外观:两个仓库可以紧贴放置,视觉上仍然是分开的。

它是怎么画出来的。 合并被内置到方块模型本身,而不是叠加在上面。每个面被切成互不重叠 的矩形——每条棱一条,盖子的四个角像素和中间——每个矩形只绘制一次:要么取自带框架的 材质,要么取自「开放的」材质。没有任何东西向外偏移,也没有任何东西叠加在另一物上,因此 接缝既不会被单独的平面照亮,也不会产生台阶。第一版是在立方体上叠加偏移 0.1 方块的补丁, 玩家会在台面上看到沿接缝的凸起条,以及补丁结束处的短黑线。

盖子上的框架角同时属于两条棱,因此只有在两者都有邻居时才会被移除。不能把它交给一条 棱:「南北」接缝会在西部和东部框架上挖出两个像素的洞。

Blockstate 和 21 个模型是生成的(python tools/gen_storage_module_models.py),只能通过 生成器修改。--check 检查(在 和 pre-commit 中)将文件与生成器比对,并单独 证明无缝:每个面的每个像素只绘制一次,没有任何元素超出方块体积,而由模型组装的墙和台面 逐像素地与仅用带框架材质构建的「一个大柜子」参考一致。

破坏模块时只掉落其自身内容。 相邻模块不受影响:它们的物品就在它们那里,从未搬家。

破坏结构中间的模块只是把它撕裂成几部分——每部分成为独立的仓库。断开模块中的物品不会 掉落:它们留在原位,当连通性恢复时会再次出现在公共窗口中。

破坏紧邻仓库的组装机本身只会把其自身内容——蓝图队列和输出区—— 返还给玩家,而不动模块(TC-ASM-026 按精确数字计算掉落物,因此损失和双重掉落都可见)。 拆解仓库时的容量计数器会降到零,不会变成负数(TC-STOR-010——[Functional Storage] (https://github.com/AllTheMods/ATM-10/issues/2271) 的负计数器以崩溃告终)。

管道的填充和抽取由转移加固,而非端口的存在。 TC-STOR-012 让十六个锭在 箱子 → 管道 → 仓库之间往返,并单独验证「干跑」(simulate)不移动任何东西,且承诺的数量恰好等于实际 操作随后转移的数量——这两个数字的差异就是经典的复制(XNet #173)。

内容经受得住重启。 TC-STOR-013 让模块经过 NBT(与区块保存和加载相同的路径),并检查 槽位不会错位:两个占用槽位之间故意留出的空槽必须保持为空。

配方

配方刻意便宜:扩容是消耗品,而不是进度的里程碑。

进阶

相关内容

合成

有序合成
任意铁板
任意铁板
箱子
任意铁板
任意铁板
工作台
▶
存储模块
存储模块

用于

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