ItemEnderStorage
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | enderstorage:enderChest(以 ItemBlock 注册) |
| 父类 | ItemBlock implements IFluidContainerItem |
hasSubtypes |
true |
| 最大堆叠 | 64(ItemBlock 默认) |
| 附魔适用 | 否(与 BlockContainer 一致,无附魔) |
| 频率编码 | itemDamage & 0xFFF(低 12-bit) |
| 类型编码 | itemDamage >> 12(高 4-bit:0=Ender Chest / 1=Ender Tank) |
注:ItemEnderStorage 是
BlockEnderStorage的ItemBlock形态。它不是独立的"物品",而是放在背包中代表一个尚未摆放的 Ender Chest / Tank 实例(带(freq, owner)状态)。
功能
ItemEnderStorage 把方块 (BlockEnderStorage) 的两个变体和它们的 (freq, owner) 状态编码到一个 ItemStack:
- 高 4 位
damage表示变体(0 = Ender Chest / 1 = Ender Tank)。 - 低 12 位
damage表示频率freq(3 × 4-bit 染料颜色)。 stack.tagCompound.owner(NBT 字符串)表示 owner;缺省时为"global"。
BlockEnderStorage.getPickBlock 和 getDrops 都通过 createItem(meta, freq, owner) 重新写出该 ItemStack;ItemEnderStorage.placeBlockAt 在放置成功后调用 tile.setFreq 和 tile.setOwner 把状态恢复回方块上。
使用方式
| 使用方式 | 触发条件 | 使用效果 | 条件/限制 |
|---|---|---|---|
| 放置方块 | 对地面右键 | 生成对应变体的 BlockEnderStorage,并把 freq/owner 写入 TileEntity |
与原版 ItemBlock.placeBlockAt 行为一致;服务端调用 super.placeBlockAt |
| 工具提示 | 鼠标悬停 / addInformation |
如果 owner 不是 "global",列表追加一行显示 owner 名 |
仅在手持时显示 |
合成(间接)
ItemEnderStorage 本身不是工作台直接产物,而是下面合成输出的物品形态:
- 16 色羊毛 → 各色 Ender Chest(meta=0):
bWb / OCO / bpb,C = Blocks.chest。 - 16 色羊毛 → 各色 Ender Tank(meta=1<<12):
bWb / OCO / bpb,C = Items.cauldron。 - 16 色羊毛 → 各色 Ender Pouch:
blb / lpl / pb / bWb。 - 已放置的 Ender Chest + 染料行/列:
EnderStorageRecipe.getCraftingResult改色(recolour(0..2, row, freq, ic))。
数值
| 数值 | 值 |
|---|---|
| 频率范围 | 0–4095(12-bit) |
| 颜色分量 | 各 4-bit(16 色) |
| 默认 owner | "global" |
IFluidContainerItem(默认禁用)
ItemEnderStorage implements IFluidContainerItem,但所有方法(getFluid/getCapacity/fill/drain)都返回 null 或 0,源码注释明确写"currently disabled"——意味着 Ender Tank 物品形态本身并不作为可装载流体的容器使用;流体交互仅在放置后由 TileEnderTank 处理。getLiquidStorage 私有方法仅作为"如果将来需要启用"的接口保留。
第三方 mod 集成
- CodeChickenCore(依赖):所有方块/物品渲染通过
codechicken.lib(ItemEnderStorageRenderer、RenderCustomEndPortal)渲染。 - NEI:
NEIEnderStorageConfig.registerStackStringifyHandler(new StorageStackStringifyHandler())让 NEI 把(freq, owner, type)视为不同的 NBT 字符串,避免在 NEI 中把不同 owner 的 Ender Chest 显示为同一个物品。 EnderStorageDyeTool:在BlockEnderStorage.onBlockActivated中作为染料判定后备,当手持EnderStorageDyeTool时可直接对放置态方块改色;但 ItemEnderStorage 自身不参与染色,因为它只影响freq分量而染色操作必须对方块执行。
相关条目
- Ender Chest -
meta=0对应的方块 - Ender Tank -
meta=1对应的方块 - Ender Pouch - 同 freq/owner 体系的随身物品版
- EnderStorageRecipe - 所有合成的注册点
- EnderStorage API -
getFreqFromColours、getColoursFromFreq等