TileEntityElectricIngotCompressor(电动压缩机)

事实基准:/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 Electric Ingot Compressor GalacticraftCore.java:734
所属 modid GalacticraftCore core/Constants.java:7,@Mod 见 GalacticraftCore.java:160-161
关联方块 micdoodle8.mods.galacticraft.core.blocks.BlockMachine2 core/blocks/BlockMachine2.java:304-306(metadata ≥ ELECTRIC_COMPRESSOR_METADATA)
父类 TileBaseElectricBlock core/energy/tile/TileBaseElectricBlock.java:23
实现接口 IInventory / ISidedInventory core/tile/TileEntityElectricIngotCompressor.java:29
槽位数 12(getSizeInventory() 见 core/tile/TileEntityElectricIngotCompressor.java:230-232) 同上

⚠ 父类是 TileBaseElectricBlock,不是 TileBaseElectricBlockWithInventory—— 它自己实现 IInventory,没有 getContainingItems() 那套抽象。

⚠ 它和手动版 TileEntityIngotCompressor 是两个独立注册的类: GalacticraftCore.java:733(手动,配方 3×3)与 :734(电动,本类)。 两者各有各的 Container/Gui。

槽位与字段

core/tile/TileEntityElectricIngotCompressor.java:42-43:

private ItemStack[] containingItems = new ItemStack[3];
public PersistantInventoryCrafting compressingCraftMatrix = new PersistantInventoryCrafting();

getSizeInventory()(:230-232)返回 containingItems.length + compressingCraftMatrix.getSizeInventory() = 3 + 9 = 12。 合成矩阵固定 3×3 共 9 格(core/inventory/PersistantInventoryCrafting.java:25-29、 getSizeInventory() 见 :34-37)。

getStackInSlot / decrStackSize / setInventorySlotContents 等都以 par1 >= containingItems.length 分流到矩阵(:235-241、:243-270、:286-298)。

槽位 用途 源码
0 电池 :484 getBatteryInSlot() 固定返回 getStackInSlot(0)
1 产物 A(输出) :468-470 允许取出
2 产物 B(输出) :468-470 允许取出
3–11 3×3 配方矩阵(不分先后) :191、:217 循环上界取 compressingCraftMatrix.getSizeInventory()

产物内容由 updateInput()(:114-116)调 CompressorRecipes.findMatchingRecipe 计算,结果存在 producingStack(:39)里。压缩配方无序: getAccessibleSlotsFromSide(:409-460)会剔除矩阵中与已有物品重复的格。

处理速率 / 耗时(本篇核心常量)

core/tile/TileEntityElectricIngotCompressor.java:31:

public static final int PROCESS_TIME_REQUIRED_BASE = 200;
常量 值 含义 来源
PROCESS_TIME_REQUIRED_BASE 200 基础耗时常量 core/tile/TileEntityElectricIngotCompressor.java:31
实际 processTimeRequired PROCESS_TIME_REQUIRED_BASE * 2 / (1 + poweredByTierGC) 200 × 2 得 400,再除以 3 core/tile/TileEntityElectricIngotCompressor.java:61-62
1 级供电时实际耗时 133(400 / 3,整数除法截断) 由上式推得 core/tile/TileEntityElectricIngotCompressor.java:61-62
2 级供电时实际耗时 200(400 / 2) 由上式推得 core/tile/TileEntityElectricIngotCompressor.java:61-62
maxExtract 75(hardMode 90) 拉取功率 core/tile/TileEntityElectricIngotCompressor.java:47
tier 固定 2 构造器无条件 setTierGC(2) core/tile/TileEntityElectricIngotCompressor.java:48

⚠ PROCESS_TIME_REQUIRED_BASE = 200 不等于实际耗时。运行时在 :61-62 被 乘 2 再除以 1 + poweredByTierGC,且该赋值在每个 tick 的 updateEntity 里重算, 所以 GUI 上的 processTimeRequired 会随供电来源变。

⚠ 容量沿用 STANDARD_CAPACITY = 16000(core/energy/tile/EnergyStorageTile.java:18), 本类不调 setCapacity;maxReceive 保持默认 25 (core/energy/tile/EnergyStorageTile.java:21,两参构造 EnergyStorage.java:19-21 把第二参 maxTransfer = 10 展开为 maxReceive = 2.5F * 10 = 25、maxExtract = 10)。 单位是 gJ,不是 RF/t、不是 EU/t。

tick 逻辑

updateEntity(:51-85):

  1. hasEnoughEnergyToRun && canCompress() 成立时 ++processTicks(:58-59)
  2. 每 tick 重算 processTimeRequired(:61-62)
  3. 达标则播放 random.anvil_land(音量 0.2F、音调 0.5F,:65-66)、清零计数、执行 compressItems()(:67-68)
  4. 条件不成立时直接 processTicks = 0(:71-73)——没有熔炉那套「冷却」逻辑

GUI / Container

GUI 类 Container 类 分派处(core/client/gui/GuiHandler.java)
core.client.gui.container.GuiElectricIngotCompressor core.inventory.ContainerElectricIngotCompressor Container :141-142、Gui :231-232

网络封包

processTimeRequired、processTicks 为 @NetworkedField(:33-37)。 本类没有 playersUsing 字段(与 TileEntityElectricFurnace、 TileEntityEnergyStorageModule 不同,源码中检索不到该字段)。 封包范围与冷却继承 TileBaseUniversalElectrical:12.0 / 3 (core/energy/tile/TileBaseUniversalElectrical.java:45-51)。无独立封包 ID。

相关条目