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_powder
  • p = Items.ender_pearl
  • l = Items.leather
  • W = 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 也无法保留私有信息。

相关条目