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。

相关条目