TileEntityCargoUnloader(货运卸载机)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Cargo Unloader |
GalacticraftCore.java:724 |
| 注册类 | micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader |
同上 |
| 关联方块 | 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/TileEntityCargoUnloader.java:21 |
| 实现接口 | ISidedInventory / ILandingPadAttachable(父类另带 IInventory / IDisableableMachine / IConnector / IWrenchable) |
core/tile/TileEntityCargoUnloader.java:21-22、core/energy/tile/TileBaseElectricBlock.java:23-24 |
| 所属 modid | GalacticraftCore |
core/GalacticraftCore.java:160-161、core/Constants.java:7 |
| 槽位数 | 15 | 见下节 |
⚠ 装载机与卸载机是同一个方块 cargo 的不同 metadata(0–3 装载、4–7 卸载),
不是两个方块类。
槽位与字段
core/tile/TileEntityCargoUnloader.java:24:
private ItemStack[] containingItems = new ItemStack[15];
getSizeInventory() 本类未覆写,继承
core/energy/tile/TileBaseElectricBlockWithInventory.java:46-48 → 恒为 15
(getContainingItems() 见 :117-120)。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池槽 | core/energy/tile/TileBaseElectricBlockWithInventory.java:118-121 |
| 1–14 | 从载具卸下的货物缓存(addCargo / removeCargo 循环从 1 起) |
core/tile/TileEntityCargoUnloader.java:173、:206、:223 |
⚠ 它自己实现了完整的 addCargo / removeCargo(:170-220、:222-243),
与 Cargo Loader 的同名方法逐行相同但作用相反——
加载机是「缓存 → 载具」,卸载机是「载具 → 缓存」。源码里没有共享基类,是复制粘贴。
| 可接受性判定 | 源码 |
|---|---|
canInsertItem 恒为 false——不许任何物品被塞进来(包括电池) |
core/tile/TileEntityCargoUnloader.java:140-143 |
canExtractItem:槽 0 仅当 ItemElectricBase.isElectricItemEmpty(抽走空电池) |
core/tile/TileEntityCargoUnloader.java:145-155 |
侧面可达槽:除 getBlockMetadata() - 2 面外只有 1–14(电池槽对外封闭) |
core/tile/TileEntityCargoUnloader.java:134-138 |
⚠ 可达槽列表与加载机不同:加载机返回全部 15 格(tile-entity-cargo-loader.md),
卸载机返回 1–14 且排除的是 −2 面而非 +2 面。
tick / 能量 / 网络
能量
| 项目 | 值 | 来源 |
|---|---|---|
| 缓冲容量 | 16000 gJ | core/energy/tile/EnergyStorageTile.java:18、:21 |
| 构造时最大输出 | 45 gJ/t | core/tile/TileEntityCargoUnloader.java:37-39 |
| 最大输入 | 25 gJ/t(两参构造 maxReceive = 2.5F * 10) |
core/energy/tile/EnergyStorageTile.java:21、core/energy/tile/EnergyStorage.java:19-21 |
| 耗电开关 | shouldUseEnergy() = !getDisabled(0) |
core/tile/TileEntityCargoUnloader.java:165-168 |
⚠ 单位是 gJ,不是 RF/t、不是 EU/t。
tick 周期(本篇核心)
| 行为 | 频率 | 源码 |
|---|---|---|
| 扫描周围找载具 | 每 100 tick | core/tile/TileEntityCargoUnloader.java:46-48 |
| 真正从载具取出 1 个物品 | 每 15 tick | core/tile/TileEntityCargoUnloader.java:61-65 |
| 目标状态置位 | 每 tick | core/tile/TileEntityCargoUnloader.java:54-70 |
⚠ 每 15 tick 只卸 1 个物品(removeCargo 内部固定 stackSize = 1,:228-229),
且需 !disabled 且 hasEnoughEnergyToRun(:62-63)。
扫描逻辑与加载机相同(:77-103),方块侧即时重查入口
core/blocks/BlockCargoLoader.java:72-75。
GUI / Container
| GUI 类 | Container 类 | 分派处(core/client/gui/GuiHandler.java) |
|---|---|---|
core.client.gui.container.GuiCargoUnloader |
⚠ core.inventory.ContainerCargoLoader(复用装载机的容器类) |
Container :128、Gui :216 |
⚠ 卸载机没有自己的 Container 类——GuiHandler.java:128 给 TileEntityCargoUnloader
返回的是 ContainerCargoLoader。写条目时不要编造 ContainerCargoUnloader。
网络
@NetworkedField:targetEmpty、targetNoInventory、noTarget
(core/tile/TileEntityCargoUnloader.java:26-33)+
父类 disabled / disableCooldown / hasEnoughEnergyToRun(core/energy/tile/TileBaseElectricBlock.java:28-35)。
无独立封包 ID。