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

相关条目