电弧高炉 (Electric Blast Furnace, EBF)
基本信息
| 属性 | 值 |
|---|---|
| 注册名(控制器方块) | gregtech:gt.blockmachines(meta = EBF_CONTROLLER.ID) |
| 核心类 | gregtech.common.tileentities.machines.multi.MTEElectricBlastFurnace |
| 父类链 | MTEElectricBlastFurnace → MTEAbstractMultiFurnace → MTEExtendedPowerMultiBlockBase → MTEEnhancedMultiBlockBase → MTEMultiBlockBase |
| 电压范围 | MV – MAX(每超过 MV 一档电压 +100K 加热能力) |
| 温度范围 | 1500K – 6000K+(由加热线圈等级决定) |
| 配方图 | RecipeMaps.blastFurnaceRecipes |
结构要求
- 结构尺寸(宽×高×深):3 × 4 × 1(单一
main结构块,无第二块可拼接) - 最小 = 最大 = 3 × 4 × 1(
MTEElectricBlastFurnace无变量结构通道,不存在更大的 EBF) - 核心组件:EBF 控制器、加热线圈层
- 结构材料:机器外壳(
Heat Proof Machine Casing)、加热线圈方块 - 加热线圈等级(从低到高):
Heat Proof Coil→Cupronickel Coil→Kanthal Coil→Nichrome Coil→Superconductor Coil
加热能力 (Heat Capacity)
EBF 加热能力由两部分组成:
mHeatingCapacity = HeatingCoilLevel.getHeat() + 100 × (GTUtility.getTier(getMaxInputVoltage()) - 2)
即线圈本身的基础热量 + 超过 MV 一档电压带来的 100K 增益。
多方块控制按钮(基础 GUI 工具栏)
EBF GUI 底部第二行排列的多方块控制按钮(在 MTEMultiBlockBase.addUIWidgets 中固定布局)。EBF 启用了以下开关:
| 按钮 | 翻译键 | EBF 支持 | 触发方式 |
|---|---|---|---|
| 销毁模式 (Voiding Mode) | GT5U.gui.button.voiding_mode |
✅ supportsVoidProtection=true(默认) |
左/右键点击循环:None → Items → Fluids → All |
| 输入隔离 (Input Separation) | GT5U.gui.button.input_separation |
✅ supportsInputSeparation=true |
点击 / 螺丝刀右键 |
| 机器模式切换 (Machine Mode) | GT5U.gui.button.machine_mode |
❌ supportsMachineModeSwitch=false |
— |
| 批处理模式 (Batch Mode) | GT5U.gui.button.batch_mode |
✅ supportsBatchMode=true |
点击 / 潜行 + 剪线钳右键 |
| 锁定配方 (Lock Recipe) | GT5U.gui.button.lock_recipe |
✅ supportsSingleRecipeLocking=true(默认) |
点击 / 刷子右键 |
| 电源控制面板 (Power Control Panel) | GT5U.gui.button.power_panel |
✅ supportsPowerPanel=true(默认) |
点击 |
提示:EBF 自身没有
machineMode(机器模式图标为空),但继承的销毁/隔离/批处理/锁定四个开关都启用。
模式详解
1. 销毁模式 (Voiding Mode)
控制 EBF 在输出仓满时如何处理副产物。
枚举定义见 gregtech.api.enums.VoidingMode,有四种:
| 模式 | 显示 | 物品保护 | 流体保护 |
|---|---|---|---|
VOID_NONE |
§7Void Nothing | ✅ | ✅ |
VOID_ITEM |
§7Void Excess §6Items | ❌ | ✅ |
VOID_FLUID |
§7Void Excess §9Fluids | ✅ | ❌ |
VOID_ALL |
§7Void Excess §6Items §7and §9Fluids | ❌ | ❌ |
机制:
- 左键循环到下一档,右键循环到上一档。
- 对应字段
voidingMode持久化到 NBT 键voidingMode(旧存档自动从voidExcessboolean 迁移)。 - 在
MTEMultiBlockBase.configureRecipeProcessingLogic中通过protectsExcessItem()/protectsExcessFluid()注入到ProcessingLogic.setVoidProtection(...)。 - 当保护开启时(
VOID_NONE、VOID_ITEM仅保护流体、VOID_FLUID仅保护物品),ParallelHelper会用VoidProtectionHelper反复削减并行数直到输出能塞进仓内。如果并行数被削到 0,整批配方不运行。
玩家体验: 烧钢等产生副产物的配方,如果你不想手动腾输出仓,可以切到 VOID_ITEM 或 VOID_ALL 自动丢弃多余副产物。
2. 输入隔离 (Input Separation)
把多个输入总线视为独立、彼此不共享物品——即每个输入总线只能看到自己那一槽的物品,不同总线的相同物品不互通。
机制:
- 字段
inputSeparation(默认false)。 - EBF 自定义
onScrewdriverRightClick:用螺丝刀右键翻转,并在聊天栏提示Input buses are separated / aren't separated。 - 在
ProcessingLogic配方查找时,按ItemId聚合输入的方式不变;但在MTEMultiBlockBase.getStoredInputsForRecipe()一类的输入聚合路径上,开启时各总线独立汇总,从而同一配方可能因为某总线缺一项而匹配失败。 - 持久化键
inputSeparation(旧键isBussesSeparate自动迁移)。
玩家体验: 当你用一条线专门放电路/集成元件、其他线只放原料时,开启此模式可以避免总线之间"互偷"物品导致配方误识别。
3. 批处理模式 (Batch Mode)
允许单次配方运行中堆叠多份产物输出,从而拉低单位 EU 消耗。
机制(ParallelHelper):
- 字段
batchMode,默认从Gregtech.general.batchModeInitialValue读取(getDefaultBatchMode())。 - 开启后
MTEMultiBlockBase调logic.setBatchSize(getMaxBatchSize())(默认 128),ParallelHelper把最大并行乘以batchModifier:if (batchMode) maxParallel = maxParallel * batchModifier;
- 真正限制并行数的是
MAX_BATCH_MODE_TICK_TIME = 128(配方 tick 时长):若单次 duration 低于 128 tick 且当前并行还能扩展,则继续叠加并行直到duration × parallels >= 128或达到maxParallel上限。 - 触发方式:GUI 点击按钮,或潜行 + 剪线钳右键,聊天栏提示
Batch Mode: Enabled/Disabled。
玩家体验: 对长 tick 配方(如钢 1s = 20t)效果不明显,但对短 tick 配方可显著压低单位 EU 成本。注意对 EBF 这种输出物很多的机器,批处理会同时放大副产物输出,需要销毁模式配合。
4. 锁定配方 (Lock Recipe)
锁定 EBF 只跑当前第一次成功匹配的配方。
机制:
- 字段
mLockedToSingleRecipe(默认false)。 - 持久化到 NBT 键
mLockedToSingleRecipe,并把锁定的SingleRecipeCheck(itemCost+fluidCost映射)一并写入。 - 触发方式:GUI 点击按钮,或刷子右键,聊天栏提示
Single recipe locking enabled. Will lock to next recipe./disabled.。 - 启用后,
MTEMultiBlockBase.configureRecipeProcessingLogic()调用logic.setRecipeLocking(this, isRecipeLockingEnabled());当isRecipeLocked=true且getSingleRecipeCheck() != null时,ProcessingLogic跳过整个 RecipeMap 线性扫描,直接用SingleRecipeCheck.checkRecipeInputs(...)计算并行:- 加速收益:从
O(N·C·R + N·M)降到O(N + M)。SingleRecipeCheck的 docstring 明确指出"Used by machines that are locked to a single recipe, for faster recipe checking."
- 加速收益:从
- 切换机器模式(
setMachineMode)或解锁时会自动清空mSingleRecipeCheck。
玩家体验: 大型工厂里把 EBF 锁死成"只炼钢"或"只炼某种合金",CPU 占用显著下降;当某天配方被 NEI/输入变化而锁定的配方失效时,机器会停机并提示。
电源控制面板 (Power Control Panel)
打开方式:点击主 GUI 工具栏右上的"电源面板"按钮。面板窗口 120 × 130,含三个控件:
Power Control Panel
━━━━━━━━━━━━━━━━━━
Maximum Parallel
[ 128 ] [✓] ← 数值框 + "Always use maximum" 复选框
Powerfail Events [ ] ← "Make Powerfail Events" 复选框
最大并行值 (Max Parallel)
-
字段
powerPanelMaxParallel(整型,默认 1)。 -
输入范围(实时由校验器强制约束):
始终使用最大值 允许输入范围 ✅ 勾选 powerPanelMaxParallel = maxParallel(数值被强制等于当前上限,无法编辑)❌ 未勾选 1 ≤ powerPanelMaxParallel ≤ maxParallel(可在 1 到上限之间调)UI 提示分别为
Locked: %s(GT5U.gui.text.lockedvalue)和Range: %s-%s(GT5U.gui.text.rangedvalue)。 -
实际生效的并行数 由
getTrueParallel()计算:public final int getTrueParallel() { return Math.max(1, alwaysMaxParallel ? getMaxParallelRecipes() : Math.min(getMaxParallelRecipes(), powerPanelMaxParallel)); }
即:当
alwaysMaxParallel=true,getTrueParallel() == getMaxParallelRecipes(),忽略powerPanelMaxParallel;关闭后才用Math.min(max, powerPanelMaxParallel)限制。 -
getMaxParallelRecipes()在MTEMultiBlockBase默认返回 1;具体机器(EBF 自身没有重写)需要子类覆写以提供真实上限。打开面板时server端会把当前getMaxParallelRecipes()同步到maxParallel字段。
玩家体验: 当你的 EBF 偶尔想手动压低并行(比如避免一次性抽光输入总线上的所有原料、或者降低瞬时 EU 拉取),关闭"始终使用最大值",把 powerPanelMaxParallel 设成 1~max 之间的某个值,机器就会按这个上限并行运行。
始终使用最大值 (Always Use Maximum)
- 字段
alwaysMaxParallel(布尔,默认true)。首次加载无 NBT 时也默认true(!aNBT.hasKey(...) || aNBT.getBoolean(...))。 - 控制
getTrueParallel()是取maxParallel还是Math.min(maxParallel, powerPanelMaxParallel)。 - 同步数值框:切换此复选框后,会调用
textField.notifyTooltipChange()刷新提示文案;同时setValidator在编辑器阶段会把输入强制钳到[maxParallel, maxParallel](开启时)或[1, maxParallel](关闭时)。
玩家体验: 默认开,即"机器能力允许多少并行就跑多少";关掉后才允许自定义并行上限。
电力故障事件 (Powerfail Events)
-
字段
makePowerfailEvents(布尔,默认true,首次加载无 NBT 时默认true)。 -
触发位置:
MTEMultiBlockBase.stopMachine(ShutDownReason reason):if (makePowerfailEvents && reason == ShutDownReasonRegistry.POWER_LOSS) { GTMod.proxy.powerfailTracker.createPowerfailEvent(igte); }
-
作用:仅在停机原因为 电力中断 (
POWER_LOSS) 时,把此次故障记录到gregtech.common.data.GTPowerfailTracker,并通过GTPacketOnPowerfail通知所有在线的机器拥有者(同一队伍)。事件会显示在Navigator模组的 Powerfail 图层,并可通过/gt powerfail list命令列出。 -
上层还有一层总开关
Gregtech.machines.enablePowerfailNotifications(GTPowerfailTracker.createPowerfailEvent入口会先检查它),关闭后即使单机器开了也无效。
玩家体验: 默认开。服务器停电或电网崩溃时,电力故障事件会记录所有因 POWER_LOSS 停机的多方块机器位置、次数、最后一次发生时间,便于断电恢复后快速排查哪些机器需要重启。如果不想被打扰,可以在此面板里把它关掉。
配方温度机制
| 条件 | 效果 |
|---|---|
recipe.mSpecialValue <= mHeatingCapacity |
配方可运行 |
| 每超过 MV 一档电压 | +100K 加热 |
| 每超过配方温度 900K | EU 消耗 -5% |
| 每超过配方温度 1800K | 一次"完美超频"(时间 ×0.25 而不是 ×0.5,效率 100%) |
公式 OverclockCalculator.setRecipeHeat(recipe.mSpecialValue).setMachineHeat(mHeatingCapacity).setHeatOC(true).setHeatDiscount(true),见 MTEElectricBlastFurnace.createProcessingLogic。
维护与污染
- 维护 hatch 必需(6 项修复全部到位才能 100% 效率)。
- 污染速率
GTMod.proxy.mPollutionEBFPerSecond(默认 40/s)。 - 顶部中央需要一个 muffler hatch。
参与方块
- 机器外壳(
Heat Proof Machine Casing) - 加热线圈(5 个等级)
- 输入总线 / 输入仓
- 输出总线 / 输出仓
- Energy Hatch
- Maintenance Hatch
- Muffler Hatch
相关条目
旋转与拆除
| 项 | 结论 | 证据 |
|---|---|---|
| 扳手旋转 | 无法核实(本仓不覆写 isRotationChangeAllowed,继承外部依赖 gtnhlib 的默认实现) |
MTEElectricBlastFurnace.java 中 isRotationChangeAllowed 命中 0 |
| 螺丝刀右键 | 不用于旋转,而是切换「输入/输出仓分离」 | MTEElectricBlastFurnace.java onScrewdriverRightClick → inputSeparation = !inputSeparation |
| 逐块拆除 | 无法核实:gregtech/api/metatileentity/ 下未找到任何 dismantle / deconstruct 方法(grep -rin "dismantle|deconstruct" 零命中) |
— |
审计订正(2026-10-01)
| 项 | 原文 | 订正为 | 证据 |
|---|---|---|---|
| 注册名 | gregtech:gt.multitileentity.electric_blast_furnace |
gregtech:gt.blockmachines(meta = MTE ID) |
全仓 multitileentity 零命中;MetaTileEntity.getStackForm 返回 new ItemStack(GregTechAPI.sBlockMachines, n, getMetaTileID())(gregtech/api/metatileentity/MetaTileEntity.java:189) |
| 结构尺寸 | 3 × 4 × 3 | 3 × 4 × 1 | MTEElectricBlastFurnace.java:77-81 shape 为 4 行×3 列,transpose() 后 3 宽×4 高,深度 1 |
| 「最大规模 3×4×3」 | 同上 | 最小 = 最大 = 3×4×1 | 无变量结构通道,EBF 不可加高 |
注册名 gt.multitileentity.* 属于幻觉模式 #1(取自 GT5 新版命名习惯而非本仓字符串实参)——本仓是 1.7.10 GT5U 体系,多方块控制器一律是机器方块的某个 meta。