桶形存储物品效果
基本信息
| 属性 | 值 |
|---|---|
| 来源物品 | 桶形存储方块(TileEntityBarrel / StorageLocal) |
| 触发条件 | 存入 / 取出 / 漏斗自动传输 / 红石判定 |
| 存储模型 | 同一时刻只存一种物品,按物品数量(totalAmount)而非组数记账 |
效果
物品存储
- 桶的存储由
StorageLocal实现,只维护一个itemTemplate+totalAmount: 不能混装多种物品,存入不同物品会替换物品类型 - 容量判定:
totalCapacity = maxstacks × 该物品最大堆叠数,maxstacks = stacksSize × (累计 STORAGE 升级点 + 1) - 溢出处理:装不下的部分由
Utils.dropItemInWorld(2% 掉率)掉在地面 - 服务器 tick 完成后通过
Message0x06FullStorage/Message0x01ContentUpdate向该维度广播内容,Message0x02GhostUpdate同步幽灵态
物品提取
- 提取量为
getStack(amount):非创造模式下amount = min(amount, totalAmount)且上限一组的最大堆叠数 - 潜行右键(空手)切换 ghosting:取出后保留物品类型(
keepLastItem), 与 STICKER 侧面升级无关 - 漏斗升级每 8 tick 向该面相邻的容器推 / 拉,单次最多 16 个
⚠️ 不是 FIFO 队列:因为只能存一种物品,不存在多种物品的先进先出排序。
虚空模式(VOID 核心升级)
deleteExcess = true 时,容量判定放宽到
getMaxStoredCount() = totalCapacity + stackAmount,超出的新物品被静默删除,
不产生掉落物。
创造模式(CREATIVE 核心升级)
alwaysProvide = true 时,getStack() 直接返回请求数量且不扣减 totalAmount,
桶相当于无限供应。
末影网络(ENDER 核心升级 + 调谐叉)
- 安装 ENDER 升级时
BSpaceStorageHandler.registerEnderBarrel()把桶注册进末影网络 - 调谐叉(damage 0)把
tuneID/structural/storage/void/creative写入叉子 NBT(damage → 1) - 再次用该叉子潜行右键另一个桶:目标桶的四个结构字段必须与快照一致,
之后
linkStorages()把两桶存储互链;源桶消失则提示BSPACE_FORK_LOST - 服务端 → 客户端同步节奏由
ServerTickHandler.timer控制,间隔来自配置项packetLimiterDelay(默认 500 毫秒) - ENDER / STORAGE / STRUCTURAL / VOID / CREATIVE 之间互斥:桶有 BSpace 链接时,
这些升级的安装与结构变更都会被
BSPACE_PREVENT拒绝
数值
| 属性 | 值 |
|---|---|
| 基础最大组数 | 64(stacksSize 默认值) |
| 基础最大物品数 | 64 组 × 64 = 4096 个(随物品最大堆叠数变化) |
| 单桶最大组数 | 419648(默认 64 × (6561+1),全 STORAGE6561) |
| 存储升级加成 | 加法:每 1 升级点 +1×stacksSize 组 |
| 材质等级影响 | 仅影响核心槽位数(可装多少升级),不改变基础组数 |
| 漏斗传输间隔 | 8 tick |
| 漏斗单次传输上限 | 16 个物品 |
| BSpace 同步间隔 | 500 ms(配置 packetLimiterDelay) |
| 溢出掉率 | 0.02(2%) |
相关条目
审计订正记录
[!WARNING] 2026-10-01 回源码核对,以下为已订正的事实错误
| 原文 | 正确值 | 证据 |
|---|---|---|
| 「优先提取最先存入的物品(FIFO)」 | 桶只存一种物品(单个 itemTemplate + totalAmount),不存在 FIFO 队列 |
StorageLocal.java:67-71,86-88,228-247 |
| 「最大存储槽 127×64(基础)」 | 基础容量 = stacksSize 64 组 × 64 = 4096 个物品;127×64 对应的是材质等级 7 的核心槽位数,与存储量无关 |
StorageLocal.java:30-31,301-303;StructuralLevel.java:30 |
| 「存储升级倍数 3^n(n = 升级等级)」 | 加法:maxstacks = basestacks × (upgCapacity + 1),与 3 的幂无关 |
StorageLocal.java:301-303 |
| 「应用 STICKER 标签限制(提取时)」 | STICKER 不影响提取;提取限制来自 CREATIVE(不减数量)与 ghosting 状态 | BlockBarrel.java:423-426;TileEntityBarrel.java:505-508 |
| 「末影网络延迟:取决于服务端 tick」(含糊) | 配置项 packetLimiterDelay,默认 500 ms,由 ServerTickHandler.timer 节流 |
BetterBarrels.java:118-123;ServerTickHandler.java:21,38 |
| 「虚空模式:无任何提示」 | 订正:溢出物被删除且不产生掉落物(Utils.dropItemInWorld 不参与),这一点正确;但容量判定会 +1 组缓冲 |
StorageLocal.java:526;TileEntityBarrel.java:253 |
| 缺漏斗 / 红石 / 溢出 / 同步的具体数值 | 已补 8 tick、16 个、2% 掉率、500 ms | TileEntityBarrel.java:184,220-226,282;Utils.java dropItemInWorld |
| 缺「装不下时溢出掉地」与「只存一种物品」这两条关键行为 | 已补 | TileEntityBarrel.java:279-284;StorageLocal.java:86-88 |