跳到正文
烈焰甘蔗Wiki

桶形存储方块

基本信息

属性 值
注册名 JABBA:barrel
TileEntity TileEntityBarrel
硬度 2.0
爆炸抗性 5.0
采集等级 axe 1
亮度 0(未设置 setLightValue)

功能

JABBA 模组的核心存储方块。全 mod 只注册了这一个方块,注册时未带 metadata (GameRegistry.registerBlock(blockBarrel, "barrel")),因此方块本身没有 metadata; 材质等级存储在 TileEntity 的 NBT 字段 structural 中,客户端与服务器的等级同步 依赖 Message0x04Structuralupdate。

材质等级(Structural Level)

等级数组由配置项 materialList 生成(默认 7 种材质,上限 18 种),索引 0 表示 「未做结构升级的素桶」,材质为 null、核心槽位 0。

等级 材质(ore dict) 核心升级槽位 = 2^等级 - 1
0 无(素桶) 0
1 Ore.plankWood 1
2 Ore.ingotIron 3
3 Ore.ingotGold 7
4 Ore.gemDiamond 15
5 Ore.obsidian 31
6 Ore.whiteStone 63
7 Ore.gemEmerald 127

槽位公式:maxCoreSlots = Σ 2^i (i = 0 .. 等级-1),即 2^等级 - 1。

材质等级不改变基础存储量。基础存储固定为配置项 stacksSize(默认 64)组物品, 由 StorageLocal.basestacks 读取,与等级无关。

存储升级

每安装一个核心升级,会调用 addStorageUpgrade() 若干次(次数 = 该升级的 slotsUsed),累计成 upgCapacity,容量按加法重算:

maxstacks = basestacks × (upgCapacity + 1)
totalCapacity = maxstacks × 该物品最大堆叠数
升级类型 槽位消耗 实际效果
STORAGE 1 +1×stacksSize 组(+64 组)
STORAGE3 3 +3×stacksSize 组(+192 组,总 256 组)
STORAGE9 9 +9×stacksSize 组(+576 组,总 640 组)
STORAGE27 27 +27×stacksSize 组(总 1792 组)
STORAGE81 81 +81×stacksSize 组(总 5248 组)
STORAGE243 243 总 15616 组
STORAGE729 729 总 46720 组
STORAGE2187 2187 总 140032 组
STORAGE6561 6561 总 419648 组

多个 STORAGE 升级互相累加,不是相乘。

侧面升级

安装在非正面侧,按 UpgradeSide.mapMeta 固定对应元数据:

升级类型 元数据 功能 需求
STICKER 0 该面 isSideSolid() 返回 false,并渲染锁/标签贴图 无
HOPPER 1 漏斗推/拉自动传输 HOPPER 核心升级
REDSTONE 2 红石输出(满/空/比例) REDSTONE 核心升级

STICKER 不锁定提取。物品类型保留(ghosting)由「空手潜行右键」切换 keepLastItem,与 STICKER 无关。

摆放要求

  • 可垂直/水平放置,由配置项 allowVerticalPlacement(默认 true)控制; 正面 = 首次贴标签的那一面
  • 垂直放置的朝向判定阈值为配置项 verticalPlacementRange(默认 0.79)
  • 侧面升级只能装在 sideUpgrades == NONE 的面上,正面(FRONT)不能装

交互

触发 行为
左键(不潜行) 取出 1 个物品
左键(潜行) 取出 1 组物品(受 reverseBehaviourClickLeft 反转,默认不潜行取 1 个)
右键(空手) 把手持物品整组存入桶
右键(手持桶形锤子) 按当前锤子模式循环切换该侧红石/漏斗子模式
潜行右键(空手) 切换 ghosting(取出后保留物品类型)
潜行右键(持侧面升级) 安装侧面升级到该面
潜行右键(持核心升级) 安装核心升级
潜行右键(持结构升级) 结构升级 +1 级(元数据必须恰等于当前等级)
潜行右键(持桶形锤子) 按锤子模式移除升级/降级结构
潜行右键(持调谐叉) 未调谐则调谐到该桶;已调谐则把两桶 BSpace 链接

本 mod 没有任何 GUI(grep -rn "GuiScreen\|IGuiHandler" src/ 无输出), 右键不会打开容器界面。

第三方集成

  • MineFactory Reloaded:TileEntityBarrel 实现 IDeepStorageUnit (@Optional.Interface(iface=..., modid="MineFactoryReloaded")), IBarrelStorage 也继承该接口
  • Waila:FMLInterModComms 注册 BBWailaProvider.callbackRegister
  • Avaritia:破坏桶时若内容超过 64 组,用 ItemMatterCluster.makeClusters() 把内容作为物质聚合包掉落(@Optional.Method(modid="Avaritia"))。 不是「投掷物品直接存入桶中」
  • NEI/REI/JEI:源码中没有任何 NEI/REI/JEI 插件代码,只有一行 @Mod(dependencies = "after:NotEnoughItems") 软依赖声明

相关条目

审计订正记录

[!WARNING] 2026-10-01 回源码核对,以下为已订正的事实错误

原文 正确值 证据
硬度 5.0 硬度 2.0 BlockBarrel.java:58 setHardness(2.0F)
爆炸抗性 10.0 爆炸抗性 5.0 BlockBarrel.java:59 setResistance(5.0F)
「通过 metadata 区分材质等级」 方块无 metadata,等级存 TileEntity NBT structural BlockBarrel.java 无 getMetaFromBlock;BetterBarrels.java:271 注册未带 meta;BarrelCoreUpgrades.java:372 setInteger("structural", ...)
等级 1 = 铁锭 / 等级 6 = 绿宝石 等级 1 = 木板、2 = 铁、3 = 金、4 = 钻石、5 = 黑曜石、6 = 圆石、7 = 绿宝石(整体错位一级,且漏掉等级 7) StructuralLevel.java:12-13,46-48
「最大存储槽」按等级 1×64…127×64 该列数值实为核心升级槽位数;基础存储恒为 stacksSize(64) 组,材质等级不改变它 StorageLocal.java:30,301-303
存储升级「×3 / ×9 …」容量 加法:每个升级点 +1×stacksSize 组,maxstacks = basestacks × (upgCapacity+1) StorageLocal.java:301-303;BarrelCoreUpgrades.java:285
交互「右键 → 打开 GUI」 右键是把手持物品存入桶;全 mod 无 GUI TileEntityBarrel.java:297,309 manualStackAdd;grep GuiScreen/IGuiHandler 无输出
交互「铁砧敲击 → 改变材质等级」 不存在铁砧交互 grep -rn "anvil" src/ 无输出
STICKER「锁定标签(防止提取)」 STICKER 使该面非实心 + 渲染锁贴图;物品类型保留由空手潜行右键切换 BlockBarrel.java:423-426,460-461;TileEntityBarrel.java:299,505-508
「NEI/REI/JEI:显示容量和升级信息」 无任何集成代码,仅 @Mod(dependencies="after:NotEnoughItems") grep -rn "NEI|jei|rei\." src/ 仅命中 BetterBarrels.java:47
Avaritia「投掷物品直接存入桶中」 破坏桶、内容 > 64 组时,内容以物质聚合包掉落 BlockBarrel.java:282-292,311-319
浏览全部模组