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)。