Ender Pouch
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | enderstorage:enderPouch |
| 父类 | Item(无 ItemBlock) |
hasSubtypes |
true |
| 最大堆叠 | 1(setMaxStackSize(1)) |
| 附魔适用 | 否 |
| 频率编码 | itemDamage & 0xFFF(低 12-bit) |
| owner | stack.tagCompound.owner(默认 "global") |
| 渲染通道数 | 4(getRenderPasses = 4) |
| 标签页 | CreativeTabs.tabDecorations |
功能
Ender Pouch 是 EnderStorage 的"随身版 Ender Chest"。把它放在背包/快捷栏里:
- 右键(不潜行)打开:调用
EnderStorageManager.instance(side).getStorage(owner, freq, "item").openSMPGui(player, title),弹出与 Ender Chest 完全共享的 GUI(同样的(owner, freq)三元组)。 - 潜行 + 右键对准 Ender Chest:把该 Ender Chest 的
freq与owner"绑定"到本 Ender Pouch(写itemDamage与 tagNBT)。在anarchy-mode配置下:若该 Ender Chest 属于自己 → 直接写入;属于别人 → 写入 owner="global"(强行打开公共库存)。
Ender Pouch 没有"物品→方块"的放置操作;它就是一个共享库存的钥匙。
使用方式
| 使用方式 | 触发条件 | 使用效果 | 条件/限制 |
|---|---|---|---|
| 右键(无目标) | 任意时刻 | 打开对应 (owner, freq, "item") 库存 GUI |
必须不潜行;服务端 world.isRemote=false 才会执行 |
| 潜行 + 右键方块 | 对 TileEnderChest |
把该方块的 freq/owner 复制到 Pouch 自身 |
仅当 TileEntity 是 TileEnderChest 才生效 |
| 鼠标悬停 | 任意 | 当 owner 不是 "global" 时在 tooltip 显示 owner 名 |
同 ItemEnderStorage |
渲染细节(requiresMultipleRenderPasses=true)
getIcon(stack, renderPass) 通过一张 sprite sheet(textures/enderpouch.png)合成 4 个渲染通道:
| renderPass | 含义 | 来源 |
|---|---|---|
| 0 | 状态指示 | i = 0;若客户端对应 EnderItemStorage.openCount() > 0 → 标记打开中;若 owner 非 global → 标记私有;组合为 0/1/2/3 四种 sprite 索引 |
| 1 | 颜色分量 A(高 4-bit) | EnderStorageManager.getColourFromFreq(freq, 0) |
| 2 | 颜色分量 B(中 4-bit) | EnderStorageManager.getColourFromFreq(freq, 1) |
| 3 | 颜色分量 C(低 4-bit) | EnderStorageManager.getColourFromFreq(freq, 2) |
这意味着 Pouch 表面的三个色块直接显示其频率三元组,肉眼即可区分。
数值
| 数值 | 值 |
|---|---|
| 频率范围 | 0–4095(与方块共用) |
| 颜色分量 | 16 色染料 |
| 最大堆叠 | 1(不可堆叠) |
| 渲染通道 | 4 |
合成(无 dreamcraft 时由 addNormalRecipies 注册)
blb
lpl
pb
bWb
实际代码 EnderStorageRecipe.addNormalRecipies 把模板拆成:
b = Items.blaze_powderp = Items.ender_pearll = Items.leatherW = Blocks.wool(meta 0–15)
输出:enderstorage:enderPouch,meta = EnderStorageManager.getFreqFromColours(i, i, i)。16 种 wool meta 对应 16 种单色 Pouch。
耐久与消耗
| 项目 | 值 |
|---|---|
| 最大耐久 | 无耐久(不会损坏) |
| 每次使用消耗 | 无(右键打开和染色均不消耗 Pouch 自身) |
| 使用后是否消失 | 否 |
注意:Ender Pouch 与 Ender Chest 在合成关系里不是同一物品,但共享
EnderItemStoragePlugin的库存系统。Pouch 的"染色"实际上没有自己的染料代码——它必须通过潜行右键 Ender Chest 复制频率;如果想从一种颜色换到另一种颜色,需要拿到对应颜色的 Pouch(重新合成)或者先用新颜色的 Pouch 潜行右键相同(owner, freq)的 Pouch(但代码侧并未实现 Pouch→Pouch 复制)。
第三方 mod 集成
- CodeChickenCore:
codechicken.lib.render.SpriteSheetManager提供多通道图标合成。 - CodeChickenCore GUI/SMP 框架:
ServerUtils.openSMPContainer+ClientUtils.openSMPGui负责同步 GUI 与网络包(channel="ES", type=2)。 EnderStorageStoredEvent(事件):当玩家通过/enderstorage命令打开公共库存或自己库存时,服务器会向客户端推送完整(owner, type, freqs)数据,Ender Pouch 的客户端图标 (renderPass=0的openCount) 即从这些数据计算。- Anarchy Mode:当
EnderStorage.anarchyMode=true,强行潜行绑定别人的 Ender Chest 会把 owner 重写为"global",此时 Pouch 也无法保留私有信息。
相关条目
- Ender Chest - Pouch 共享的物品库存后端
- ItemEnderStorage - 块形态的 ItemBlock
- EnderStorageRecipe - 16 色合成模板
- EnderStorage API -
getColourFromFreq工具