桶形存储方块
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 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 |