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。

相关条目