TileEntityCargoLoader(货运装载机)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Cargo Loader |
GalacticraftCore.java:723 |
| 注册类 | micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader |
同上 |
| 关联方块 | GCBlocks.cargoLoader = new BlockCargoLoader("cargo") |
core/blocks/GCBlocks.java:117 |
| 方块→TE 分派 | metadata < METADATA_CARGO_UNLOADER(=4)时装载机,否则卸载机 |
core/blocks/BlockCargoLoader.java:136-141、:38 |
| 父类 | TileBaseElectricBlockWithInventory(→ TileBaseElectricBlock → TileBaseUniversalElectrical → EnergyStorageTile) |
core/tile/TileEntityCargoLoader.java:21 |
| 实现接口 | ISidedInventory / ILandingPadAttachable(父类另带 IInventory / IDisableableMachine / IConnector / IWrenchable) |
core/tile/TileEntityCargoLoader.java:21-22、core/energy/tile/TileBaseElectricBlock.java:23-24 |
| 所属 modid | GalacticraftCore |
core/GalacticraftCore.java:160-161、core/Constants.java:7 |
| 槽位数 | 15 | 见下节 |
槽位与字段
core/tile/TileEntityCargoLoader.java:24:
private ItemStack[] containingItems = new ItemStack[15];
getSizeInventory() 本类未覆写,继承
core/energy/tile/TileBaseElectricBlockWithInventory.java:46-48
→ return this.getContainingItems().length; → 恒为 15(getContainingItems() 见 :118-121)。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池槽(getBatteryInSlot() 直接返回 getStackInSlot(0),见 core/energy/tile/TileBaseElectricBlockWithInventory.java:118-121) |
core/tile/TileEntityCargoLoader.java:142-147 |
| 1–14 | 货物缓存(addCargo / removeCargo 循环都从 1 起) |
core/tile/TileEntityCargoLoader.java:174、:207、:224 |
| 可接受性判定 | 源码 |
|---|---|
槽 0 只收 GC 电力物品(ItemElectricBase.isElectricItem) |
core/tile/TileEntityCargoLoader.java:142-147、:159-163 |
槽 1–14 任何物品都收(return true) |
core/tile/TileEntityCargoLoader.java:147、:162-163 |
canExtractItem 恒为 false——机器不许被漏斗抽走任何东西 |
core/tile/TileEntityCargoLoader.java:153-156 |
侧面可达槽:除 getBlockMetadata() + 2 面外全部 15 格,背面全禁 |
core/tile/TileEntityCargoLoader.java:135-139 |
⚠ getAccessibleSlotsFromSide 排除的是「+2」面、卸载机排除的是「−2」面——
两者共用同一套 metadata 编码,必须对照 Cargo Unloader 一起看。
tick / 能量 / 网络
能量
| 项目 | 值 | 来源 |
|---|---|---|
| 缓冲容量 | 16000 gJ(EnergyStorageTile.STANDARD_CAPACITY) |
core/energy/tile/EnergyStorageTile.java:18、:21 |
| 构造时最大输出 | 45 gJ/t(this.storage.setMaxExtract(45)) |
core/tile/TileEntityCargoLoader.java:38-40 |
| 最大输入 | 25 gJ/t——new EnergyStorage(16000, 10) 的两参构造展开为 maxReceive = 2.5F * 10 |
core/energy/tile/EnergyStorageTile.java:21、core/energy/tile/EnergyStorage.java:19-21 |
| 耗电开关 | shouldUseEnergy() = !getDisabled(0)(扳手可停机) |
core/tile/TileEntityCargoLoader.java:166-169 |
⚠ 单位是 gJ(GigaJoule),不是 RF/t、不是 EU/t——与 BuildCraft / IC2 不是同一套。
tick 周期(本篇核心)
| 行为 | 频率 | 源码 |
|---|---|---|
扫描周围找载具(checkForCargoEntity) |
每 100 tick | core/tile/TileEntityCargoLoader.java:47-49 |
| 真正转移 1 个物品到载具 | 每 15 tick | core/tile/TileEntityCargoLoader.java:64-68 |
无货时置 outOfItems |
每 tick | core/tile/TileEntityCargoLoader.java:69-71 |
⚠ 每 15 tick 转移的是 1 个物品(removeCargo(true) 内部 stackSize = 1,:228-229),
不是整组;转移还要 !disabled 且 hasEnoughEnergyToRun(:65-66)。
载具查找范围是六个面(ForgeDirection.values() 排除 UNKNOWN,:81-99),
支持 TileEntityMulti 主块(:85-92)与单块 ICargoEntity(:93-96)。
方块侧的即时重查入口在 core/blocks/BlockCargoLoader.java:72-75。
GUI / Container
| GUI 类 | Container 类 | 分派处(core/client/gui/GuiHandler.java) |
|---|---|---|
core.client.gui.container.GuiCargoLoader |
core.inventory.ContainerCargoLoader |
Container :126、Gui :214 |
网络
走 GC 的 @NetworkedField 字段同步:targetFull、targetNoInventory、noTarget
(core/tile/TileEntityCargoLoader.java:27-34),外加父类的 disabled / disableCooldown /
hasEnoughEnergyToRun(core/energy/tile/TileBaseElectricBlock.java:28-35)。
无独立的封包 ID。