TileEntityCircuitFabricator(电路制造器)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Circuit Fabricator |
GalacticraftCore.java:735 |
| 注册类 | micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator |
同上 |
| 关联方块 | GCBlocks.machineBase2 = new BlockMachine2("machine2") |
core/blocks/GCBlocks.java:122 |
| 方块→TE 分派 | CIRCUIT_FABRICATOR_METADATA(4) ≤ metadata < OXYGEN_STORAGE_MODULE_METADATA(8) |
core/blocks/BlockMachine2.java:297-302、:33-34 |
| 父类 | TileBaseElectricBlockWithInventory(→ TileBaseElectricBlock → TileBaseUniversalElectrical → EnergyStorageTile) |
core/tile/TileEntityCircuitFabricator.java:21 |
| 实现接口 | ISidedInventory(父类另带 IInventory / IDisableableMachine / IConnector / IWrenchable) |
core/tile/TileEntityCircuitFabricator.java:21 |
| 所属 modid | GalacticraftCore |
core/GalacticraftCore.java:160-161、core/Constants.java:7 |
| 槽位数 | 7 | 见下节 |
槽位与字段
core/tile/TileEntityCircuitFabricator.java:31:
private ItemStack[] containingItems = new ItemStack[7];
getSizeInventory() 本类未覆写,继承
core/energy/tile/TileBaseElectricBlockWithInventory.java:46-48 → 恒为 7
(getContainingItems() 见 :150-153)。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池槽(只收 GC 电力物品) | core/tile/TileEntityCircuitFabricator.java:166-169 |
| 1–5 | 配方原料位(5 格) | core/tile/TileEntityCircuitFabricator.java:175、:73-74 |
| 6 | 成品位(isItemValidForSlot 对 slotID > 5 直接 false,:171-173) |
core/tile/TileEntityCircuitFabricator.java:82-90、:189 |
| 侧面可达槽 | 条件 | 源码 |
|---|---|---|
底面 side == 0 |
只给 { 6 }(成品) |
core/tile/TileEntityCircuitFabricator.java:188-190 |
| 其余面 | 硅较少的那格暴露:{0,1,3,4,5} 或 {0,1,2,4,5} |
core/tile/TileEntityCircuitFabricator.java:192-195 |
⚠ canExtractItem 只允许槽 6(:203-206)、canInsertItem 限制 slotID < 6(:198-201)。
⚠ 槽 1–5 的合法性逐格查 CircuitFabricatorRecipes.slotValidItems(:175-183),
具体每格收什么在本类源码里查不到,要去配方类读,本条目不代写。
tick / 能量 / 网络
耗时(本篇核心常量)
core/tile/TileEntityCircuitFabricator.java:23:
public static final int PROCESS_TIME_REQUIRED = 300;
| 常量 | 值 | 含义 |
|---|---|---|
PROCESS_TIME_REQUIRED |
300 tick | 一次合成所需 tick(15 s) |
| 行为 | 条件 | 源码 |
|---|---|---|
| 计时推进 | hasEnoughEnergyToRun && canCompress() 才 ++processTicks |
core/tile/TileEntityCircuitFabricator.java:46-47 |
| 计时清零 | 任一条件不满足立刻归零(无进度保留) | core/tile/TileEntityCircuitFabricator.java:56-58 |
| 产出 | 达到 300 时播放 random.anvil_land 并 compressItems() |
core/tile/TileEntityCircuitFabricator.java:49-55 |
| 原料消耗 | 每次产出后 decrStackSize(i, 1),循环 i = 1..5 |
core/tile/TileEntityCircuitFabricator.java:131-133 |
能量
| 项目 | 值 | 来源 |
|---|---|---|
| 缓冲容量 | 16000 gJ | core/energy/tile/EnergyStorageTile.java:18、:21 |
| 最大输出 | hard 模式 40 gJ/t,否则 20 gJ/t | core/tile/TileEntityCircuitFabricator.java:33-35 |
| 最大输入 | 25 gJ/t(两参构造 maxReceive = 2.5F * 10,本类未改) |
core/energy/tile/EnergyStorageTile.java:21、core/energy/tile/EnergyStorage.java:19-21 |
| 耗电判定 | shouldUseEnergy() = processTicks > 0(只在合成中耗电) |
core/tile/TileEntityCircuitFabricator.java:208-211 |
⚠ 单位是 gJ,不是 RF/t、不是 EU/t。
⚠ 20 这个值受配置项 ConfigManagerCore.hardMode 影响,
写「固定 20 gJ/t」是错的,必须写成「普通 20 / 困难 40」。
配方与产出
| 项目 | 值 | 源码 |
|---|---|---|
| 配方查询 | CircuitFabricatorRecipes.getOutputForInput(Arrays.copyOfRange(containingItems, 1, 6)) |
core/tile/TileEntityCircuitFabricator.java:73-74 |
| 每 tick 重查 | updateInput() 每 tick 都调(在 isRemote 判断之外) |
core/tile/TileEntityCircuitFabricator.java:41 |
| 快速模式 | quickMode 且产物是 GCItems.basicItem 时,基础晶片 ×5、高级晶片 ×2 |
core/tile/TileEntityCircuitFabricator.java:96-102 |
| 溢出处理 | 成品堆超过 64 时把多余的掉到地上(delayBeforeCanPickup = 10) |
core/tile/TileEntityCircuitFabricator.java:107-124 |
GUI / Container
| GUI 类 | Container 类 | 分派处(core/client/gui/GuiHandler.java) |
|---|---|---|
core.client.gui.container.GuiCircuitFabricator |
core.inventory.ContainerCircuitFabricator |
Container :144、Gui :234 |
网络
@NetworkedField:processTicks(core/tile/TileEntityCircuitFabricator.java:25-26)+
父类 disabled / disableCooldown / hasEnoughEnergyToRun(core/energy/tile/TileBaseElectricBlock.java:28-35)。
⚠ NBT 键名是 smeltingTicks(沿用熔炉的键,:139、:146),不是 processTicks。
无独立封包 ID。