存储模块

存储模块

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 行

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

合并规则

当模块以紧邻仓库的另一个模块时,它加入仓库。以棱或角相接不算——这样可以在紧贴的 情况下建成两个独立的仓库。 每次打开窗口时集合重新计算:遍历从你点击的模块开始。什么都不记忆,因此安装和拆除模块 不需要任何重建。 如果结构中模块超过四个,按遍历顺序的前四个会加入仓库。点击同一结构的不同模块可能得到 不同的四个——窗口会显示已连接多少模块,因此可见。

界面

两种窗口尺寸:单个模块的 3 行(176×166)和 任何更大仓库的 6 行(195×220)。 滚动条——网格右侧,面板宽度为此增加了 19 px。鼠标滚轮、拖动滑块和点击轨道都有效。 两个模块的仓库没什么可滚的,滚动条以不激活的色调绘制,而不是消失:时有时无的元素 比明显禁用的元素更难读。 Shift 点击也会把物品放入屏幕上看不见的行。 这不是小事:原版 shift 点击按菜单槽位 工作,而窗口正好有六行,因此「显而易见」的实现会默默停在仓库中间,一半还空着时就报 「已满」。 没有搜索——108 格还不足以需要它。

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

为什么是视图而不是槽位搬家。 Slot.x/Slot.ypublic 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(与区块保存和加载相同的路径),并检查 槽位不会错位:两个占用槽位之间故意留出的空槽必须保持为空。

配方

合成:——原版箱子周围十字形摆 4 个 铁板

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

进阶

等级:无——不需要能量,在最初的板材之后即可使用。 在存储系列中的位置:铁箱子 36 → 银箱子 45 → 金箱子 54 → 琥珀金箱子 81 → 模块仓库 108。箱子没有被贬值:它们以单个方块 提供全部容量,仓库需要四个。 之后:组装机将能直接从此类仓库取料。

相关内容

金箱子——上一级存储 材料形态——合成用的板材 库存显示物品展示框——未加载区块防护的范例 组装机——仓库的未来消费者 物品管道——从外部填充仓库

合成

有序合成
任意铁板
任意铁板
Chest
任意铁板
任意铁板
工作台
存储模块
存储模块

用于

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