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 分量而染色操作必须对方块执行。

相关条目