On this page
  1. How energy moves
  2. Short of power
  3. Quirks
  4. History
  5. Related
  6. Games
  7. References
  8. Sources

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

GameCarrierLimitOver the limit
BuildCraft 2.2.4engines push into the machine or conductive pipe they face; each pipe passes energy on by what each neighbour asks for, less 1% a pipe4,1what one pipe takes from one side in a tickthe pipe explodes1
IndustrialCraft²cables carry EU packets, losing energy per packet with distance5,8packet size, from 57 EU on tin cable to 20487 EU on HV cable; the number of packets is unlimited7the 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 tick9a transfer rate per tier, from 10009 RF a tick up9ducts of different tiers don’t connect9
Factorio 2.1.23poles power the machines in a square around them and link to poles within wire reach2each pole’s area and reach2none 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

GameYearHowNote
BuildCraft2011Pipe to pipeengines 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
IndustrialCraft2011Tiered packetsIC2'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 Expansion2012Pooled gridin 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
Factorio2016Coverage networka 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)
Thermal Expansion 2012In 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.Code
Factorio 2016The 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.Wiki
generalOf 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.Wiki

References

  1. ^ 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.

    In the claim ledger

  2. ^ 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.

    In the claim ledger

  3. ^ 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.

    In the claim ledger

  4. ^ 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.

    In the claim ledger

  5. ^ 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.

    In the claim ledger

  6. ^ 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.

    In the claim ledger

  7. ^ 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.

    In the claim ledger

  8. ^ 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.

    In the claim ledger

  9. ^ 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.12revised
    How 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.

    In the claim ledger

  10. ^ 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 the claim ledger

  11. ^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.

    In the claim ledger

  12. ^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.

    In the claim ledger

  13. ^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.

    In the claim ledger

  14. ^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 the claim ledger

  15. ^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 the claim ledger

  16. ^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.

    In the claim ledger

  17. ^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 the claim ledger

  18. ^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.

    In the claim ledger

  19. ^ 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.

    In the claim ledger

  20. ^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.

    In the claim ledger

  21. ^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.

    In the claim ledger

  22. ^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.

    In the claim ledger

  23. ^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.

    In the claim ledger

  24. ^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.

    In the claim ledger

  25. ^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.

    In the claim ledger

  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.

    In the claim ledger

  27. ^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.

    In the claim ledger

  28. ^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.

    In the claim ledger

  29. ^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.

    In the claim ledger

  30. ^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 the claim ledger

  31. ^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.

    In the claim ledger

  32. ^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.

    In the claim ledger

Sources

Code

Primary

Secondary