Power network
A power network carries energy from the blocks that make it to the machines that use it, along cables, pipes, ducts, or poles the player places.
A power network carries energy from generators to the machines that use it. In the games compared here it ranges from BuildCraft’s conductive pipes, which pass energy on one pipe at a time and lose some at each1, to Factorio’s poles, which join every machine in reach into one network2,3.
- Pipe to pipeBuildCraft (2011). Engines push energy into the machine or conductive pipe they face, and each pipe passes it on by what its neighbours ask, losing 1% a pipe.4,1
- Tiered packetsIndustrialCraft (2011). IC2's energy moves as EU packets; each cable tier takes packets up to one size and melts under a larger one, and every cable loses energy with distance.5,6,7,8
- Pooled gridThermal Expansion (2012). In Thermal Dynamics, connected fluxducts of one tier keep their RF in one store, and each duct beside a machine hands out an equal share every tick.9
- Coverage networkFactorio (2016). A pole's area connects the buildings it covers, and nearby poles link into one network; a shortfall slows every machine by the same proportion.2,3
#How energy moves
| Game | Carrier | Limit | Over the limit |
|---|---|---|---|
| BuildCraft 2.2.4 | engines push into the machine or conductive pipe they face; each pipe passes energy on by what each neighbour asks for, less 1% a pipe4,1 | what one pipe takes from one side in a tick | the pipe explodes1 |
| IndustrialCraft² | cables carry EU packets, losing energy per packet with distance5,8 | packet size, from 57 EU on tin cable to 20487 EU on HV cable; the number of packets is unlimited7 | the cable melts; a machine fed above its input explodes7,10 |
| Thermal Expansion (Thermal Dynamics r2.3.9) | connected fluxducts of one tier keep their RF in one store, and each duct beside a machine hands out an equal share each tick9 | a transfer rate per tier, from 10009 RF a tick up9 | ducts of different tiers don’t connect9 |
| Factorio 2.1.23 | poles power the machines in a square around them and link to poles within wire reach2 | each pole’s area and reach2 | none stated |
The two mods punish a mismatch by destroying something. An IndustrialCraft² copper cable carries any number of 327 EU packets a tick but melts under a single larger one7, and a Macerator takes at most 3210 EU a packet before it explodes10. Storage blocks emit packets of their own output size, and transformers step packets up or down a voltage6. Because the loss comes off each packet, fewer and larger packets lose less8. In BuildCraft the overload is a rate: a conductive pipe that takes too much from one side in one tick explodes1, and the engines feeding it can explode from their own overflow or heat11 (see overheat). Thermal Dynamics keeps tiers apart instead: a duct of another tier neither joins nor merges with the grid9.
IndustrialCraft²’s Generator turns burned fuel straight into energy; Factorio splits the job between a boiler, which makes steam, and two steam engines, which turn one boiler’s steam into electricity12,13,14.
#Short of power
Factorio shares a shortfall across the whole network: every machine on it slows by the same proportion3. BuildCraft divides at each pipe, in proportion to what each neighbour asks for1. A Thermal Expansion machine runs from its own RF store, and how fast it spends follows how full that store is, so on a weak supply it draws less as the store drops15. If the store runs dry mid-recipe, the machine stops and the RF spent on that recipe is lost16.
#Quirks
- IndustrialCraft 1’s wiki warned that a cable split three ways at once melts; a two-way fork halves the energy17.
- In IndustrialCraft 1, “EU/s” meant EU per frame: Alblaka thought “EU/f” would look odd18.
- Factorio’s generators meet demand in order: solar panels first, then steam engines and turbines; accumulators discharge only as a last resort and charge only from surplus3.
#History
Of the three mods, IndustrialCraft 1 has the earliest known power network: the IC wiki described its cables by April 201119. Alblaka announced the IndustrialCraft² rewrite in July 2011 with “a new electric current distribution algorithm” among its plans20, and its first public beta replaced IC1’s whole-block cables, which ticked once a second, with smaller tiered cables21,22.
BuildCraft added its power system, Minecraft Joules (MJ), in 2.0.0 at the end of July 2011, and conductive pipes in 2.2.0, by asie’s account23. Thermal Expansion 1.0, in June 2012, made no power of its own: its machines ran on power from BuildCraft or Forestry, in MJ24,25. Its third version, in December 2013, replaced MJ with its own unit, Redstone Flux (RF)26. Team CoFH called RF the most widely adopted energy system in modded Minecraft, and their 2016 documentation lists BuildCraft’s engines among the devices that make it27. Minecraft Forge’s own energy interface states that it is derived from RF28. By asie’s account, IndustrialCraft² kept its own EU when most mods had moved to RF29.
Factorio’s founder, Michal Kovařík, named modded Minecraft, “mainly buildcraft/industrialcraft”, as a huge inspiration30. Factorio’s earliest date read here is its first demo, of 31 December 2012, and when its poles arrived isn’t read19. No source read here ties Factorio’s poles to either mod’s wiring, so the two are compared here, not descended.
Related: Thermal Dynamics builds its fluid grids the way it builds fluxduct grids, merging connected ducts into one31,9, and Factorio’s day sets its solar output32.
Games
| Game | Year | How | Note |
|---|---|---|---|
| BuildCraft | 2011 | Pipe to pipe | engines push energy into the machine or conductive pipe they face, and each pipe passes it on by what its neighbours ask, losing 1% a pipe |
| IndustrialCraft | 2011 | Tiered packets | IC2's energy moves as EU packets; each cable tier takes packets up to one size and melts under a larger one, and every cable loses energy with distance |
| Thermal Expansion | 2012 | Pooled grid | in Thermal Dynamics, connected fluxducts of one tier keep their RF in one store, and each duct beside a machine hands out an equal share every tick |
| Factorio | 2016 | Coverage network | a pole's area connects the buildings it covers, and nearby poles link into one network; a shortfall slows every machine by the same proportion |
Every claim about this mechanic, by game (3)
References
- ^ abcdefIn 2.2.4 a conductive pipe passes energy on in proportion to what each neighbor asks for, and loses 1% at every pipe it enters (0.1% in a golden one). A pipe that takes 1,000 or more from one side in a tick explodes.CodeBuildCraft 2.2.4
How we know
36 public double powerResitance = 0.01;buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportPower.java line 36 at 0a20887 · upstream ↗ 96 double totalWatt = internalPower [i]; ⋮ 100 double watts = (totalWatt / div * powerQuery [j]);
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportPower.java lines 83–127 at 0a20887 · upstream ↗ 206 internalNextPower[from.ordinal()] += val * (1 - powerResitance); ⋮ 208 if (internalNextPower [from.ordinal()] >= 1000) { 209 worldObj.createExplosion(null, xCoord, yCoord, zCoord, 2);
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportPower.java lines 200–212 at 0a20887 · upstream ↗ 20 ((PipeTransportPower) transport).powerResitance = 0.001;buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipePowerGold.java line 20 at 0a20887 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcdElectric poles power machines in a square around them and link to other poles within their wire reach: small pole 5×5 area and 7.5 tiles, medium pole 7×7 and 9, big pole 4×4 and 32, substation 18×18 and 18.Codefactorio-data 2.1.23 · Factorio Prototype API 2.1.23
How we know
1655 maximum_wire_distance = 7.5, 1656 supply_area_distance = 2.5,
base/prototypes/entity/entities.lua lines 1655–1656 at 39dbd0f · upstream ↗ 4705 maximum_wire_distance = 9, 4706 supply_area_distance = 3.5,
base/prototypes/entity/entities.lua lines 4705–4706 at 39dbd0f · upstream ↗ 4570 maximum_wire_distance = 32, 4571 supply_area_distance = 2,
base/prototypes/entity/entities.lua lines 4570–4571 at 39dbd0f · upstream ↗ 7646 maximum_wire_distance = 18, 7647 supply_area_distance = 9,
base/prototypes/entity/entities.lua lines 7646–7647 at 39dbd0f · upstream ↗ If this is 3.5, the pole will have a 7x7 supply area.
ElectricPolePrototype.supply_area_distance · archived copy ↗ Corresponds to "wire reach" in the item tooltip.
ElectricPolePrototype.maximum_wire_distance · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcdThe Factorio wiki's Electric system page (captured October 2026) says a building is on an electric network if one of its tiles lies in a pole's coverage area, and that poles placed close enough connect by themselves. When generation falls short, the electricity is spread evenly over the network's machines by their demand, and all of them slow by the same proportion. Generators meet demand in order: solar panels first, then steam engines and turbines, and accumulators last, which charge only from power left over once all demand is met.WikiOfficial Factorio Wiki, Electric systemrevised
How we know
If two poles are placed close enough, the poles connect automatically. A building is connected if one tile of the building is in a covered area.
"Connection" · archived copy ↗ If an electric network does not have enough power generation to supply all the machines in it, the electricity will be evenly spread across all machines in the network (based on each machine's demand), and all machines will slow down proportionally to the power available.
"Energy consumption" · archived copy ↗ Solar panels – Top priority; they always work at maximum performance available, unless they can cover all demand of the network, in which case they match demand. … Steam engines, steam turbines, and fusion generators – They match whatever demand solar panels cannot satisfy. … Accumulator – Last resort. They are only discharged when demand cannot be met by other means. They are also only charged when all demand is met, and there is yet more power available.
"Network priorities" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abBuildCraft 2.2.4 has three engines, and each pushes energy out only while it gets a redstone signal. The redstone engine makes 1 energy a second (every 20 ticks), only while powered, and stores 1,000. The steam engine burns solid fuel for 1 energy a tick (a piece of coal lasts 1,600 ticks, a lava bucket 20,000, wood 300) and stores 10,000; it finishes a piece it has started without the signal, but needs the signal to start the next. The combustion engine burns liquids, only while powered, and stores 100,000. An engine pushes its energy into the machine or pipe it faces in strokes, at most 1, 100 or 500 a stroke for the three, and its piston moves faster as its store fills.CodeBuildCraft 2.2.4revised
How we know
109 CoreProxy.addName(new ItemStack (engineBlock, 1, 0), "Redstone Engine"); 110 CoreProxy.addName(new ItemStack (engineBlock, 1, 1), "Steam Engine"); 111 CoreProxy.addName(new ItemStack (engineBlock, 1, 2), "Combustion Engine");
buildcraft/common/net/minecraft/src/BuildCraftEnergy.java lines 109–111 at 0a20887 · upstream ↗ 16 maxEnergy = 1000; ⋮ 49 if (tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, tile.yCoord, tile.zCoord)) { 50 if ((tile.worldObj.getWorldTime() % 20) == 0) { 51 energy++;
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineWood.java lines 16–54 at 0a20887 · upstream ↗ 28 maxEnergy = 10000; 29 maxEnergyExtracted = 100; ⋮ 64 if(burnTime > 0) { 65 burnTime--; 66 addEnergy(1); ⋮ 69 if (burnTime == 0 && tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, ⋮ 92 return 300; ⋮ 97 if (i == Item.coal.shiftedIndex) { 98 return 1600; ⋮ 100 if (i == Item.bucketLava.shiftedIndex) { 101 return 20000;
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineStone.java lines 28–106 at 0a20887 · upstream ↗ 38 maxEnergy = 100000; 39 maxEnergyExtracted = 500;
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 38–39 at 0a20887 · upstream ↗ 26 public int maxEnergyExtracted = 1;buildcraft/common/net/minecraft/src/buildcraft/energy/Engine.java line 26 at 0a20887 · upstream ↗ 90 if (engine.progress > 0.5 && progressPart == 1) { ⋮ 102 int extracted = engine.extractEnergy( 103 receptor.getPowerProvider().minEnergyReceived, 104 receptor.getPowerProvider().maxEnergyReceived, true); ⋮ 114 } else if (isPowered) { ⋮ 125 receptor.getPowerProvider().minEnergyReceived,
buildcraft/common/net/minecraft/src/buildcraft/energy/TileEngine.java lines 84–131 at 0a20887 · upstream ↗ 46 case Blue: 47 return 0.02F; ⋮ 52 case Red: 53 return 0.16F;
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineStone.java lines 44–57 at 0a20887 · upstream ↗ 82 if (tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, 83 tile.yCoord, tile.zCoord)) { ⋮ 85 if(burnTime > 0 || liquidQty > 0) {
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 80–85 at 0a20887 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn IndustrialCraft² energy moves as EU packets. Each tick, every machine sends or receives its energy as a packet of 1 to 2048 EU; the rate is counted in EU per tick (EU/t), and at Minecraft's usual 20 ticks a second, EU per second is 20 times EU/t.WikiIndustrial-Craft-Wiki, EU (2012)
How we know
EU/t means Energy unit per tick. … Minecraft normally operates at about 20 ticks per second, unless you are experiencing client or server lag. Therefore, under no lag conditions, the rate of EU/sec is 20x EU/t. … EU-Packets are the transmission containers of EUs in Industrial Craft 2. Each tick, the EU sent or received by each machine is done so by an individual EU-Packet. EU-Packets come in different sizes ranging from 1 EU to 2048 EU.
"EU/t" and "EU-Packet" (page as captured 21 June 2012) · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abIndustrialCraft² sorts packet sizes into voltages: micro up to 5 EU (solar panels, water and wind mills), low 32 EU (the Generator, the BatBox), medium 128 EU, high 512 EU and extreme 2048 EU. Storage blocks emit packets of their output size, and a transformer turns four packets into one of the next tier up, or one into four of the tier below.WikiIndustrial-Craft-Wiki, EU (2012)
How we know
Storage Units always emit packets the size of their "out" value. Transformers behave like Storage Units. They are able to upgrade four packets into one of a higher tier or downgrade a single packet into four of a lower tier. … Micro Voltage 0-5 EU Solar Panel, Water Mill, Wind Mill Low Voltage 32 EU Batbox, LV Transformer,Nuclear Reactor,Generator,Geothermal Generator Medium Voltage 128 EU … High Voltage 512 EU … Extreme Voltage 2048 EU
"Emitters" and "Packet Sizes" table · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcdefgEach IndustrialCraft² cable takes packets up to one size: tin 5 EU, copper 32 EU, gold 128 EU, glass fibre 512 EU, and the HV (iron) cable 2048 EU. A packet larger than the cable's limit melts it at once, but the number of packets is not limited, so a copper cable carries any number of 32 EU packets a tick and not one of 128 EU.WikiIndustrial-Craft-Wiki, Cable (2012) · Industrial-Craft-Wiki, EU (2012)
How we know
If an applied EUP exceeds a cable's maximum, the cable will instantly melt. Cables can handle unlimited amounts of total (EU/t). … Tin cables can only tolerate Micro Voltage (up to 5 EUP) … They are only capable of handling Low Voltage (up to 32 EUP) … Gold cables can transport Medium Voltage (up to 128 EUP) … HV Cables can handle the highest amount of current possible at Extreme Voltage (up to 2048 EUP) … Glass Fibre cable is a special type of cable capable of transporting High Voltage (up to 512 EUP).
opening and "Cable Types" (last modified 18 April 2012) · archived copy ↗ Cables are limited by the size of EU-Packets that may travel through, NOT the number of packets, NOR the total EU/t contained by these packets. If an EU Packet too large for a cable to handle tries to pass through, the cable will be destroyed. For example, an unlimited amount of 32 EU-Packets can pass through a Copper cable per tick, but not a single 128 EU-Packet.
Cables · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcEvery IndustrialCraft² cable loses energy over distance, counted per packet per block and rounded down, so a short run loses nothing: copper loses 1 EU every 5 blocks. Rubber insulation cuts the loss and the shocks a bare cable gives, and since the loss is taken from each packet, sending energy in fewer, larger packets loses less. Energy flows to a machine only if some of it would arrive after the loss.WikiIndustrial-Craft-Wiki, Cable (2012)
How we know
All cables suffer from energy losses over distance. … Un-insulated cables shock the player and NPCs. Insulating cables with rubber reduces energy losses, reduces shocks … The general unit for cable efficiency is EU/block. It shows how much EU every EU Packet looses per block. The number is accumulated along the whole length of the cable, and then rounded down to the nearest integer. Therefore, if a distance is short enough, there EU loss will remain zero. For example, since Copper Cable loses 1 EU every 5 blocks … Depending on the EUP traveling trough a cable it may be more efficient to use higher voltage cables and packets. This is because EU/b isn't applied on the total EU/t that travels the cable but on every single EU-Packet. … Current will only flow through a cable when requested by a consumer if the loss from the cable length will allow some energy to get to the consumer.
opening, "Cable Efficiency" and "Cable Splitting" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcdefgIn Thermal Dynamics r2.3.9 (Minecraft 1.12.2), connected fluxducts of one tier form a grid that keeps its energy in one store; ducts of different tiers neither connect nor merge. The store holds five times the tier's transfer rate for each duct that touches a block. Energy put into any duct goes into that store, at most the transfer rate per insertion and up to the free space. Once a tick, while the store holds energy, each duct beside a block offers the blocks around it the store divided by the number of such ducts, worked out once for the tick (the remainder when that rounds to 0), and no more than the transfer rate; the round stops at a duct whose chunk is unloading. With the default base of 1,000 RF a tick, the five tiers (
energyBasic, which the config's comment calls the Leadstone Fluxduct,energyHardened,energyReinforced,energySignalum,energyResonant) move 1,000, 4,000, 9,000, 16,000 and 25,000 RF a tick. The super-conducting duct has a transfer limit of 0, so it can't join these grids, and is excluded.CodeThermal Dynamics r2.3.9 · RedstoneFlux API 1.12revisedHow we know
12 public static final int XFER_BASE = 1000; ⋮ 14 public static int CAPACITY[] = { 1 * 5, 4 * 5, 9 * 5, 16 * 5, 25 * 5, 0 }; 15 public static int XFER[] = { 1, 4, 9, 16, 25, 0 };
src/main/java/cofh/thermaldynamics/duct/energy/GridEnergy.java lines 12–15 at 5ae9f68 · upstream ↗ 27 int xfer = XFER_BASE; 28 String comment = "Adjust this value to change the amount of Energy (in RF/t) that can be received by a Leadstone Fluxduct. This base value will scale with duct level."; 29 xfer = ThermalDynamics.CONFIG.getConfiguration().getInt("BaseTransfer", category, xfer, xfer / 10, xfer * 10, comment); ⋮ 31 for (int i = 0; i < CAPACITY.length; i++) { 32 CAPACITY[i] *= xfer; 33 XFER[i] *= xfer;
src/main/java/cofh/thermaldynamics/duct/energy/GridEnergy.java lines 27–34 at 5ae9f68 · upstream ↗ 37 public GridEnergy(World world, int transferLimit, int capacity) { ⋮ 43 myStorage = new EnergyStorage(GridEnergy.this.capacity, GridEnergy.this.transferLimit) {
src/main/java/cofh/thermaldynamics/duct/energy/GridEnergy.java lines 37–43 at 5ae9f68 · upstream ↗ 27 public EnergyStorage(int capacity, int maxTransfer) { ⋮ 29 this(capacity, maxTransfer, maxTransfer);
src/main/java/cofh/redstoneflux/impl/EnergyStorage.java lines 27–30 at 24719b6 · upstream ↗ 70 public void balanceGrid() { ⋮ 72 myStorage.setCapacity(nodeSet.size() * capacity);
src/main/java/cofh/thermaldynamics/duct/energy/GridEnergy.java lines 69–73 at 5ae9f68 · upstream ↗ 94 public void tickGrid() { ⋮ 98 if (!nodeSet.isEmpty() && myStorage.getEnergyStored() > 0) { 99 currentEnergy = myStorage.getEnergyStored() / nodeSet.size(); 100 extraEnergy = myStorage.getEnergyStored() % nodeSet.size(); 101 for (IGridTile m : nodeSet) { 102 if (!m.tickPass(0) || m.getGrid() == null) { 103 break; ⋮ 110 public boolean canAddBlock(IGridTile aBlock) { ⋮ 112 return aBlock instanceof DuctUnitEnergy && ((DuctUnitEnergy) aBlock).getTransferLimit() == transferLimit; ⋮ 116 public boolean canGridsMerge(MultiBlockGrid grid) { ⋮ 118 return super.canGridsMerge(grid) && ((GridEnergy) grid).transferLimit == this.transferLimit;
src/main/java/cofh/thermaldynamics/duct/energy/GridEnergy.java lines 93–119 at 5ae9f68 · upstream ↗ 154 public int getSendableEnergy() { ⋮ 156 return Math.min(myStorage.getMaxExtract(), currentEnergy == 0 ? extraEnergy : currentEnergy); ⋮ 159 public int receiveEnergy(int maxReceive, boolean simulate) { ⋮ 161 return myStorage.receiveEnergy(maxReceive, simulate);
src/main/java/cofh/thermaldynamics/duct/energy/GridEnergy.java lines 154–162 at 5ae9f68 · upstream ↗ 34 public DuctUnitEnergy(TileDuctEnergy parent, Duct duct) { ⋮ 37 transferLimit = GridEnergy.XFER[duct.type]; 38 capacity = GridEnergy.CAPACITY[duct.type];
src/main/java/cofh/thermaldynamics/duct/energy/DuctUnitEnergy.java lines 34–39 at 5ae9f68 · upstream ↗ 204 public boolean tickPass(int pass) { ⋮ 206 return super.tickPass(pass) && sendEnergy(); ⋮ 210 public boolean sendEnergy() { ⋮ 212 int power = this.grid.getSendableEnergy(); 213 int usedPower = transmitEnergy(power, false); ⋮ 215 this.grid.useEnergy(usedPower);
src/main/java/cofh/thermaldynamics/duct/energy/DuctUnitEnergy.java lines 204–217 at 5ae9f68 · upstream ↗ 310 public int receiveEnergy(int maxReceive, boolean simulate) { ⋮ 312 return grid != null ? grid.receiveEnergy(maxReceive, simulate) : 0;
src/main/java/cofh/thermaldynamics/duct/energy/DuctUnitEnergy.java lines 309–313 at 5ae9f68 · upstream ↗ energyBasic = addDuct(OFFSET_ENERGY, false, 1, 0, "energyBasic", Type.ENERGY, … energyHardened = addDuct(OFFSET_ENERGY + 1, false, 1, 1, "energyHardened", Type.ENERGY, … energyReinforced = addDuct(OFFSET_ENERGY + 2, false, 1, 2, "energyReinforced", Type.ENERGY, … energySignalum = addDuct(OFFSET_ENERGY + 3, false, 1, 3, "energySignalum", Type.ENERGY, … energyResonant = addDuct(OFFSET_ENERGY + 4, false, 1, 4, "energyResonant", Type.ENERGY, … energySuperCond = addDuct(OFFSET_ENERGY + 5, false, 1, 5, "energySuper", Type.ENERGY, …
src/main/java/cofh/thermaldynamics/duct/TDDucts.java#L180-L185 · upstream ↗ 61 for (MultiBlockGrid grid : tickingGrids) { 62 grid.tickGrid();
src/main/java/cofh/thermaldynamics/util/WorldGridList.java lines 59–66 at 5ae9f68 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcIndustrialCraft²'s basic machines take low voltage: the IC wiki gives the Macerator and the Electric Furnace a maximum input of 32 EU per packet before they explode.WikiIndustrial-Craft-Wiki, Macerator (2012) · Industrial-Craft-Wiki, Electro Furnace (2012)
How we know
Maximum Input Power: 32 EUP before exploding.
Energy box (last modified 2 May 2012) · archived copy ↗ Maximum input: 32 EU/t before exploding
Energy box (last modified 4 June 2012) · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In 2.2.4 a steam engine whose store passes 10,000 explodes (range 4), and a combustion engine explodes (range 8) once its heat has passed 100,000, at the next energy it adds. The combustion engine heats by the energy it makes; while it runs it cools only on water, which holds its heat at 49,000 while the water lasts, at one unit of water per unit of heat above, and unpowered it sheds 10 heat a tick. The redstone engine adds its energy without the overflow check.CodeBuildCraft 2.2.4revised
How we know
49 } else if (energy / (double) maxEnergy * 100.0 <= 100.0) { 50 energyStage = EnergyStage.Red; 51 } else { 52 energyStage = EnergyStage.Explosion; ⋮ 85 public void addEnergy (int addition) { 86 energy += addition; ⋮ 88 if (getEnergyStage() == EnergyStage.Explosion) { 89 tile.worldObj.createExplosion(null, tile.xCoord, tile.yCoord, 90 tile.zCoord, explosionRange());
buildcraft/common/net/minecraft/src/buildcraft/energy/Engine.java lines 42–96 at 0a20887 · upstream ↗ 37 return 4;buildcraft/common/net/minecraft/src/buildcraft/energy/EngineStone.java lines 36–38 at 0a20887 · upstream ↗ 23 public static int MAX_HEAT = 100000; 24 public static int COOLANT_THRESHOLD = 49000; ⋮ 47 return 8;
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 22–48 at 0a20887 · upstream ↗ 93 addEnergy(currentFuel.powerPerCycle); 94 heat += currentFuel.powerPerCycle;
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 93–94 at 0a20887 · upstream ↗ 120 if (heat > COOLANT_THRESHOLD) { 121 int extraHeat = heat - COOLANT_THRESHOLD; ⋮ 123 if (coolantQty > extraHeat) { 124 coolantQty -= extraHeat; 125 heat = COOLANT_THRESHOLD; 126 } else { ⋮ 132 if (heat > 0 && !tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, 133 tile.yCoord, tile.zCoord)) { 134 if (heat >= 10) { 135 heat -= 10; 136 } else { ⋮ 149 } else if (heat <= MAX_HEAT) { ⋮
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 120–154 at 0a20887 · upstream ↗ 163 if (id == Block.waterStill.blockID) { 164 return fillCoolant (from, quantity, id, doFill);
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 162–165 at 0a20887 · upstream ↗ 51 energy++;buildcraft/common/net/minecraft/src/buildcraft/energy/EngineWood.java lines 49–52 at 0a20887 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^IndustrialCraft²'s Generator turns burned fuel straight into energy, at 10 EU/t. Factorio splits the same job between two machines: a boiler burns fuel to make steam, and two steam engines turn one boiler's steam into electricity.WikiIndustrial-Craft-Wiki, Generator (2012) · factorio-data 2.1.23 · Factorio Wiki: Power production
How we know
The generator will output power at a rate of 10 EU/t.
Usage · archived copy ↗ 1281 energy_consumption = "1.8MW", ⋮ 1284 type = "burner", 1285 fuel_categories = {"chemical"}, 1286 effectivity = 1,
base/prototypes/entity/entities.lua lines 1281–1286 at 39dbd0f · upstream ↗ One steam engine consumes 900kW (0.9MW) of energy stored in steam, so each boiler can supply 2 steam engines
Steam power · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^A boiler burns chemical fuel at 1.8 MW and heats water to 165 °C steam. With water's heat capacity 2 kJ and steam's 0.2 kJ per unit per degree, one unit of water becomes ten of steam: a boiler takes 6 water and gives 60 steam per second.Codefactorio-data 2.1.23 · Factorio Prototype API 2.1.23 · Factorio Wiki: Power production
How we know
1257 target_temperature = 165,base/prototypes/entity/entities.lua line 1257 at 39dbd0f · upstream ↗ 1281 energy_consumption = "1.8MW", ⋮ 1284 type = "burner", 1285 fuel_categories = {"chemical"}, 1286 effectivity = 1,
base/prototypes/entity/entities.lua lines 1281–1286 at 39dbd0f · upstream ↗ 28 name = "water", 29 subgroup = "fluid", 30 default_temperature = 15, 31 max_temperature = 100, 32 heat_capacity = "2kJ",
base/prototypes/fluid.lua lines 28–32 at 39dbd0f · upstream ↗ 40 name = "steam", 41 subgroup = "fluid", 42 default_temperature = 15, 43 max_temperature = 500, 44 heat_capacity = "0.2kJ",
base/prototypes/fluid.lua lines 40–44 at 39dbd0f · upstream ↗ The boiler heats the input fluid to exactly this temperature and moves the fluid to the output fluid box.
BoilerPrototype.target_temperature · archived copy ↗ One boiler consumes 6 units of water to produce 60 units of steam per second
Steam power · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^A steam engine uses 0.5 units of steam a tick (30 a second) and gets full value from steam up to 165 °C, so it gives at most (165 − 15) × 0.5 × 0.2 kJ = 15 kJ a tick: 900 kW. One boiler (1.8 MW) feeds exactly two engines.Codefactorio-data 2.1.23 · Factorio Prototype API 2.1.23 · Factorio Wiki: Power production
How we know
1778 effectivity = 1, 1779 fluid_usage_per_tick = 0.5, 1780 maximum_temperature = 165,
base/prototypes/entity/entities.lua lines 1778–1780 at 39dbd0f · upstream ↗ Then, the max power output is `(min(fluid_max_temp, maximum_temperature) - fluid_default_temp) × fluid_usage_per_tick × fluid_heat_capacity × effectivity`
GeneratorPrototype.maximum_temperature · archived copy ↗ One steam engine consumes 900kW (0.9MW) of energy stored in steam, so each boiler can supply 2 steam engines
Steam power · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In Thermal Expansion r5.3.9 a machine's power follows how full its RF store is. With the default settings and no augments, a machine of base power P stores 1,000 × P RF and takes up to 4 × P a tick. It spends P RF a tick while its store is at least 90% full, the store divided by 900 between 10% and 90% (P/9 at 10%, about 0.56 × P at half), and P/10 below 10%, or what's left once less than that remains. Base power is 20 RF a tick for most machines and 50 for the charger and the crucible, multiplied by 1, 1.5, 2, 2.5, or 3 for the machine's level. With the SmallStorage option a machine stores only 10 × P and always spends P. Augments change the draw and are excluded: the power augment, which any machine can take, adds the level's base power to P and makes recipes cost 15% more; the furnace's pyrolysis and the crucible's lava augment change it too.CodeThermal Expansion r5.3.9revised
How we know
41 public static final int[] POWER_SCALING = { 100, 150, 200, 250, 300 };src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java lines 39–42 at 23f8892 · upstream ↗ 121 energyStorage = new EnergyStorage(energyConfig.maxEnergy, energyConfig.maxPower * 4);src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java line 121 at 23f8892 · upstream ↗ 233 if (energyStorage.getEnergyStored() >= energyConfig.maxPowerLevel) { 234 return energyConfig.maxPower; ⋮ 236 if (energyStorage.getEnergyStored() < energyConfig.minPowerLevel) { 237 return Math.min(energyConfig.minPower, energyStorage.getEnergyStored()); ⋮ 239 return energyStorage.getEnergyStored() / energyConfig.energyRamp;
src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java lines 226–240 at 23f8892 · upstream ↗ 203 maxPower = basePower; 204 minPower = basePower / 10; 205 maxEnergy = basePower * 1000; 206 maxPowerLevel = 9 * maxEnergy / 10; 207 minPowerLevel = maxEnergy / 10; 208 energyRamp = maxPowerLevel / basePower; ⋮ 215 if (!smallStorage) { ⋮ 218 maxPower = basePower; 219 minPower = basePower; 220 maxEnergy = basePower * 10;
src/main/java/cofh/thermalexpansion/block/TileTEBase.java lines 201–226 at 23f8892 · upstream ↗ 421 if (TEProps.MACHINE_POWER.equals(id)) { 422 energyConfig.setDefaultParams(energyConfig.maxPower + getBasePower(this.level), smallStorage); 423 energyMod += 15; 424 return true;
src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java lines 421–425 at 23f8892 · upstream ↗ 38 public static int basePower = 20;src/main/java/cofh/thermalexpansion/block/machine/TileFurnace.java line 38 at 23f8892 · upstream ↗ 44 public static int basePower = 50;src/main/java/cofh/thermalexpansion/block/machine/TileCharger.java line 44 at 23f8892 · upstream ↗ 43 public static int basePower = 50;src/main/java/cofh/thermalexpansion/block/machine/TileCrucible.java line 43 at 23f8892 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^In Thermal Expansion r5.3.9 (Minecraft 1.12.2), in the loop its machines share, a machine's recipe costs an amount of Redstone Flux (RF), and the machine works by spending it: each tick a running machine takes some RF from its store and subtracts it from what the recipe still needs, and finishes when that reaches zero, getting back any RF it spent past the cost. So a machine with more power finishes sooner. A machine whose store runs dry mid-recipe stops and clears what the recipe still needed, so the RF spent on it is lost: the furnace, starting again, sets the recipe's full cost. An idle machine checks on a timer whether it can start. The charger and the transposer replace parts of this loop in some modes, and are excluded.CodeThermal Expansion r5.3.9
How we know
194 processTick(); ⋮ 196 if (canFinish()) { 197 processFinish(); ⋮ 200 energyStorage.modifyEnergyStored(-processRem); ⋮ 203 processOff(); ⋮ 207 } else if (energyStorage.getEnergyStored() <= 0) { 208 processOff(); ⋮ 215 if (timeCheckEighth() && canStart()) { ⋮ 217 processTick();
src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java lines 188–223 at 23f8892 · upstream ↗ 270 protected void processOff() { ⋮ 272 processRem = 0; 273 isActive = false;
src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java lines 270–273 at 23f8892 · upstream ↗ 167 processRem = processMax;src/main/java/cofh/thermalexpansion/block/machine/TileFurnace.java lines 164–168 at 23f8892 · upstream ↗ 286 int energy = calcEnergy(); 287 energyStorage.modifyEnergyStored(-energy); 288 processRem -= energy;
src/main/java/cofh/thermalexpansion/block/machine/TileMachineBase.java lines 281–291 at 23f8892 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^IndustrialCraft 1's cables carry the current a generator emits to the machines on them, and the power grows weaker the farther it travels. Where a cable forks in two, the energy splits in half; the April 2011 cable page warns that splitting one cable three ways at once melts it.WikiIndustrial-Craft-Wiki, Cable (2011)
How we know
If however, some sort of Generator is creating energy, without actually using it, it will start emitting electric current. This can be absorbed and transmitted via Cables. … transporting energy via cables is not perfect and thus the emit'd power will become less and less potent, the further it travels. A good aspect about cables, however, is you can SPLIT them. If a current finds more then one possible way to go, the energy will be split in half and distributed to both new ways equally. We however disrecommend trying to split up a cable into 3 lanes at once, experience showed cables will melt in that case.
revision of 11 April 2011 · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In IndustrialCraft 1 energy is counted in EU, energy units. The IC wiki's EU page of May 2011 says the rate written EU/s is not EU per second: Alblaka defined it as EU per frame.WikiIndustrial-Craft-Wiki, EU (2011)
How we know
EU means Energy Unit and is the unit for any, energy-using, machine. … EU/s are NOT EU per second. Alblaka defined it as EU per frame, because EU/f would look wierd.
revision of 2 May 2011, opening and "EU/s" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abOf IndustrialCraft, BuildCraft and Thermal Expansion, IndustrialCraft 1 has the earliest known power network: the IC wiki described its cables carrying a generator's current to machines by 11 April 2011. BuildCraft added its power system, Minecraft Joules, in 2.0.0 at the end of July 2011, by the account of its later developer asie, and Thermal Expansion's first release, in June 2012, needed power from BuildCraft or Forestry. Factorio's earliest date read here is its first demo, released on 31 December 2012; when its electric poles arrived isn't read here.WikiIndustrial-Craft-Wiki, Cable (2011) · asie, "BuildCraft History and Design", 30 January 2015 · King Lemming, Thermal Expansion 1.0.2 post (2012) · Demo is outrevised
How we know
If however, some sort of Generator is creating energy, without actually using it, it will start emitting electric current. This can be absorbed and transmitted via Cables.
revision of 11 April 2011 · archived copy ↗ version 2.0.0 came out at the very end of July 2011. It was the first version to depend on Minecraft Forge. The major revolution here was the addition of a power system - Minecraft Joules.
on 2.0.0 · archived copy ↗ 1.0: Initial Release Important: Please note that this mod in its current state requires power generation from either BuildCraft or Forestry.
#1, KingLemmingCoFH, changelog · archived copy ↗ After a lot of work we have managed to release the first version of the demo.
post of 2012-12-31, first paragraph · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^On 28 July 2011 Alblaka announced the IndustrialCraft² rewrite on his blog under a gag headline, "I will stop the developement of IC !", and asked readers aware of the gag not to spoil it on the Minecraft Forum. He wrote that his Java had been basic when he started IC, so he would restructure and recode it, and that a fellow modder had already been reworking the energy code for a few weeks. His list of planned features included APIs for other modders, a new electric current distribution algorithm, and possibly real oil.Dev blogAlblaka, IC2 announcement (2011)revised
How we know
I will stop the developement of IC ! Posted on July 28, 2011 by Alblaka … I hereby officially announce the developement begin of IC²! … When i startet developing IC, my Java knowledge was quite basic. … As a result, i’ve decided to completely restructure/recode and review IC’s code … Since a few weeks, a fellow modder is already reworking the Energy-Current-Code. … Don’t ruin the fun for those people aware of the gag.
post, 28 July 2011 · archived copy ↗ API’s for other modders to integrate IC’s machine operations and Electric Network … (Already mentioned,) new Electric Current distribution algorythm Rework of many game concepts, f.e. Ore abdundancy, eventually new ores, Fuel mechanics (i will probably try myself on coiding real OIL), and stuff.
post, list of intended features · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Chocohead dates the first public beta of IndustrialCraft² to 29 August 2011, and calls it the first key overhaul: cables went from whole blocks that ticked once a second, because the energy code was slow, to smaller tiered cables, with large additions and changes to the old content.Dev blogChocohead, IC history and anniversary (2018)
How we know
Fast forward to the 29th August the same year, the first public (beta) release of IndustrialCraft² is put up here (it too still available if you want). This was the first key overhaul that saw cables go from being clunky whole blocks that ticked once a second because the energy flow code was so slow, to the smaller tiered cables you would recognise, as well as large content additions and changes to pre-existing content to improve the standard of the mod.
post · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^IndustrialCraft² kept IC1's energy units, cables, Generator, Macerator and electric furnace, all on the IC wiki by spring 2011 and all on its 2012 IC2 pages, and rebuilt how energy moves. Announcing IC², Alblaka wrote that a fellow modder was reworking the energy code; in 2018 the IC2 developer Chocohead described IC1's cables as whole blocks that ticked once a second, replaced in IC2 by smaller tiered cables. Tiered cables, packet sizes and transformers appear on the IC wiki's 2012 pages and in none of its 2011 revisions read here.WikiIndustrial-Craft-Wiki, EU (2011) · Industrial-Craft-Wiki, Cable (2011) · Industrial-Craft-Wiki, Generator (2011) · Industrial-Craft-Wiki, Macerator (2011) · Industrial-Craft-Wiki, Electro Furnace (2011) · Alblaka, IC2 announcement (2011) · Chocohead, IC history and anniversary (2018) · Industrial-Craft-Wiki, EU (2012) · Industrial-Craft-Wiki, Cable (2012) · Industrial-Craft-Wiki, Generator (2012) · Industrial-Craft-Wiki, Macerator (2012) · Industrial-Craft-Wiki, Electro Furnace (2012)revised
How we know
EU means Energy Unit and is the unit for any, energy-using, machine.
revision of 2 May 2011 · archived copy ↗ transporting energy via cables is not perfect and thus the emit'd power will become less and less potent, the further it travels.
revision of 11 April 2011 · archived copy ↗ the Generator will need something it can burn to create this energy
revision of 29 March 2011 · archived copy ↗ effectively doubling the efficiency of gaining ore.
revision of 28 March 2011 · archived copy ↗ We created a completely new Furnace for you, THE ELECTRIC FURNACE.
revision of 28 March 2011 · archived copy ↗ Since a few weeks, a fellow modder is already reworking the Energy-Current-Code.
post, 28 July 2011 · archived copy ↗ cables go from being clunky whole blocks that ticked once a second because the energy flow code was so slow, to the smaller tiered cables you would recognise
post · archived copy ↗ EU-Packets are the transmission containers of EUs in Industrial Craft 2.
EU-Packet · archived copy ↗ The Cables are the primary means of transferring EU from one device to another.
opening · archived copy ↗ The generator will output power at a rate of 10 EU/t.
"Usage" · archived copy ↗ the Macerator grinds down one Tin Ore into two Tin Dust
opening · archived copy ↗ The Electric Furnace is an improved and more costly version of the Iron Furnace.
opening · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^By asie's account, BuildCraft 2.0.0, at the end of July 2011, was the first version to depend on Minecraft Forge and added the power system, Minecraft Joules; 2.0.1 brought oil and wrenches, 2.1.0 liquid pipes and pumps, and 2.2.0 conductive pipes, fuel and the refinery.Dev blogasie, "BuildCraft History and Design", 30 January 2015
How we know
version 2.0.0 came out at the very end of July 2011. It was the first version to depend on Minecraft Forge. The major revolution here was the addition of a power system - Minecraft Joules. … In 2.0.1, we got oil and wrenches, and 2.1.0 gave us fluid pipes and pumps. … BuildCraft 2.2.0 added power pipes, fuel and the refinery.
on 2.0.0 · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^King Lemming's Minecraft Forum thread for Thermal Expansion opens with a post dated 19 June 2012, the earliest known public release. As captured in July 2012, the thread offers version 1.0.2 for Minecraft 1.2.5 with a changelog that begins "1.0: Initial Release", calls the mod a "tech" mod of "what ifs", and says the release is only the "Factory" module and needs power generation from BuildCraft or Forestry.Dev blogKing Lemming, Thermal Expansion 1.0.2 post (2012)
How we know
[1.2.5] [SMP] Thermal Expansion - Now with SMP compatibility!
thread title · archived copy ↗ Posted 19 June 2012 - 01:20 AM "Thermal Expansion" 1.0.2 Thermal Expansion, at its core, is a "tech" mod - it's a mod of what ifs. … This release is only the "Factory" module - there is lots more to come.
#1, KingLemmingCoFH · archived copy ↗ 1.0: Initial Release Important: Please note that this mod in its current state requires power generation from either BuildCraft or Forestry.
#1, KingLemmingCoFH, changelog · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Team CoFH says Thermal Expansion began as a BuildCraft addon: it needed BuildCraft, or addons such as Forestry, to power its machines with Minecraft Joules, and became independent only in its third iteration.PublisherTeam CoFH, "About"
How we know
TE was a BuildCraft addon: it required BuildCraft itself or addons like Forestry in order to power the machines with Minecraft Joules, BuildCraft’s old power system. It wasn’t until the third iteration that the mod became fully independent.
History · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Thermal Expansion began as an addon that ran its machines on BuildCraft's Minecraft Joules (MJ), and Team CoFH say it split into its own mod "due mostly to the design choices by the BuildCraft developers". Its 3.0.0.0 changelog (25 December 2013) drops MJ for its own Redstone Flux (RF), at 10 RF to 1 MJ: machines take only RF, dynamos that make RF replace engines, and the Redstone Energy Conduits take RF but convert it to MJ on output where needed.PublisherTeam CoFH, About (2017) · Team CoFH, Thermal Expansion page (2014) · Team CoFH, Thermal Expansion changelog (2014)
How we know
TE was a BuildCraft addon: it required BuildCraft itself or addons like Forestry in order to power the machines with Minecraft Joules, BuildCraft's old power system.
History · archived copy ↗ Soon, due mostly to the design choices by the BuildCraft developers, Thermal Expansion split into its own mod, with its own power system and no dependency on any mod.
page text · archived copy ↗ MJ is no longer supported by Thermal Expansion. The new energy system is Redstone Flux. (RF). Ratio is 10:1 RF:MJ.
3.0.0.0: 12/25/2013 · archived copy ↗ Machines: -Now only accept RF. … Dynamos: -These replace engines. They generate Redstone flux.
3.0.0.0, BLOCKS · archived copy ↗ There are now 3 levels of Redstone Energy Conduit. They accept RF but will convert to MJ on output if necessary.
3.0.0.0, Conduit · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Team CoFH claimed at Thermal Expansion 3's release that Redstone Flux was already "the most widely adopted energy system in modded Minecraft", and their 2016 documentation lists other mods that support it, BuildCraft among them, and devices in other mods that make RF, BuildCraft's engines among them.PublisherTeam CoFH, Thermal Expansion changelog (2014) · Team CoFH docs, Supporting Mods (2016) · Team CoFH docs, Redstone Flux (2016)
How we know
Lots of mods already support Redstone Flux - it is now the most widely adopted energy system in modded Minecraft!
3.0.0.0: 12/25/2013 · archived copy ↗ BuildCraft Pipes, fillers, builders, and various other tools for automation
list of mods · archived copy ↗ Engines from BuildCraft, Forestry and Railcraft
Production · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Minecraft Forge's energy interface, IEnergyStorage, states in its documentation that it is derived from the Redstone Flux system that King Lemming designed for Thermal Expansion, and that it was made with the consent of King Lemming and Team CoFH. Thermal Expansion's own CurseForge description says its fluid and energy systems are now both part of Forge.PublisherMinecraftForge, IEnergyStorage · Team CoFH, Thermal Expansion on CurseForge (2019)
How we know
15 * Derived from the Redstone Flux power system designed by King Lemming and originally utilized in Thermal Expansion and related mods. 16 * Created with consent and permission of King Lemming and Team CoFH. Released with permission under LGPL 2.1 when bundled with Forge.
src/main/java/net/minecraftforge/energy/IEnergyStorage.java lines 15–16 at 243490d · upstream ↗ Many of the gameplay ideas and mechanics set forth by Thermal Expansion have become staples in the modded Minecraft community, including both the Fluid and Energy (RF) systems, now both included as part of Minecraft Forge.
description · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^asie wrote in 2015 that IC2 used its own "EU ecosystem" when most mods had moved to the Redstone Flux energy API, and that IndustrialCraft "had died in the eyes of most people due to the 'gregification'".Dev blogasie, BuildCraft history (2015)
How we know
Redstone Flux grew to become the ultimate energy API, with the few mods holding out being the “EU ecosystem” of IC2, Reika’s mods and BuildCraft/Forestry/RailCraft, still faithfully using MJ. … IndustrialCraft, now 2, had died in the eyes of most people due to the “gregification”
paragraphs beginning "Redstone Flux grew" and "It looked as if" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Michal Kovařík (kovarex), Factorio's founder, wrote in 2014 that modded Minecraft, "mainly buildcraft/industrialcraft", was a huge inspiration to create Factorio, and that he had made private changes to those mods before he had the idea for a game of his own.Dev blogkovarex, Reddit, 1 August 2014
How we know
I never ever tried to hide the fact, that Modded minecraft, mainly buildcraft/industrialcraft, was huge inspiration to create Factorio. In fact, before even the idea to create my own game came to my mind, I started to make my own (private) changes to these minecraft mods.
kovarex's comment, 1 August 2014 · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In Thermal Dynamics r2.3.9 (Minecraft 1.12.2), connected fluid ducts form one grid. A grid forms outward from one duct, breadth-first over its connected ducts: a duct with no grid joins, and a duct in another grid merges the two grids, the smaller into the larger, the larger keeping its fluid and taking the other's. A grid holds one fluid: a duct joins, and two grids merge, only when their fluids match or one is empty; otherwise the connection is rejected. When a duct is placed, it compares its neighbours' fluids with one of them, the fluid of the duct the player aimed at or else the first neighbour that has one, and blocks its sides to every neighbouring duct whose fluid differs from that.CodeThermal Dynamics r2.3.9revised
How we know
16 theGrid = theMultiBlock.createGrid(); ⋮ 22 while (!blocksToCheck.isEmpty()) { 23 checkMultiBlock(blocksToCheck.remove());
src/main/java/cofh/thermaldynamics/multiblock/MultiBlockFormer.java lines 14–26 at 5ae9f68 · upstream ↗ 45 if (aBlock.getGrid() == null && theGrid.canAddBlock(aBlock)) { ⋮ 51 if (theGrid.size() >= aBlock.getGrid().size()) { 52 theGrid.mergeGrids(aBlock.getGrid()); ⋮ 54 aBlock.getGrid().mergeGrids(theGrid); ⋮ 59 currentMultiBlock.onConnectionRejected(i);
src/main/java/cofh/thermaldynamics/multiblock/MultiBlockFormer.java lines 44–61 at 5ae9f68 · upstream ↗ 205 public void mergeGrids(MultiBlockGrid<DuctUnitFluid> theGrid) { ⋮ 211 myTank.fill(gridFluid.getFluid(), true);
src/main/java/cofh/thermaldynamics/duct/fluid/GridFluid.java lines 204–225 at 5ae9f68 · upstream ↗ 419 if (retrace != null && retrace.sideHit != null) { 420 EnumFacing sideHit = retrace.sideHit.getOpposite(); 421 DuctUnitFluid fluids = IDuctHolder.getTokenFromTile(world().getTileEntity(pos().offset(sideHit)), DuctToken.FLUID); 422 if (fluids != null) { 423 fluidStack = fluids.getConnectionFluid();
src/main/java/cofh/thermaldynamics/duct/fluid/DuctUnitFluid.java lines 419–425 at 5ae9f68 · upstream ↗ 434 if (fluidStack == null) { 435 fluidStack = connectionFluid; 436 } else if (connectionFluid != null && !fluidStack.isFluidEqual(connectionFluid)) { 437 parent.setConnectionType(facing.ordinal(), ConnectionType.BLOCKED);
src/main/java/cofh/thermaldynamics/duct/fluid/DuctUnitFluid.java lines 427–442 at 5ae9f68 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^A solar panel gives up to 60 kW. Nauvis's day lasts 7 minutes (25,200 ticks). Wube's comment marks the phases: full output for half of it, a fall over the next fifth (dusk), nothing for a tenth (night), and a rise over a fifth (dawn). The wiki says the fall and rise are linear, which gives an average of 70%, the 42 kW per panel the wiki states.Codefactorio-data 2.1.23 · Factorio Wiki: Time · Factorio Wiki: Solar panelrevised
How we know
5356 production = "60kW",base/prototypes/entity/entities.lua line 5356 at 39dbd0f · upstream ↗ 28 surface_properties = ⋮ 30 ["day-night-cycle"] = 7 * minute
base/prototypes/planet/planet.lua lines 28–31 at 39dbd0f · upstream ↗ 903second = 60 904minute = 60 * second
core/lualib/util.lua lines 903–904 at 39dbd0f · upstream ↗ 492 -- Should be based on the default day/night times, ie 493 -- sun starts to set at 0.25 494 -- sun fully set at 0.45 495 -- sun starts to rise at 0.55 496 -- sun fully risen at 0.75
core/prototypes/utility-constants.lua lines 492–496 at 39dbd0f · upstream ↗ An in-game day on Nauvis lasts 25200 ticks or 7 in-game minutes.
Days · archived copy ↗ Generated power will increase/decrease linearly during dawn and dusk, and no power is produced at night. … On Nauvis, one solar panel produces 17640 kJ per cycle, or an average of 42 kW over a day/night cycle.
Mechanics · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
Sources
Code
- SpaceToad. 2011. “BuildCraft 2.2.4 source.” GitHub (BuildCraft/BuildCraft). Commit 0a20887. BuildCraft/BuildCraft @ 0a20887 · licence, all uses
- Software, Wube. 2026. “factorio-data: Factorio's Lua prototype definitions, version 2.1.23.” Commit 39dbd0f. wube/factorio-data @ 39dbd0f · licence, all uses
- Team CoFH. 2018. “Thermal Dynamics 1.12.2 (CoFH/ThermalDynamics-1.12-Legacy), tag r2.3.9.” Commit 5ae9f68. CoFH/ThermalDynamics-1.12-Legacy @ 5ae9f68 · licence, all uses
- Team CoFH. 2020. “RedstoneFlux API 1.12 (CoFH/RedstoneFlux-1.12-Legacy).” Commit 24719b6. CoFH/RedstoneFlux-1.12-Legacy @ 24719b6 · licence, all uses
- Team CoFH. 2018. “Thermal Expansion 1.12.2 (CoFH/ThermalExpansion-1.12-Legacy), tag r5.3.9.” Commit 23f8892. CoFH/ThermalExpansion-1.12-Legacy @ 23f8892 · licence, all uses
- Forge Development LLC and contributors. 2026. “Minecraft Forge: IEnergyStorage (Forge Energy).” Commit 243490d. MinecraftForge/MinecraftForge @ 243490d · licence, all uses
Primary
- Software, Wube. 2026. “Factorio Prototype API, version 2.1.23 (machine-readable JSON).” Wube Software (lua-api.factorio.com). original · archived · licence, all uses
- Siekierka, Adrian. 2015. “BuildCraft History and Design.” asie's blog. original · archived · licence, all uses
- Lemming, King. 2012. “Thermal Expansion 1.0.2: King Lemming's Minecraft Forum release post.” Minecraft Forum. original · archived · licence, all uses
- Kozelek, Tomas. 2012. “Demo is out.” Factorio blog. Wube Software. original · archived · licence, all uses
- Alblaka. 2011. “I will stop the developement of IC !” Industrial BlaBla, the official blog of Alblaka. industrial-craft.net. original · archived · licence, all uses
- Chocohead. 2018. “April Anniversary Edition.” IC² Forum, IndustrialCraft². original · archived · licence, all uses
- Team CoFH. 2026. “About Team CoFH.” Team CoFH. original · archived · licence, all uses
- Team CoFH. 2017. “About Team CoFH: the team's history and members.” Team CoFH. original · archived · licence, all uses
- Team CoFH. 2014. “Thermal Expansion (Team CoFH site, December 2014).” Team CoFH. original · archived · licence, all uses
- Team CoFH. 2014. “Thermal Expansion changelog (Team CoFH wiki, January 2014).” Team CoFH. original · archived · licence, all uses
- Team CoFH. 2016. “Supporting Mods (Team CoFH documentation).” Team CoFH. original · archived · licence, all uses
- Team CoFH. 2016. “Redstone Flux (Team CoFH documentation).” Team CoFH. original · archived · licence, all uses
- Team CoFH. 2019. “Thermal Expansion on CurseForge (project description and statistics, 2019).” CurseForge (Twitch). original · archived · licence, all uses
- asie. 2015. “BuildCraft History and Design.” asie's blog. original · archived · licence, all uses
- Kovařík, Michal. 2014. “kovarex on Factorio and modded Minecraft (Nerd³ video thread).” Reddit (r/nerdcubed). original · archived · licence, all uses
Secondary
- Official Factorio Wiki contributors. n.d. “Electric system.” Official Factorio Wiki. original · archived · licence, all uses
- Industrial-Craft-Wiki contributors. 2012. “EU (2012).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Industrial-Craft-Wiki contributors. 2012. “Cable (2012).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Industrial-Craft-Wiki contributors. 2012. “Macerator (2012).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Industrial-Craft-Wiki contributors. 2012. “Electro Furnace (2012).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Industrial-Craft-Wiki contributors. 2012. “Generator (2012).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Official Factorio Wiki contributors. n.d. “Power production.” Official Factorio Wiki. original · archived · licence, all uses
- Feanturi. 2011. “Cable (revision 1013).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Feanturi. 2011. “EU (revision 2459).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Feanturi. 2011. “Generator (revision 272).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Feanturi. 2011. “Macerator (revision 257).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Feanturi. 2011. “Electro Furnace (revision 243).” Industrial-Craft-Wiki. original · archived · licence, all uses
- Official Factorio Wiki contributors. n.d. “Time.” Official Factorio Wiki. original · archived · licence, all uses
- Official Factorio Wiki contributors. n.d. “Solar panel.” Official Factorio Wiki. original · archived · licence, all uses