TileEntityTreasureChestMars(二级宝箱)

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

注册信息

属性 值 来源
TileEntity 注册名 Tier 2 Treasure Chest MarsModule.java:243
注册类 micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars 同上
关联方块 BlockTier2TreasureChest("treasureT2") planets/asteroids/blocks/AsteroidBlocks.java:34
方块→TE 分派 createNewTileEntity 无条件返回 new TileEntityTreasureChestMars() planets/mars/blocks/BlockTier2TreasureChest.java:400-402
父类 TileEntityAdvanced(→ 原版 TileEntity) planets/mars/tile/TileEntityTreasureChestMars.java:26、core/tile/TileEntityAdvanced.java:23
实现接口 IInventory / IKeyable / ISidedInventory planets/mars/tile/TileEntityTreasureChestMars.java:26
所属 modid GalacticraftMars core/Constants.java:8
槽位数 27(getSizeInventory() 返回值) 见下节

⚠ 注册名是 Tier 2 Treasure Chest,不是 Galacticraft Treasure Chest。

⚠ 方块类住在 planets/mars/blocks/ 却在 AsteroidBlocks 里实例化—— planets/asteroids/blocks/AsteroidBlocks.java:34 是 new BlockTier2TreasureChest("treasureT2")(跨包引用), planets/mars/blocks/MarsBlocks.java:34 再做 MarsBlocks.tier2TreasureChest = AsteroidBlocks.treasureChestTier2;。 按目录名反推「谁拥有二级宝箱」会推错。

槽位与字段

planets/mars/tile/TileEntityTreasureChestMars.java:28:

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

⚠ 数组声明 36 格,但 getSizeInventory() 硬编码返回 27 (planets/mars/tile/TileEntityTreasureChestMars.java:90-93):

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

这是源码原样:readFromNBT(:165)用 new ItemStack[this.getSizeInventory()] 重新分配,读档后数组会缩回 27 格; 未读档的新建实例则暂时持有 36 格数组,但所有按 getSizeInventory() 走的路径 (NBT 存取、破方块掉货、侧面可达槽)都只覆盖 27 格。

其它字段 值 / 含义 源码
tier int = 2(字段默认 :77,无参构造 this(2) 见 :79-81) planets/mars/tile/TileEntityTreasureChestMars.java:77、:83-84
locked boolean = true planets/mars/tile/TileEntityTreasureChestMars.java:75
getTierOfKeyRequired() return this.tier;(= 2) planets/mars/tile/TileEntityTreasureChestMars.java:484-485
getInventoryStackLimit() 64 planets/mars/tile/TileEntityTreasureChestMars.java:203-206
getInventoryName() container.treasurechest.name(与一级宝箱同一个键) planets/mars/tile/TileEntityTreasureChestMars.java:474-475
hasCustomInventoryName() true planets/mars/tile/TileEntityTreasureChestMars.java:459-460
isNetworkedTile() true planets/mars/tile/TileEntityTreasureChestMars.java:549
adjacentChest* 四个相邻箱引用(ZNeg / XPos / XNeg / ZPos) planets/mars/tile/TileEntityTreasureChestMars.java:39、:44、:49、:54
侧面判定 源码
getAccessibleSlotsFromSide = IntStream.range(0, getSizeInventory()) → 0–26 planets/mars/tile/TileEntityTreasureChestMars.java:553-556
canInsertItem = !this.locked planets/mars/tile/TileEntityTreasureChestMars.java:558-561
canExtractItem = !this.locked planets/mars/tile/TileEntityTreasureChestMars.java:563-566

能量

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

tick / 特殊机制

行为 频率 源码
箱盖开合动画 lidAngle 每 tick,钳在 0.0–1.0 planets/mars/tile/TileEntityTreasureChestMars.java:380-417
服务端同步 源码注释 Server sync counter (once per 20 ticks)(仅见于源码注释) planets/mars/tile/TileEntityTreasureChestMars.java:70-73
开锁 对等级钥匙后 locked = false,并连带解锁四个相邻箱 planets/mars/tile/TileEntityTreasureChestMars.java:490-505

GUI / Container

无 GC 自有 Container。 用原版箱子界面—— 方块侧 BlockTier2TreasureChest 同样走 InventoryLargeChest 包装双箱 (planets/mars/blocks/BlockTier2TreasureChest.java:400 附近的 onBlockActivated), 并有 isOcelotBlockingChest 遮挡检查(planets/mars/blocks/BlockTier2TreasureChest.java:404)。

相关条目