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