侧面升级
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | JABBA:upgradeSide |
| 最大堆叠 | 16 |
| 附魔适用 | 否(setMaxDamage(0)) |
| 变体 | 3 种,由物品 metadata 决定 |
功能
侧面升级安装在桶的某一个侧面上(sideUpgrades[6] / sideMetadata[6]),
提供该面的功能外观与行为。正面(FRONT,首次贴标签那一面)不能安装。
升级类型
| 元数据 | 类型 | 物品常量 | 需求(mapReq) |
功能 |
|---|---|---|---|---|
| 0 | STICKER |
UpgradeSide.STICKER (0x2) |
-1(无) |
该面 isSideSolid() 返回 false;渲染锁 / 标签贴图 |
| 1 | HOPPER |
UpgradeSide.HOPPER (0x3) |
HOPPER 核心升级 | 每 8 tick 与该面相邻容器自动推/拉 |
| 2 | REDSTONE |
UpgradeSide.REDSTONE (0x4) |
REDSTONE 核心升级 | 该面输出红石信号 |
安装时若缺少对应核心升级,发送 FACADE_REDSTONE / FACADE_HOPPER 提示并拒绝。
升级功能详解
STICKER(贴标)
- 让该面变为非实心(
isSideSolid()→ false),不影响其他面 - 客户端在
sideIsLabel(FRONT 或 STICKER)时渲染锁 / 链接 / 幽灵态贴图 - 不锁定提取。「取出后保留物品类型」(ghosting /
keepLastItem)是 空手潜行右键切换的,与 STICKER 无关
HOPPER(漏斗)
子模式存于 sideMetadata 低两位:
| 值 | 常量 | 方向 |
|---|---|---|
| 0 | HOPPER_PUSH |
桶 → 该升级所在面的相邻容器 |
| 1 | HOPPER_PULL |
该升级所在面的相邻容器 → 桶 |
方向由「该侧面升级所在的那一面」决定,不是固定的上方 / 下方。
传输节奏:updateEntity() 中 ++nTicks % 8 == 0,即每 8 tick 处理一次;
单次传输上限 setMaxTotalTransferred(16) / setStacksToTransfer(16) /
setMaxItemsPerTransfer(16),并以桶内当前物品为过滤条件。
TE 只有在装有 HOPPER 核心升级时才 startTicking() 进入 tick 列表。
⚠️ 源码自带的 hack 注释:applySideUpgrade 给 HOPPER 装的初值是
sideMetadata = 2(复用了红石的 RS_PROP 常量),靠 & 1 掩码才等价于
HOPPER_PUSH。
REDSTONE(红石)
子模式存于 sideMetadata 低两位,由锤子循环切换
RS_FULL → RS_EMPT → RS_PROP → RS_FULL:
| 值 | 常量 | 输出 |
|---|---|---|
| 0 | RS_FULL |
满时输出 15 |
| 1 | RS_EMPT |
空时输出 15 |
| 2 | RS_PROP |
floor(amount/max × 14) + 1;空时 0,满时 15 |
输出强度由 getRedstonePower(side) 计算,并按 sideSwitch = {1,0,3,2,5,4}
做水平方向镜像映射(保证左右两侧的桶行为对称)。装有 VOID 升级时,
「满」的判定会减去一个 stackAmount。
使用方式
| 使用方式 | 触发条件 | 使用效果 | 条件/限制 |
|---|---|---|---|
| 潜行右键点击桶的某一面 | 手持侧面升级 | 安装到该面 | 该面必须为 NONE;HOPPER/REDSTONE 需要对应核心升级 |
| 潜行右键点击已装升级的面 | 手持桶形锤子 | 移除该面的侧面升级 | 核心升级被移除时,会连带掉落失去前置的侧面升级 |
| 非潜行右键点击该面 | 手持桶形锤子 | 切换该面子模式 | 仅红石 / 漏斗有效 |
合成配方
addSideUpgrade 模板 " P " / "PBP" / " P ",产出 4 个:
| metadata | 中心 B |
边框 P |
|---|---|---|
| 0 STICKER | slimeball |
纸 |
| 1 HOPPER | 漏斗 | plankWood |
| 2 REDSTONE | 红石粉 | plankWood |
相关条目
审计订正记录
[!WARNING] 2026-10-01 回源码核对,以下为已订正的事实错误
| 原文 | 正确值 | 证据 |
|---|---|---|
| 最大堆叠 64 | 16 | ItemUpgradeSide.java:25 setMaxStackSize(16) |
| STICKER「锁定标签」/「用于标识桶内存储内容」 | STICKER 的作用是让该面非实心 + 渲染锁/标签贴图;ghosting 由空手潜行右键切换,与 STICKER 无关 | BlockBarrel.java:423-426,460-461,514-515;TileEntityBarrel.java:299,505-508;StorageLocal.java:265-268 |
| HOPPER_PUSH「输出到下方的容器」/ HOPPER_PULL「从上方容器输入」 | 方向取决于升级所在的那个侧面的相邻方块,与上下无关 | TileEntityBarrel.java:187-203,211-218 |
| 漏斗传输频率未记录 | 每 8 tick 一次,单次最多 16 个物品,且以桶内当前物品为过滤条件 | TileEntityBarrel.java:184,220-226 |
| 「RS_PROP:按存储比例输出信号」 | 已补精确公式 floor(amount/max × 14) + 1(空 0、满 15),以及水平方向镜像映射 |
TileEntityBarrel.java:242,261-264 |
| 需求列「HOPPER 核心升级 / REDSTONE 核心升级」正确,但未说明 STICKER 无需求 | 已补 mapReq = {-1,-1,-1,HOPPER,REDSTONE} 的完整语义 |
UpgradeSide.java:31 |
| 缺合成配方 | 已补全 3 种配方(各产 4 个) | RecipeHandler.java:86-89,152-158 |