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。
相关条目