TileEntityParaChest(降落伞箱)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Parachest Tile |
GalacticraftCore.java:725 |
| 注册类 | micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest |
同上 |
| 关联方块 | GCBlocks.parachest = new BlockParaChest("parachest") |
core/blocks/GCBlocks.java:118 |
| 方块→TE 分派 | createNewTileEntity 无条件返回本 TE(无 metadata 分支) |
core/blocks/BlockParaChest.java:179-182 |
| 父类 | TileEntityAdvanced(→ 原版 TileEntity) |
core/tile/TileEntityParaChest.java:24、core/tile/TileEntityAdvanced.java:23 |
| 实现接口 | IInventorySettable / IScaleableFuelLevel(父类另带 IPacketReceiver) |
core/tile/TileEntityParaChest.java:24、core/tile/TileEntityAdvanced.java:23 |
| 所属 modid | GalacticraftCore |
core/Constants.java:7 |
| 槽位数 | 3(默认,可变) | 见下节 |
⚠ 注册名是 Parachest Tile,不是 Galacticraft Parachest 之类——
GC 的注册名大多不带 Galacticraft 前缀(对照
Cargo Loader 的 Cargo Loader)。
槽位与字段
core/tile/TileEntityParaChest.java:31:
public ItemStack[] chestContents = new ItemStack[3];
getSizeInventory()(:58-61)返回 this.chestContents.length。
⚠ 降落伞箱的槽位数是「3 + 18 的倍数」,不是定值——
setSizeInventory(int)(:63-69)会把传入值向上取整到满足 (size - 3) % 18 == 0:
if ((size - 3) % 18 != 0) {
size += 18 - (size - 3) % 18;
}
this.chestContents = new ItemStack[size];
| 大小档 | 槽位数 | 说明 |
|---|---|---|
| 初始 | 3 | :31 声明值 |
| 次档 | 21 | 3 + 18 |
| 再上一档 | 39 | 3 + 36 |
readFromNBT(:129-137)用同样的取整规则读回存档长度(chestContentLength 键,:133)。
本类没有 getInventoryStackLimit 之外的容量升级逻辑——升级路径需要结合
BlockParaChest 与客户端 GUI 才能确认,本页不作断言。
| 其它字段 | 值 / 含义 | 源码 |
|---|---|---|
tankCapacity |
5000(final,燃料罐容量) |
core/tile/TileEntityParaChest.java:26 |
fuelTank |
new FluidTank(this.tankCapacity),@NetworkedField(CLIENT) |
core/tile/TileEntityParaChest.java:28-29 |
getInventoryStackLimit() |
64 | core/tile/TileEntityParaChest.java:177-180 |
isUseableByPlayer 判定距离 |
平方距离 ≤ 64.0(即 8 格) | core/tile/TileEntityParaChest.java:183-186 |
getInventoryName() |
container.parachest.name |
core/tile/TileEntityParaChest.java:118-121 |
能量
无 GC 电力缓冲。 父类链是
TileEntityParaChest → TileEntityAdvanced → 原版 TileEntity
(core/tile/TileEntityParaChest.java:24、core/tile/TileEntityAdvanced.java:23),
不经过 EnergyStorageTile,因此没有 storage 字段、没有 gJ 容量。
⚠ 本机只带一个 5000 单位的燃料 FluidTank(供喷气背包 / 喷气推进器燃烧),
不是 GC 的 gJ 电容。把它写成「16000 gJ」即为跨体系错误。
tick / 特殊机制
core/tile/TileEntityParaChest.java:194-200:
| 行为 | 频率 | 源码 |
|---|---|---|
箱盖开合动画 lidAngle 推进 |
有玩家打开时按 (ticks + xCoord + yCoord + zCoord) % 200 == 0 推进 |
core/tile/TileEntityParaChest.java:195-200 |
| 燃料液面刻度 | getScaledFuelLevel(i) = fluid.amount * i / 5000 |
core/tile/TileEntityParaChest.java:51-56 |
动态槽位数同步靠自研封包,不走标准 IInventory 内容同步:
validate()(:41-49)在客户端发 new PacketDynamicInventory(this) 向服务端
索要「大小 + 内容」,注释即写明 // Request size + contents information from server(:46)。
相邻箱检测字段 adjacentChestChecked(:33)在 updateContainingBlockInfo()(:188-192)
里被重置为 false。
GUI / Container
| GUI 类 | Container 类 | 分派处(core/client/gui/GuiHandler.java) |
|---|---|---|
core.client.gui.container.GuiParaChest |
core.inventory.ContainerParaChest |
Container :129-130、Gui :217-218 |