TileEntityTreasureChestAsteroids(小行星宝箱)

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

注册信息

属性 值 来源
TileEntity 注册名 Asteroids Treasure Chest AsteroidsModule.java:321
注册类 micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityTreasureChestAsteroids 同上
关联方块 AsteroidBlocks.treasureChestTier3 = new BlockTier3TreasureChest("treasureT3") planets/asteroids/blocks/AsteroidBlocks.java:35
方块→TE 分派 createNewTileEntity 无条件返回 new TileEntityTreasureChestAsteroids() planets/asteroids/blocks/BlockTier3TreasureChest.java:404-406
父类 TileEntityAdvanced(→ 原版 TileEntity) planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:26、core/tile/TileEntityAdvanced.java:23
实现接口 IInventory / IKeyable / ISidedInventory planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:26-27
所属 modid GalacticraftMars(Asteroids 模块复用 Constants.MOD_ID_PLANETS) core/Constants.java:8
槽位数 27(getSizeInventory() 返回值) 见下节

⚠ 注册名是 Asteroids Treasure Chest,不是 Tier 3 Treasure Chest—— 方块字段叫 treasureChestTier3、类名带 Tier3,但注册名没有 “Tier 3” 字样。 两个名字别混。

槽位与字段

planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:29:

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

⚠ 数组声明 36 格,但 getSizeInventory() 硬编码返回 27 (planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:91-94):

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

这是源码原样,不是本 wiki 的转述错误: readFromNBT(:166)用 new ItemStack[this.getSizeInventory()] 重新分配, 读档后数组会缩回 27 格;破方块掉货、getAccessibleSlotsFromSide 等 按 getSizeInventory() 走的路径也只覆盖 27 格。 所以**「三级宝箱 54 格」在本版本源码里没有依据**。

其它字段 值 / 含义 源码
tier int = 3(字段默认 :78,无参构造 this(3) 见 :80-82) planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:78、:84-85
locked boolean = true planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:76
getTierOfKeyRequired() return this.tier;(= 3) planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:485-486
getInventoryStackLimit() 64 planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:204-207
getInventoryName() container.treasurechest.name(与前两级同一个键) planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:475-476
hasCustomInventoryName() true planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:460-461
isNetworkedTile() true planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:550
adjacentChest* 四个相邻箱引用(ZNeg / XPos / XNeg / ZPos) planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:39、:44、:49、:54
侧面判定 源码
getAccessibleSlotsFromSide = IntStream.range(0, getSizeInventory()) → 0–26 planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:554-557
canInsertItem = !this.locked planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:559-562
canExtractItem = !this.locked planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:564-567

能量

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

tick / 特殊机制

行为 频率 源码
箱盖开合动画 lidAngle 每 tick,钳在 0.0–1.0 planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:381-418
服务端同步 源码注释 Server sync counter (once per 20 ticks)(仅见于源码注释) planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:71-74
开锁 对等级钥匙后 locked = false,连带解锁四个相邻箱 planets/asteroids/tile/TileEntityTreasureChestAsteroids.java:491-506

GUI / Container

无 GC 自有 Container。 用原版箱子界面—— 方块侧 BlockTier3TreasureChest 走 InventoryLargeChest 包装双箱 (planets/asteroids/blocks/BlockTier3TreasureChest.java 的 onBlockActivated), 并有 isOcelotBlockingChest 遮挡检查(planets/asteroids/blocks/BlockTier3TreasureChest.java:408)。

渲染器是独立一套:planets/asteroids/client/render/tile/TileEntityTreasureChestRenderer.java、 模型 core/client/model/block/ModelTreasureChestLarge.java(core/client/render/tile/TileEntityTreasureChestRenderer.java)。

相关条目