TileEntityTreasureChest(太空宝箱 / 一级宝箱)

事实基准:/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 Treasure Chest;若 CompatibilityManager.isAIILoaded() 则为 Space Treasure Chest GalacticraftCore.java:703-705
注册类 micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest 同上(:704)
关联方块 GCBlocks.treasureChestTier1 = new BlockT1TreasureChest("treasureChest") core/blocks/GCBlocks.java:96
方块→TE 分派 createNewTileEntity 无条件返回 new TileEntityTreasureChest(1)(显式传 tier = 1) core/blocks/BlockT1TreasureChest.java:390-393
父类 TileEntityAdvanced(→ 原版 TileEntity) core/tile/TileEntityTreasureChest.java:25、core/tile/TileEntityAdvanced.java:23
实现接口 IInventory / IKeyable / ISidedInventory core/tile/TileEntityTreasureChest.java:25
所属 modid GalacticraftCore core/Constants.java:7
槽位数 27 见下节

⚠ 注册名是条件表达式(GalacticraftCore.java:703-705),不是单一字符串—— 装了 AII(Advanced Ironclad / CompatibilityManager.isAIILoaded())时改叫 Space Treasure Chest。抄成固定的 Treasure Chest 会在该兼容分支下出错。

槽位与字段

core/tile/TileEntityTreasureChest.java:27:

private ItemStack[] chestContents = new ItemStack[27];

getSizeInventory()(:89-92)硬编码返回 27,不是 chestContents.length:

@Override
public int getSizeInventory() {
    return 27;
}

本类因此不存在「双箱合并成 54 格」的路径——双箱靠 InventoryLargeChest 在方块侧包装(见下节),TE 本身永远是 27 格。 readFromNBT(:164)用 new ItemStack[this.getSizeInventory()] 重新分配,长度仍是 27。

其它字段 值 / 含义 源码
tier int = 1(字段默认 :76,方块侧显式传 1 见 BlockT1TreasureChest.java:392) core/tile/TileEntityTreasureChest.java:76、:82-83
locked boolean = true(默认上锁) core/tile/TileEntityTreasureChest.java:74
getTierOfKeyRequired() return this.tier;(开哪一级钥匙) core/tile/TileEntityTreasureChest.java:483-484
getInventoryStackLimit() 64 core/tile/TileEntityTreasureChest.java:202-205
getInventoryName() container.treasurechest.name core/tile/TileEntityTreasureChest.java:473-474
hasCustomInventoryName() true core/tile/TileEntityTreasureChest.java:458-459
isNetworkedTile() true core/tile/TileEntityTreasureChest.java:548
侧面判定 源码
getAccessibleSlotsFromSide = IntStream.range(0, getSizeInventory()),即 0–26 全开 core/tile/TileEntityTreasureChest.java:552-555
canInsertItem = !this.locked core/tile/TileEntityTreasureChest.java:557-560
canExtractItem = !this.locked core/tile/TileEntityTreasureChest.java:562-565

⚠ 漏斗能否抽出全部取决于 locked——宝箱默认 locked = true, canInsertItem / canExtractItem 都返回 false; 用钥匙开锁时(:489-503)会连带把四个相邻宝箱一起解锁。

能量

无。 父类链是 TileEntityTreasureChest → TileEntityAdvanced → 原版 TileEntity (core/tile/TileEntityTreasureChest.java:25、core/tile/TileEntityAdvanced.java:23), 不经过 EnergyStorageTile,没有 gJ 容量、不耗电、不接电网。

tick / 特殊机制

行为 频率 源码
箱盖开合动画 lidAngle 每 tick,钳在 0.0–1.0 core/tile/TileEntityTreasureChest.java:379-416
服务端同步 ticksSinceSync,注释标注 once per 20 ticks(仅见于源码注释) core/tile/TileEntityTreasureChest.java:352 附近字段注释(:70-73 同类注释)
邻居箱检测 adjacentChestChecked + updateContainingBlockInfo();方块侧 onNeighborBlockChange 触发 core/blocks/BlockT1TreasureChest.java:276-284
拆箱掉货 breakBlock 遍历 getSizeInventory() 抛 EntityItem core/blocks/BlockT1TreasureChest.java:286-291

开锁

core/tile/TileEntityTreasureChest.java:489-503:用对等级钥匙时 this.locked = false,并把 adjacentChestXNeg / XPos / ZNeg / ZPos 四个非空相邻箱一并解锁。

GUI / Container

无 GC 自有 Container。 用原版箱子界面: core/blocks/BlockT1TreasureChest.java:383-385 调 par5EntityPlayer.displayGUIChest(...)。

双箱在方块侧用 net.minecraft.inventory.InventoryLargeChest 包装 (container.chestDouble,core/blocks/BlockT1TreasureChest.java:353-381), 四向各判一次(−X / +X / −Z / +Z)。

⚠ 开箱前会做三重遮挡检查,任一命中就不开箱: 上方固体方块 / 猫(豹猫)挡路 / 四个水平邻居有任何一个被挡 (core/blocks/BlockT1TreasureChest.java:335-352,判据 BlockT1TreasureChest.isOcelotBlockingChest)。

相关条目