跳到正文
烈焰甘蔗Wiki

Drawer Network(抽屉网络)

基本信息

属性 值 来源
类型 连通性网络(不是固定尺寸多方块结构) —
控制器(根节点) StorageDrawers:controller(BlockController + TileEntityController) ModBlocks.java:66,99
必需方块 仅 Controller 本身 —
中继方块 StorageDrawers:controllerSlave(BlockSlave)—— 只提供连通性,不贡献槽位 TileEntityController.java:575-577
存储方块 fullDrawers1/2/4、halfDrawers2/4、compDrawers、fullCustom1/2/4、halfCustom2/4 ModBlocks.java:60-76
非槽位成员 trim / trimCustom——实现 INetworked 但无 TileEntity,槽位贡献 0 TileEntityController.updateRecordInfo else 分支
成员资格判定 该坐标方块必须 instanceof INetworked TileEntityController.java:567

结构要求

这不是"几×几×几"的刚性多方块——没有任何尺寸校验、没有 validateStructure、没有脚手架放置。真实约束只有两条:

  1. 传播半径:从 Controller 起点算,每跳的切比雪夫距离 depth = max(|dx|,|dy|,|dz|) 必须 ≤ range,range 取自配置 controller.range,默认 12(ConfigManager.java:503)
  2. 连通性:范围只是上限,实际能否纳入取决于是否存在一条完全由 INetworked 方块构成的正交连通链。中间可以隔着普通方块,BFS 会穿过它们
  • 最小规模:1 个 Controller(可管理 0 个抽屉,此时网络为空)
  • 无"最大规模"硬性上限;实际受 controller.maxDrawers 约束
  • 多个 Controller 各自独立成网,不会互相合并,也不存在"10 个控制器"这类总上限

形成机制

  • BlockController 构造时 setTickRandomly(true);updateTick 每 tickRate=100 tick 在服务端调用 te.updateCache() 重建整张网络表
  • onPostBlockPlaced 放置后立即 updateCache()
  • 无需手动注册或激活——放置即生效,破坏后 100 tick 内自动从网络中移除
  • Slave 无需"放在 Controller 旁边"这一单独规则:它和抽屉一样靠 BFS 连通性被纳入,位置只需在网络路径上

功能

  • 统一管理网络内所有抽屉的存取与标签显示
  • 无 GUI:BlockController.onBlockActivated 中不存在 player.openGui(...);原条目"玩家可通过 Controller GUI 查看所有连接的抽屉"是虚构的
  • 侧向访问:TileEntityController implements ISidedInventory(autoSides 默认 {0,1,2,3,4,5} 即六面全开)
  • 钥匙系统:支持锁定(Lock)、遮蔽(Shroud)、量化(Quantify)、个人所有权(Personal),均由钥匙物品右键切换,无 KeyBinding
  • 双击速倾:点击正面后 10 tick 内同一玩家再点,改为倾倒整个背包(TileEntityController.java:185-208)

数值

数值 值 来源
每 Controller 最大抽屉方块数 2048(配置 controller.maxDrawers) ConfigManager.java:505
每 Controller 最大槽位数 无固定值 = 纳入网络的各 BlockDrawers 自身 drawerCount 之和 TileEntityController.java:544
扫描半径 range 12(配置 controller.range,切比雪夫距离) ConfigManager.java:503
最大 Controller 数量 / 最大总槽位 160 源码中无此概念(原文编造) —
缓存刷新间隔 100 tick BlockController.java:36-38
双击倾倒窗口 10 tick TileEntityController.java:185
自动向侧面输出 6 面全开(autoSides = {0,1,2,3,4,5}) TileEntityController.java:145
侧向输入 / 侧向输出 均可通过 enableSidedInput / enableSidedOutput 关闭(默认均 true) ConfigManager.java:375-378

⚠️ 订正(严重):原文"每 Controller 最大槽位 16""最大 Controller 数量 10""最大总槽位 160""扫描半径约 5 格"四个数值在源码中全部找不到依据。真实值是 range=12、maxDrawers=2048(且 2048 统计的是方块数不是槽位数),Controller 数量无上限。

限制

  • Controller 之间不自动同步,各成独立网络(原文此项正确)
  • Slave 不增加槽位数量、不计入 maxDrawers,仅提供连通路径(原文此项正确)
  • 只能纳入在 range 球形范围内、且存在 INetworked 连通链的方块
  • Trim 参与连通但槽位贡献为 0
  • 距离按切比雪夫距离计算,因此"上方 12 格 + 水平 12 格"的方块同样在范围内

参与方块

控制器

中继

存储方块(贡献槽位)

仅连通性(槽位贡献 0)

  • Trim - 装饰条,无 TileEntity
  • Trim Custom - 有 TileEntityTrim 但非 IDrawerGroup,同样不贡献槽位
浏览全部模组