BuildCraft
SpaceToad's 2011 automation mod for Minecraft.
BuildCraft is a mod for Minecraft that automates mining, moving and making things. SpaceToad posted it on the Minecraft Forum in April 2011 as “a new game mod aiming at allowing users to build advanced structures and mechanisms”, with code by himself and pixels by plashal1. It came out under Minecraft Beta 1.4, when, as a later BuildCraft developer recalled, almost none of the mods that followed existed and IndustrialCraft 1 had come out a month before2. By October its website summed it up as “Extending Minecraft with pipes, auto-crafting, quarry, engines, and much more!“3
The first release had five pipes and a mining well4; a later developer’s history names a cobblestone pipe where the code has a stone one5. Quarries and automatic crafting tables came in the next versions5. Version 2.0, at the end of July 2011, brought a power system measured in Minecraft Joules and made BuildCraft depend on Minecraft Forge, which SpaceToad had helped to found; the versions after it added oil, liquid pipes and pumps, and then fuel and the refinery6,7. In November 2011 SpaceToad opened its distribution rights, under conditions8 and released an alpha of gates, logic that reads pipes and machines and sends signals along wires9. Blueprints followed at the turn of the year10.
In March 2012 SpaceToad handed the mod to Krapht and SirSengir, the makers of Logistics Pipes and Forestry, after nine months of 15 or more hours a week; he wrote that it had been meant from the start to be community-driven, which was a main reason it was open source11. He came back to lead it in 201412. His forum thread ran to 991 pages by January 201213, and BuildCraft’s CurseForge page alone counted 43,997,544 downloads14 by 2026. Other mods were built on it: Thermal Expansion began as a BuildCraft addon that ran on its Minecraft Joules15, and Krapht’s Logistics Pipes added item routing16. A later maintainer credited BuildCraft with “the first pipes, quarries and builders”17.
#How it plays
A wooden pipe does the pulling: an engine’s stroke makes it lift items out of the chest or machine it faces, and the redstone engine’s tiny strokes move one item at a time18,19. At every pipe an item picks an open way on, at random where there are several, and falls out into the world where there are none20. Pipe materials do the sorting. An iron pipe lets items out by one side, which a redstone pulse turns; a diamond pipe sends each type of item to the side whose filter lists it; a golden pipe with a signal flings items onward at twenty times their usual pace21,22. Stone and cobblestone pipes refuse to join each other, so a line of each can run side by side without merging23. Waterproof pipes carry liquids, and conductive pipes carry energy, losing a share at every pipe24,25.
Engines push energy into whatever they face, and only while they have a redstone signal. The redstone engine makes a trickle; the steam engine burns coal or wood, finishing a piece it has lit even without the signal; and the combustion engine burns liquids19. The two bigger engines can blow up: a steam engine whose store overflows, and a combustion engine run hot without water to cool it26. By late 2012 the engine’s screen showed its output in MJ, Minecraft Joules27.
The quarry builds a frame and then empties a shaft, 9 × 9 unless landmarks mark out another size, down to bedrock, layer by layer, its arm swinging faster the more energy it holds; what it digs goes into a chest beside it, or a pipe, or is thrown into the air28,29. The automatic crafting table holds a recipe’s pattern and crafts one result each time a pipe pulls from it, reaching into a chest beside it for ingredients30.
Oil lies in desert pools and, rarely, in buried lakes that send a column of oil up above the ground31. A pump draws it up block by block until the deposit is gone32. Oil burns in the combustion engine, but the refinery turns it into fuel, worth more than ten times as much33,34. Later versions changed the figures35.
Gates came with 3.0. Fixed onto a pipe, a gate watches the pipe, a neighboring chest, tank, machine or engine, or a signal, and answers with a redstone signal, a signal on one of four colored pipe wires, or a command to the machine beside it; bigger gates join more conditions with AND or OR36,37. A wire signal fades by one at every pipe and keeps to its own color38. SpaceToad built gates in place of the detector pipes players had asked for, which he found “boring”9.
#In Factorio’s lineage
Wube’s Friday Facts says “Factorio was inspired by Buildcraft”, and its founder, kovarex, wrote that modded Minecraft, mainly BuildCraft and IndustrialCraft, was a huge inspiration39,40. In 2013 he proposed oil for Factorio’s energy, saying he liked BuildCraft’s oil concept a lot without wanting to copy it completely41. The two chains part early. BuildCraft’s deposits run dry and its refinery has one recipe, oil into fuel; Factorio’s crude oil never runs out, and its refinery’s advanced recipe splits it into three products, which chemical plants crack further42. Thermal Expansion, whose fluid algorithm a Wube developer proposed to follow closely for Factorio 2.0, began as a BuildCraft addon15,43.
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Overheat | Explode | the combustion engine heats as it runs and explodes past its limit unless water cools it |
| Fluid network | Pipe to pipe | waterproof pipes keep liquid in buffers at each side and the center, passing at most 20 units a tick (80 in a golden pipe) from buffer to buffer and pipe to pipe |
| Power network | 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 |
| Production chain | Automated | in 2.2.4 engine-powered wooden pipes pull items out of inventories such as furnaces into the pipes, which route them on to machines and inventories; the Automatic Crafting Table crafts its pattern each time a pipe pulls from it, and the quarry puts what it digs into an adjacent chest or pipe |
Every claim about this game, by concept (42)
References
- ^SpaceToad posted BuildCraft on the Minecraft Forum on 25 April 2011, describing it as "a new game mod aiming at allowing users to build advanced structures and mechanisms". The thread's opening post credits the code to SpaceToad and the pixels to plashal.Dev blogSpaceToad, "BuildCraft", Minecraft Forum, 25 April 2011 · asie, "BuildCraft History and Design", 30 January 2015
How we know
Posted 25 April 2011 - 04:47 PM … BuildCraft is a new game mod aiming at allowing users to build advanced structures and mechanisms. … Code by: SpaceToad Pixels by: plashal
opening post, SpaceToad · archived copy ↗ BuildCraft 1.4.1 (the first release) came out on the 25th of April, 2011.
opening section · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Adrian Siekierka (asie), who joined BuildCraft's developers in October 2014, wrote in 2015 that when BuildCraft came out, under Minecraft Beta 1.4, almost none of the later mods existed, and IndustrialCraft 1 had come out a month before.Dev blogasie, "BuildCraft History and Design", 30 January 2015
How we know
Our story begins in Minecraft Beta 1.4. Yes, that was April 2011 … almost none of the mods that exist today were out back then. IndustrialCraft 1 had only come out a month before … as it were when I joined the development team in October 2014
opening section · 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 October 2011 BuildCraft's own website summed the mod up as "Extending Minecraft with pipes, auto-crafting, quarry, engines, and much more!"PublisherBuildCraft site, October 2011
How we know
Extending Minecraft with pipes, auto-crafting, quarry, engines, and much more!
site header · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^BuildCraft 1.4.1, the first release (April 2011), adds five pipes (Wooden, Stone, Iron, Golden and Diamond), an Iron Mining Well and the Mining Pipe it lowers. The tag has no engines, oil or automatic crafting.CodeBuildCraft 1.4.1
How we know
94 ModLoader.AddName(woodenPipeBlock.setBlockName("woodenPipe"), "Wooden Pipe"); ⋮ 101 ModLoader.AddName(stonePipeBlock.setBlockName("stonePipe"), "Stone Pipe"); ⋮ 108 ModLoader.AddName(ironPipeBlock.setBlockName("ironPipe"), "Iron Pipe"); ⋮ 115 ModLoader.AddName(goldenPipeBlock.setBlockName("goldenPipe"), "Golden Pipe"); ⋮ 122 ModLoader.AddName(diamondPipeBlock.setBlockName("diamondPipe"), "Diamond Pipe"); ⋮ 131 ModLoader.AddName(miningWellBlock.setBlockName("miningWellBlock"), "Iron Mining Well"); ⋮ 140 ModLoader.AddName(plainPipeBlock.setBlockName("plainPipeBlock"), "Mining Pipe");
minecraft/net/minecraft/src/mod_BuildCraft.java lines 94–140 at 1a31ccd · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abBy asie's account, the first release had five pipes and no building or crafting; 1.5_01.3 added quarries and automatic crafting tables, which then ran on fast-clocked redstone; 1.6.5.1 added vacuum pipes (later obsidian pipes), land marks and the filler. He also dates mining wells to 1.5_01.1, which the first release's code contradicts.Dev blogasie, "BuildCraft History and Design", 30 January 2015revised
How we know
Back then, it actually didn’t have building or crafting - much like the first releases of Minecraft. Instead, it had five pipe types … BuildCraft 1.5_01.1 brought Mining Wells and a port to beta 1.5_01, and 1.5_01.3 added Quarries and Automatic Crafting Tables (now Auto Workbenches). Back then, they still were powered by fast-clocked redstone … BuildCraft 1.6.5.1 added Vacuum Pipes (now Obsidian Transport Pipes), the Land Marks and the Filler
opening section · 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.
- ^asie writes that Eloraam, FlowerChild and SpaceToad created Minecraft Forge, an API on top of Risugami's ModLoader for patches several mods needed, and that SpaceToad made its first commits on 12 July 2011.Dev blogasie, "BuildCraft History and Design", 30 January 2015
How we know
Eloraam, FlowerChild and SpaceToad had created an API that was supposed to sit on top of Risugami’s ModLoader and bring inter-mod compatibility for patches required by multiple mods. … the initial commits were put in place by SpaceToad on July 12, 2011
on 1.7.2.1 and Forge · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^On 1 November 2011 SpaceToad announced 2.2.5 as the first 2.x version flagged stable, ended the 1.x line, and opened BuildCraft's distribution rights "under certain restrictions": the sources had been available but not open source by the OSI definition. He added that no mod pack had yet been allowed to include BuildCraft except Arrgh's.Dev blogSpaceToad, "Going Wide Open", 1 November 2011
How we know
This version will be the first of the 2.x branch flagged as stable – and 1.x is now officially discontinued. … though the sources are available, BuildCraft was not completely Open-Source according to the OSI definition. … the BuildCraft distributions rights which were closed are now opened, under certain restrictions. … there is no mod pack that is allowed to contain BuildCraft (except Arrgh’s one who asked permission very early on)
"Going Wide Open", 1 November 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.
- ^ abSpaceToad's 3.0.0 preview of 8 November 2011 explains the gates: asked for detector pipes, he found them "boring" and built "a flexible generalized detection platform" with a multiplexed signal system instead. He released the alpha on 13 November 2011, with four signals carried on pipes, and advised staying with 2.2.x for regular play.Dev blogSpaceToad, "A preview of BuildCraft 3.0.0", 8 November 2011 · SpaceToad, "BuildCraft 3.0.0 Alpha released", 13 November 2011
How we know
But detector pipes are boring. So what I did instead is a flexible generalized detection platform, able to detect all kind of events (including items passing through pipes of course, but also chests state, tanks, machines) supported by a comprehensive multiplexed signal system.
"A preview of BuildCraft 3.0.0", 8 November 2011 · archived copy ↗ I’m happy to release an alpha version of the work I made on the gates.
"BuildCraft 3.0.0 Alpha released", 13 November 2011 · archived copy ↗ There is now 4 signals that can be carried on pipes, and converted back and forth to redstone.
changelog, "#2 implement signal on pipes" · archived copy ↗ I strongly advise to stay with BuildCraft 2.2.x for any regular game.
"BuildCraft 3.0.0 Alpha released", 13 November 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.
- ^SpaceToad previewed 3.1.0 on 28 December 2011. By asie's account it was billed as "completing the initial mission of BuildCraft" and brought blueprints and blueprint libraries.Dev blogSpaceToad, "BuildCraft 3.1.0 Preview", 28 December 2011 · asie, "BuildCraft History and Design", 30 January 2015
How we know
Here comes a preview of the next feature set, to be released in a few weeks with a version tagged 3.1.0:
"BuildCraft 3.1.0 Preview", 28 December 2011 · archived copy ↗ SpaceToad released BuildCraft 3.1.0, “completing the initial mission of BuildCraft!” - specifically, he introduced blueprints and Blueprint Libraries.
on 3.1.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.
- ^On 2 March 2012 SpaceToad handed BuildCraft to Krapht and SirSengir, makers of the Logistic Pipes and Forestry mods, saying he could no longer give the 15 or more hours a week he had put in over the project's first nine months. He wrote that the project had been designed from the start to be community-driven, which was a main reason it had been open source.Dev blogSpaceToad, "Handing over BuildCraft development", 2 March 2012 · SirSengir, "BuildCraft", Minecraft Forum, 22 April 2012
How we know
I’m no more able to commit to the 15+ hours of work per week on BuildCraft that I have been putting together over the first 9 months of the project. … From the very beginning, this project has been designed to be community driven. This was one of the main reason why it has been Open-Source to start with … Krapht and SirSengir have volunteer to take over and co-lead the project. You probably know them from the amazing work they’ve done on the Logistic Pipes and Forestry mods.
"Handing over BuildCraft development", 2 March 2012 · archived copy ↗ It was created by Spacetoad and is currently maintained by Krapht and SirSengir
opening post, SirSengir, 22 April 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.
- ^SpaceToad's Patreon page of December 2014 says he had made Minecraft mods since April 2011 and, after a long time off, came back in 2014 to lead BuildCraft's development again.Dev blogSpaceToad, Patreon page, 2014
How we know
My name is SpaceToad, and I've been a Minecraft mod developer since April 2011. After a long time off, I came back in 2014, working again in the community. I'm currently leading the development of the mod I initially created: BuildCraft.
profile text · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^SpaceToad's Minecraft Forum thread for BuildCraft ran to 991 pages by January 2012.Dev blogSpaceToad, "BuildCraft", Minecraft Forum, 25 April 2011revised
How we know
991 Pages
thread header · 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.
- ^BuildCraft's CurseForge page showed 43,997,544 downloads in July 2026, counting only that page's files.WebBuildcraft on CurseForge
How we know
43,997,544
Details, Downloads · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abTeam 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.
- ^asie names Krapht’s Logistics Pipes among the most notable BuildCraft addons, adding a routing system that supplies and provides items.Dev blogasie, "BuildCraft History and Design", 30 January 2015
How we know
Krapht’s Logistics Pipes came out - one of the most notable BuildCraft addons, adding a routing system for supplying and providing items intelligently.
on the 2.2 branch · 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 2015 asie, then a BuildCraft developer, credited the mod with "the first pipes, quarries and builders", and named gates and the filler among its features, quite a few of which he said other mods hadn't replicated.Dev blogasie, "BuildCraft History and Design", 30 January 2015revised
How we know
BuildCraft who brought the first pipes, quarries and builders; BuildCraft gave us programmable Robots, which, unlike turtles, were somewhat accessible to the common man, Gates, the Filler and many other features, of which quite a few were not replicated in other mods to the present day.
design views · 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 2.2.4 the wooden transport pipe is the one that takes items out: powered by an engine, it pulls from one slot of the inventory it faces as many items as it holds energy, one item per unit and at most a stack, and puts them into the pipe. Blocks named in the config's
woodenPipe.exclusionlist, empty by default, aren't pulled from. It stores at most 64, and energy it hasn't spent drains, 64 a tick. A two-slot inventory gives from its first slot to a pipe above or below and its second to the sides; a furnace's top, bottom and sides give its three slots.CodeBuildCraft 2.2.4revisedHow we know
42 powerProvider.configure(50, 1, 64, 1, 64); 43 powerProvider.configurePowerPerdition(64, 1);
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java lines 41–43 at 0a20887 · upstream ↗ 79 if (powerProvider.energyStored <= 0) { 80 return; ⋮ 88 return; ⋮ 102 return; ⋮ 108 ItemStack stack = checkExtract(inventory, true, 109 pos.orientation.reverse()); ⋮ 113 return; ⋮ 118 pos.orientation.reverse()); ⋮ 125 ((PipeTransportItems) transport).entityEntering(entity, 126 entityPos.orientation);
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java lines 78–127 at 0a20887 · upstream ↗ 91 .getOrCreateProperty("woodenPipe.exclusion", 92 Configuration.BLOCK_PROPERTY, ""); ⋮ 94 PipeLogicWood.excludedBlocks = exclusionList.value.split(",");
buildcraft/common/net/minecraft/src/BuildCraftTransport.java lines 90–94 at 0a20887 · upstream ↗ 69 for (String excluded : excludedBlocks) { 70 if (excluded.equals (block.getBlockName()) 71 || excluded.equals (Integer.toString(block.blockID))) {
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicWood.java lines 64–76 at 0a20887 · upstream ↗ 156 } else if (inventory.getSizeInventory() == 2) { 157 // This is an input-output inventory ⋮ 161 if (from == Orientations.YNeg || from == Orientations.YPos) { 162 slotIndex = 0; 163 } else { 164 slotIndex = 1; ⋮ 173 } else { ⋮ 177 } else if (inventory.getSizeInventory() == 3) { 178 // This is a furnace-like inventory ⋮ 183 slotIndex = 0; ⋮ 185 slotIndex = 1; 186 } else { ⋮
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java lines 156–199 at 0a20887 · upstream ↗ 225 return inventory.decrStackSize(k, powerProvider 226 .useEnergy(1, slot.stackSize, true));
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java lines 215–235 at 0a20887 · upstream ↗ 68 energyStored -= powerLoss; ⋮ 81 public int useEnergy (int min, int max, boolean doUse) {
buildcraft/common/net/minecraft/src/buildcraft/api/PowerProvider.java lines 64–99 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.
- ^ 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 2.2.4 an item in a transport pipe travels to the pipe's center and there picks an exit: any side but the one it came in by that leads to a pipe carrying items, a machine that accepts them, or an inventory with room for it. With several, it takes one at random (single-player) or by a fixed hash of the item's id and the pipe's position (multiplayer). With none, the item drops out of the pipe into the world, and an item that reaches a full inventory drops what doesn't fit.CodeBuildCraft 2.2.4
How we know
119 if (Orientations.values()[o] != pos.orientation.reverse() 120 && container.pipe.outputOpen(Orientations.values()[o])) { ⋮ 159 if (entity instanceof IPipeEntry) { 160 return true; 161 } else if (entity instanceof TileGenericPipe) { ⋮ 164 return pipe.pipe.transport instanceof PipeTransportItems; 165 } else if (entity instanceof IInventory) { 166 if (new StackUtil(item.item).checkAvailableSlot((IInventory) entity, ⋮ 168 return true;
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java lines 114–173 at 0a20887 · upstream ↗ 225 Orientations nextOrientation = resolveDestination (data); ⋮ 227 if (nextOrientation == Orientations.Unknown) { 228 scheduleRemoval(data.item); ⋮ 230 EntityItem dropped = data.item.toEntityItem(data.orientation);
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java lines 225–237 at 0a20887 · upstream ↗ 263 } else if (tile instanceof IInventory) { ⋮ 271 data.item.remove(); 272 } else { 273 data.item.item = utils.items; 274 EntityItem dropped = data.item.toEntityItem(data.orientation);
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java lines 263–282 at 0a20887 · upstream ↗ 377 if (listOfPossibleMovements.size() == 0) { 378 return Orientations.Unknown; 379 } else { ⋮ 382 if (APIProxy.isClient(worldObj) || APIProxy.isServerSide()) { 383 i = Math.abs(data.item.entityId + xCoord + yCoord + zCoord 384 + data.item.deterministicRandomization) 385 % listOfPossibleMovements.size(); 386 } else { 387 i = worldObj.rand.nextInt(listOfPossibleMovements.size());
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java lines 373–393 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 2.2.4 an iron pipe lets items out by one side only; each change in the redstone signal it gets turns that side to the next one that faces a pipe, machine or inventory, skipping wooden pipes. A diamond pipe has nine filter slots for each of its six sides: an item goes to a side whose filter holds its kind (ignoring wear on tools), and only when none does to a side with an empty filter.CodeBuildCraft 2.2.4
How we know
28 if (currentPower != lastPower) { 29 switchPosition(); ⋮ 55 if (((TileGenericPipe) tile).pipe.logic instanceof PipeLogicWood) { 56 continue; ⋮ 60 if (tile instanceof IPipeEntry 61 || tile instanceof IInventory 62 || tile instanceof ILiquidContainer 63 || tile instanceof TileGenericPipe) {
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicIron.java lines 24–69 at 0a20887 · upstream ↗ 112 public boolean outputOpen(Orientations to) { 113 return to.ordinal() == worldObj 114 .getBlockMetadata(xCoord, yCoord, zCoord);
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicIron.java lines 112–115 at 0a20887 · upstream ↗ 58 for (int slot = 0; slot < 9; ++slot) { 59 ItemStack stack = logic.getStackInSlot(dir.ordinal() * 9 + slot); ⋮ 67 if ((Item.itemsList[item.item.itemID].isDamageable())) { 68 filteredOrientations.add(dir); ⋮ 71 filteredOrientations.add(dir); ⋮ 75 if (!foundFilter) { 76 defaultOrientations.add(dir); ⋮ 79 if(filteredOrientations.size() != 0) { 80 return filteredOrientations; 81 } else { 82 return defaultOrientations;
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsDiamond.java lines 46–84 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.
- ^Items in 2.2.4 pipes move at a base speed of 0.01 block a tick. Entering most pipes takes 0.01 off any speed above that; a stone pipe takes off only 0.005. A golden pipe with a redstone signal sets an entering item's speed to 20 times the base, 0.2 block a tick, which the pipes after it then wear down.CodeBuildCraft 2.2.4
How we know
37 public static float pipeNormalSpeed = 0.01F;buildcraft/common/net/minecraft/src/buildcraft/core/Utils.java line 37 at 0a20887 · upstream ↗ 65 if (item.speed > Utils.pipeNormalSpeed) { 66 item.speed = item.speed - Utils.pipeNormalSpeed; ⋮ 69 if (item.speed < Utils.pipeNormalSpeed) { 70 item.speed = Utils.pipeNormalSpeed;
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java lines 63–72 at 0a20887 · upstream ↗ 37 item.speed = item.speed - Utils.pipeNormalSpeed / 2.0F;buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsStone.java lines 35–43 at 0a20887 · upstream ↗ 70 if (worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) { 71 item.speed = Utils.pipeNormalSpeed * 20F;
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsGold.java lines 69–73 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.
- ^With 2.2.4's default connection rules (
pipes.alwaysConnectfalse), stone and cobblestone pipes don't join each other, and a golden transport pipe doesn't join another golden one. By 3.2.2 (December 2012) the golden pipe's rule is commented out.CodeBuildCraft 2.2.4 · BuildCraft 3.2.2How we know
75 public static boolean PIPES_ALWAYS_CONNECT = false;buildcraft/common/net/minecraft/src/buildcraft/core/DefaultProps.java line 75 at 0a20887 · upstream ↗ 27 return (pipe2 == null || !(pipe2.logic instanceof PipeLogicCobblestone))buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicStone.java lines 24–29 at 0a20887 · upstream ↗ 27 return (pipe2 == null || !(pipe2.logic instanceof PipeLogicStone))buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicCobblestone.java lines 24–29 at 0a20887 · upstream ↗ 56 return (pipe2 == null || !(pipe2.logic instanceof PipeLogicGold))buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsGold.java lines 53–58 at 0a20887 · upstream ↗ 51// return (pipe2 == null || !(pipe2.logic instanceof PipeLogicGold)) && super.isPipeConnected(tile);common/buildcraft/transport/pipes/PipeItemsGold.java lines 48–51 at 40eb640 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^BuildCraft 2.2.4 (October 2011) has three families of pipe. Seven transport pipes carry items (wooden, cobblestone, stone, iron, golden, diamond, obsidian); five waterproof pipes carry liquids and are made from a transport pipe of the same material and a pipe sealant made of green dye; three conductive pipes carry energy and are made from a transport pipe and redstone.CodeBuildCraft 2.2.4
How we know
115 CoreProxy.addName(pipeWaterproof, "Pipe Waterproof"); ⋮ 118 Character.valueOf('W'), new ItemStack(Item.dyePowder, 1, 2)});
buildcraft/common/net/minecraft/src/BuildCraftTransport.java lines 113–118 at 0a20887 · upstream ↗ 124 pipeItemsWood = createPipe (DefaultProps.PIPE_ITEMS_WOOD_ID, PipeItemsWood.class, "Wooden Transport Pipe", Block.planks, Block.glass, Block.planks); ⋮ 130 pipeItemsObsidian = createPipe (DefaultProps.PIPE_ITEMS_OBSIDIAN_ID, PipeItemsObsidian.class, "Obsidian Transport Pipe", Block.obsidian, Block.glass, Block.obsidian); ⋮ 132 pipeLiquidsWood = createPipe (DefaultProps.PIPE_LIQUIDS_WOOD_ID, PipeLiquidsWood.class, "Wooden Waterproof Pipe", pipeWaterproof, pipeItemsWood, null); ⋮ 136 pipeLiquidsGold = createPipe (DefaultProps.PIPE_LIQUIDS_GOLD_ID, PipeLiquidsGold.class, "Golden Waterproof Pipe", pipeWaterproof, pipeItemsGold, null); ⋮ 140 pipePowerWood = createPipe (DefaultProps.PIPE_POWER_WOOD_ID, PipePowerWood.class, "Wooden Conductive Pipe", Item.redstone, pipeItemsWood, null); ⋮ 144 pipePowerGold = createPipe(DefaultProps.PIPE_POWER_GOLD_ID, PipePowerGold.class, "Golden Conductive Pipe", Item.redstone, pipeItemsGold, null);
buildcraft/common/net/minecraft/src/BuildCraftTransport.java lines 124–144 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 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 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.
- ^By BuildCraft 3.2.2 (December 2012) the engine's screen names the unit: output in "MJ/t" and the store in "MJ". The 2.2.4 code counts the same energy as a bare integer.CodeBuildCraft 3.2.2 · BuildCraft 2.2.4 · asie, "BuildCraft History and Design", 30 January 2015
How we know
40 fontRenderer.drawString(engine.getCurrentOutput() + " MJ/t", x + 22, y + 32, textColour); ⋮ 42 fontRenderer.drawString(engine.getEnergyStored() + " MJ", x + 22, y + 56, textColour);
common/buildcraft/energy/gui/GuiEngine.java lines 40–42 at 40eb640 · upstream ↗ 23 public int energy;buildcraft/common/net/minecraft/src/buildcraft/energy/Engine.java line 23 at 0a20887 · upstream ↗ The major revolution here was the addition of a power system - Minecraft Joules.
opening section, 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 2.2.4 a quarry with no landmarks marking an area digs a default box 11 blocks square and 5 high, set beside the quarry on the side opposite its face. It first builds a frame around the box (25 energy per block placed or cleared), then digs out the 9 × 9 inside. Landmarks give a box of their own, at least 3 × 3, raised to 5 high if lower.CodeBuildCraft 2.2.4
How we know
435 a = Utils.getNearbyAreaProvider(worldObj, xCoord, yCoord, ⋮ 440 a = new DefaultAreaProvider(xCoord, yCoord, zCoord, xCoord + 10, 441 yCoord + 4, zCoord + 10); ⋮ 450 if (xSize < 3 || zSize < 3) { 451 a = new DefaultAreaProvider(xCoord, yCoord, zCoord, xCoord + 10, 452 yCoord + 4, zCoord + 10); ⋮ 463 if (ySize < 5) { 464 ySize = 5; ⋮ 471 Orientations o = Orientations.values()[worldObj.getBlockMetadata( 472 xCoord, yCoord, zCoord)].reverse();
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 431–495 at 0a20887 · upstream ↗ 164 // configuration for building phase 165 powerProvider.configure(20, 25, 25, 25, MAX_ENERGY); ⋮ 167 if (powerProvider.useEnergy(25, 25, true) != 25) {
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 163–169 at 0a20887 · upstream ↗ 513 bluePrint.setBlockId(i, it * (box.sizeY() - 1), 0, 514 BuildCraftFactory.frameBlock.blockID); ⋮ 516 BuildCraftFactory.frameBlock.blockID);
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 511–520 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 2.2.4 the quarry digs from the top of its box down, a layer at a time in a back-and-forth sweep, always taking the highest block left. It passes over air, water and snow, and a column that reaches bedrock or lava is closed below. Each block goes into an adjacent chest if there is room, else into an adjacent pipe, else it is thrown up into the air from the quarry. The arm's travel is what costs energy: each tick 2 plus a thousandth of the store, moving faster the more it spends, out of a 7,000-energy store.CodeBuildCraft 2.2.4
How we know
215 for (int searchY = yCoord + 3; searchY >= 0; --searchY) { ⋮ 218 if (searchY % 2 == 0) { ⋮ 248 if (blockDig (blockId)) { 249 blockedColumns [searchX][searchZ] = true; 250 } else if (canDig(blockId)) {
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 206–267 at 0a20887 · upstream ↗ 400 return blockID == Block.bedrock.blockID 401 || blockID == Block.lavaStill.blockID 402 || blockID == Block.lavaMoving.blockID; ⋮ 406 return !blockDig(blockID) 407 && !API.softBlock(blockID) 408 && blockID != Block.snow.blockID;
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 399–409 at 0a20887 · upstream ↗ 50 return blockId == 0 51 || blockId == Block.waterStill.blockID 52 || blockId == Block.waterMoving.blockID
buildcraft/common/net/minecraft/src/buildcraft/api/API.java lines 49–54 at 0a20887 · upstream ↗ 361 // First, try to add to a nearby chest ⋮ 369 added = Utils.addToRandomPipeEntry(this, ⋮ 373 // Last, throw the object away
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 361–392 at 0a20887 · upstream ↗ 56 public static int MAX_ENERGY = 7000;buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java line 56 at 0a20887 · upstream ↗ 118 int energyToUse = 2 + powerProvider.energyStored / 1000; ⋮ 124 arm.doMove(0.015 + (float) energy / 200F);
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java lines 116–126 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.
- ^The 2.2.4 Automatic Crafting Table holds a 3 × 3 pattern and crafts one result each time a pipe pulls from it. A slot with more than one item gives one; a slot down to its last item keeps it and takes one from an adjacent chest or other plain inventory instead, and if none has it the table crafts nothing. Items piped in go only to slots already holding that item, the emptiest first. It needs no power of its own; the wooden pipe pulling from it does.CodeBuildCraft 2.2.4
How we know
102 autoWorkbenchBlock = new BlockAutoWorkbench( 103 Integer.parseInt(autoWorkbenchId.value)); ⋮ 111 "Automatic Crafting Table");
buildcraft/common/net/minecraft/src/BuildCraftFactory.java lines 102–111 at 0a20887 · upstream ↗ 185 if (stack.stackSize <= 1) { 186 StackPointer pointer = getNearbyItem(stack.itemID, 187 stack.getItemDamage()); ⋮ 189 if (pointer == null) { 190 resetPointers(pointerList); ⋮ 192 return null; ⋮ 199 pointer.item = this.decrStackSize(i, 1); ⋮ 209 ItemStack resultStack = CraftingManager.getInstance().findMatchingRecipe( 210 craftMatrix); ⋮ 213 resetPointers(pointerList);
buildcraft/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java lines 165–228 at 0a20887 · upstream ↗ 277 if (tile instanceof ISpecialInventory) { 278 // Don't get stuff out of ISpecialInventory for now / we wouldn't ⋮ 281 } else if (tile instanceof IInventory) {
buildcraft/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java lines 270–281 at 0a20887 · upstream ↗ 136 && stackInInventory.itemID == stack.itemID 137 && stackInInventory.getItemDamage() == stack.getItemDamage() 138 && stackInInventory.stackSize < minSimilar) {
buildcraft/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java lines 125–157 at 0a20887 · upstream ↗ 137 if (inventory instanceof ISpecialInventory) { 138 // TAKE INTO ACCOUNT SPECIAL INVENTORIES!!! 139 return ((ISpecialInventory) inventory).extractItem(doRemove, from);
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java lines 137–140 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 2.2.4 oil is placed as the world is generated, chunk by chunk. A desert chunk has a 3% chance of a small surface pool (radius 3) on sand. Any chunk has a 0.2% chance of a medium deposit, a ball of oil of radius 4 to 7 centered at height 20 to 29, with a surface pool of radius 5 to 9 and oil filling the shaft between, and a 0.005% chance of a large one, radius 8 to 16, with a surface pool of radius 20 to 39 and a column of oil standing up to 30 blocks above the ground.CodeBuildCraft 2.2.4revised
How we know
36 if (biomegenbase == BiomeGenBase.desert && rand.nextFloat() > 0.97) { 37 // Generate a small desert deposit ⋮ 48 generateSurfaceDeposit(world, i, j, k, 3); ⋮ 56 boolean mediumDeposit = rand.nextDouble() <= (0.2 / 100.0); 57 boolean largeDeposit = rand.nextDouble() <= (0.005 / 100.0);
buildcraft/common/net/minecraft/src/buildcraft/energy/OilPopulate.java lines 36–57 at 0a20887 · upstream ↗ 66 int cx = x, cy = 20 + rand.nextInt(10), cz = z; ⋮ 71 r = 8 + rand.nextInt(9); 72 } else if (mediumDeposit) { 73 r = 4 + rand.nextInt(4); ⋮ 103 generateSurfaceDeposit(world, cx, y, cz, 104 20 + rand.nextInt(20)); 105 } else if (mediumDeposit) { 106 generateSurfaceDeposit(world, cx, y, cz, 107 5 + rand.nextInt(5)); ⋮ 113 ymax = (y + 30 < 128 ? y + 30 : 128); 114 } else if (mediumDeposit) { 115 ymax = (y + 4 < 128 ? y + 4 : 128);
buildcraft/common/net/minecraft/src/buildcraft/energy/OilPopulate.java lines 63–127 at 0a20887 · upstream ↗ 157 public static void generateSurface(World world, Random random, int i, int j) { 158 OilPopulate.doPopulate(world, i, j);
buildcraft/common/net/minecraft/src/BuildCraftEnergy.java lines 157–159 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.
- ^The 2.2.4 pump lowers a tube to the liquid below it and, for 10 energy, takes up one block of it as a bucket's worth (1,000 units), removing the block from the world, then pushes the liquid into an adjacent tank, pipe or machine that holds liquids. A pumped deposit is used up.CodeBuildCraft 2.2.4
How we know
84 if (powerProvider.useEnergy(10, 10, true) == 10) { 85 index = getNextIndexToPump(true); 86 worldObj.setBlockWithNotify(index.i, index.j, index.k, 0); 87 internalLiquid = internalLiquid += API.BUCKET_VOLUME;
buildcraft/common/net/minecraft/src/buildcraft/factory/TilePump.java lines 74–93 at 0a20887 · upstream ↗ 124 if (tile instanceof ILiquidContainer) { 125 internalLiquid -= ((ILiquidContainer) tile).fill(
buildcraft/common/net/minecraft/src/buildcraft/factory/TilePump.java lines 115–132 at 0a20887 · upstream ↗ 22 public static final int BUCKET_VOLUME = 1000;buildcraft/common/net/minecraft/src/buildcraft/api/API.java line 22 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.
- ^The 2.2.4 refinery has one recipe: one unit of oil into one unit of fuel for 10 energy, at most one unit a tick, so a bucket of fuel costs 10,000 energy and at least 1,000 ticks. Its two input tanks and its output tank hold four buckets each.CodeBuildCraft 2.2.4
How we know
141 TileRefinery.addRecipe(new RefineryRecipe(oilStill.blockID, 1, 0, 0, 142 10, fuel.shiftedIndex, 1, 1));
buildcraft/common/net/minecraft/src/BuildCraftEnergy.java lines 141–142 at 0a20887 · upstream ↗ 22 public RefineryRecipe(int sourceId1, int sourceQty1, int sourceId2, 23 int sourceQty2, int energy, int resultId, int resultQty, int delay) {
buildcraft/common/net/minecraft/src/buildcraft/factory/RefineryRecipe.java lines 22–23 at 0a20887 · upstream ↗ 33 public static int LIQUID_PER_SLOT = API.BUCKET_VOLUME * 4;buildcraft/common/net/minecraft/src/buildcraft/factory/TileRefinery.java line 33 at 0a20887 · upstream ↗ 262 if (!time.markTimeIfDelay(worldObj, currentRecipe.delay)) { 263 return; ⋮ 266 int energyUsed = powerProvider.useEnergy(currentRecipe.energy, 267 currentRecipe.energy, true); ⋮ 269 if (energyUsed != 0) { 270 result.liquidId = currentRecipe.resultId; 271 result.quantity += currentRecipe.resultQty; 272 src1.quantity -= currentRecipe.sourceQty1;
buildcraft/common/net/minecraft/src/buildcraft/factory/TileRefinery.java lines 256–277 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 2.2.4 the combustion engine makes 5 energy a tick on fuel, 2 on oil and 1 on lava. Each unit burns for 1 tick plus the fuel's burn time over 1,000, which comes to 255,000 energy a bucket of fuel, 22,000 a bucket of oil and 3,000 a bucket of lava. Refining a bucket of oil costs 10,000, so the refinery multiplies the oil's worth in the engine more than tenfold.CodeBuildCraft 2.2.4
How we know
144 API.ironEngineFuel.put(Block.lavaStill.blockID, new IronEngineFuel( 145 oilStill.blockID, 1, 2000)); 146 API.ironEngineFuel.put(oilStill.blockID, new IronEngineFuel( 147 oilStill.blockID, 2, 10000)); 148 API.ironEngineFuel.put(fuel.shiftedIndex, new IronEngineFuel( 149 fuel.shiftedIndex, 5, 50000));
buildcraft/common/net/minecraft/src/BuildCraftEnergy.java lines 144–149 at 0a20887 · upstream ↗ 17 public IronEngineFuel (int fuelId, int powerPerCycle, int totalBurningTime) {buildcraft/common/net/minecraft/src/buildcraft/api/IronEngineFuel.java line 17 at 0a20887 · upstream ↗ 85 if(burnTime > 0 || liquidQty > 0) { 86 if (burnTime > 0) { 87 burnTime--; 88 } else { 89 liquidQty--; 90 burnTime = currentFuel.totalBurningTime / API.BUCKET_VOLUME; ⋮ 93 addEnergy(currentFuel.powerPerCycle);
buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java lines 85–94 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.
- ^By 3.2.2 (December 2012) the values have changed: the combustion engine makes 6 energy a tick on fuel (burn time 100,000), 3 on oil and 1 on lava (20,000 each), and the refinery takes 12 energy a unit.CodeBuildCraft 3.2.2
How we know
148 RefineryRecipe.registerRefineryRecipe(new RefineryRecipe(new LiquidStack(oilStill.blockID, 1, 0), null, new LiquidStack(fuel.shiftedIndex, 1, 0), 12, 1)); ⋮ 151 IronEngineFuel.fuels.add(new IronEngineFuel(Block.lavaStill.blockID, 1, 20000)); 152 IronEngineFuel.fuels.add(new IronEngineFuel(oilStill.blockID, 3, 20000)); 153 IronEngineFuel.fuels.add(new IronEngineFuel(fuel.shiftedIndex, 6, 100000));
common/buildcraft/BuildCraftEnergy.java lines 148–153 at 40eb640 · upstream ↗ 48 public RefineryRecipe(LiquidStack ingredient1, LiquidStack ingredient2, LiquidStack result, int energy, int delay) {common/buildcraft/api/recipes/RefineryRecipe.java line 48 at 40eb640 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^BuildCraft 3.1.2 (January 2012) has seven gates, made on the assembly table from a redstone chipset (and pipe wire, above the plain Gate) and fixed onto a pipe: the Gate (one trigger and action), Iron AND and OR Gates (two), Gold AND and OR Gates (four, with a parameter each) and Diamond AND and OR Gates (eight, with parameters). The assembly costs 20,000 energy for the Gate, 40,000 for iron, 80,000 for gold and 160,000 for diamond.CodeBuildCraft 3.1.2
How we know
81 new ItemStack[] { new ItemStack(redstoneChipset, 1, 0) }, 82 20000, new ItemStack(BuildCraftTransport.pipeGate, 1, 0))); 83 CoreProxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 0), 84 "Gate"); ⋮ 88 new ItemStack(BuildCraftTransport.redPipeWire) }, 40000, ⋮ 94 new ItemStack(BuildCraftTransport.redPipeWire) }, 40000, ⋮ 97 "Iron OR Gate"); ⋮ 102 new ItemStack(BuildCraftTransport.bluePipeWire) }, 80000, ⋮ 109 new ItemStack(BuildCraftTransport.bluePipeWire) }, 80000, ⋮ 112 "Gold OR Gate"); ⋮ 119 new ItemStack(BuildCraftTransport.yellowPipeWire) }, 160000, ⋮ 128 new ItemStack(BuildCraftTransport.yellowPipeWire) }, 160000, ⋮
common/net/minecraft/src/BuildCraftSilicon.java lines 80–131 at 972c1c9 · upstream ↗ 186 if (pipe.gateKind == GateKind.Single) { 187 nbEntries = 1; ⋮ 192 } else if (pipe.gateKind == GateKind.AND_2 || pipe.gateKind == GateKind.OR_2) { 193 nbEntries = 2; ⋮ 201 } else if (pipe.gateKind == GateKind.AND_3 || pipe.gateKind == GateKind.OR_3) { 202 nbEntries = 4; ⋮ 217 slots [position] = new TriggerParameterSlot (78, 36 + 18 * k, pipe.getTriggerParameter(position - 8)); ⋮ 221 } else if (pipe.gateKind == GateKind.AND_4 || pipe.gateKind == GateKind.OR_4) { 222 nbEntries = 8;
buildcraft_client/src/net/minecraft/src/buildcraft/transport/GuiGateInterface.java lines 186–222 at 972c1c9 · upstream ↗ 371 else if (entityplayer.getCurrentEquippedItem().itemID == BuildCraftTransport.pipeGate.shiftedIndex) { 372 if (!pipe.hasInterface()) {
common/net/minecraft/src/buildcraft/transport/BlockGenericPipe.java lines 371–395 at 972c1c9 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In 3.1.2 a gate pairs each trigger with an action. Pairs that name the same action are combined, with AND on an AND gate and OR on the others, and each action whose result is true fires: a redstone signal out of the pipe, a signal on one of the four pipe wires, or a command such as on, off or loop to the machine next to the pipe. Triggers read the pipe (empty, items, liquids, energy, a wire signal on or off), an adjacent inventory or tank (empty, contains, has space, full), a machine (active or not), redstone in, and an engine's heat stage.CodeBuildCraft 3.1.2
How we know
604 if (!actions.containsKey(action.id)) { 605 actions.put(action.id, isNearbyTriggerActive(trigger, parameter)); 606 } else { 607 if (gateKind == GateKind.AND_2 608 || gateKind == GateKind.AND_3 609 || gateKind == GateKind.AND_4) { 610 actions.put(action.id, actions.get(action.id) 611 && isNearbyTriggerActive(trigger, parameter)); 612 } else { 613 actions.put(action.id, actions.get(action.id) 614 || isNearbyTriggerActive(trigger, parameter)); ⋮ 624 if (BuildCraftAPI.actions [i] instanceof ActionRedstoneOutput) { ⋮
common/net/minecraft/src/buildcraft/transport/Pipe.java lines 583–638 at 972c1c9 · upstream ↗ 85 public static Trigger triggerMachineActive = new TriggerMachine(DefaultProps.TRIGGER_MACHINE_ACTIVE, true); ⋮ 90 public static Trigger triggerFullInventory = new TriggerInventory(DefaultProps.TRIGGER_FULL_INVENTORY, TriggerInventory.State.Full); ⋮ 94 public static Trigger triggerFullLiquid = new TriggerLiquidContainer(DefaultProps.TRIGGER_FULL_LIQUID, TriggerLiquidContainer.State.Full); 95 public static Trigger triggerRedstoneActive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_ACTIVE, true); ⋮ 98 public static Action actionRedstone = new ActionRedstoneOutput(DefaultProps.ACTION_REDSTONE); 99 public static Action actionOn = new ActionMachineControl(DefaultProps.ACTION_ON, Mode.On); 100 public static Action actionOff = new ActionMachineControl(DefaultProps.ACTION_OFF, Mode.Off); 101 public static Action actionLoop = new ActionMachineControl(DefaultProps.ACTION_LOOP, Mode.Loop);
common/net/minecraft/src/BuildCraftCore.java lines 85–101 at 972c1c9 · upstream ↗ 100 public static Trigger triggerPipeEmpty = new TriggerPipeContents(DefaultProps.TRIGGER_PIPE_EMPTY, Kind.Empty); ⋮ 103 public static Trigger triggerPipeEnergy = new TriggerPipeContents(DefaultProps.TRIGGER_PIPE_ENERGY, Kind.ContainsEnergy); 104 public static Trigger triggerRedSignalActive = new TriggerPipeSignal(DefaultProps.TRIGGER_RED_SIGNAL_ACTIVE, true, IPipe.WireColor.Red); ⋮ 113 public static Action actionRedSignal = new ActionSignalOutput(DefaultProps.ACTION_RED_SIGNAL, IPipe.WireColor.Red);
common/net/minecraft/src/BuildCraftTransport.java lines 100–116 at 972c1c9 · upstream ↗ 56 public static Trigger triggerBlueEngineHeat = new TriggerEngineHeat(DefaultProps.TRIGGER_BLUE_ENGINE_HEAT, EnergyStage.Blue);common/net/minecraft/src/BuildCraftEnergy.java lines 56–59 at 972c1c9 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In 3.1.2 a pipe can carry any of four wires, red, blue, green and yellow, each a separate signal. A gate sending on a wire sets it to 255 in its pipe; each pipe takes the strongest of its wired neighbors less 1, so a signal fades out about 255 pipes from its source, and spreads only through pipes that carry the same color.CodeBuildCraft 3.1.2
How we know
61 public boolean [] wireSet = new boolean [] {false, false, false, false};common/net/minecraft/src/buildcraft/transport/Pipe.java lines 60–61 at 972c1c9 · upstream ↗ 236 CoreProxy.addName(redPipeWire, "Red Pipe Wire"); ⋮ 245 CoreProxy.addName(bluePipeWire, "Blue Pipe Wire"); ⋮ 254 CoreProxy.addName(greenPipeWire, "Green Pipe Wire"); ⋮ 263 CoreProxy.addName(yellowPipeWire, "Yellow Pipe Wire");
common/net/minecraft/src/BuildCraftTransport.java lines 236–263 at 972c1c9 · upstream ↗ 333 if (isWireConnectedTo(tile, color)) { 334 foundBiggerSignal |= receiveSignal( 335 tilePipe.pipe.signalStrength[color.ordinal()] - 1, 336 color); ⋮ 342 if (!foundBiggerSignal && signalStrength [color.ordinal()] != 0) { 343 signalStrength [color.ordinal()]= 0;
common/net/minecraft/src/buildcraft/transport/Pipe.java lines 323–344 at 972c1c9 · upstream ↗ 367 if (!wireSet [color.ordinal()]) { 368 return; ⋮ 373 if (broadcastSignal [color.ordinal()]) { 374 receiveSignal(255, color); 375 } else { 376 readNearbyPipesSignal(color); ⋮ 381 if (signalStrength [color.ordinal()] > 1) { ⋮ 389 && tilePipe.pipe.wireSet [color.ordinal()]) { 390 if (isWireConnectedTo(tile, color)) { 391 tilePipe.pipe.receiveSignal( 392 signalStrength[color.ordinal()] - 1, color);
common/net/minecraft/src/buildcraft/transport/Pipe.java lines 366–398 at 972c1c9 · upstream ↗ 407 if (signal >= signalStrength [color.ordinal()] && signal != 0) { 408 signalStrength [color.ordinal()] = signal;
common/net/minecraft/src/buildcraft/transport/Pipe.java lines 400–408 at 972c1c9 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Friday Facts #50 (2014) says "Factorio was inspired by Buildcraft". In 2013 kovarex wrote that a topic he had started (linked to mod-buildcraft.com's forums) made him start thinking about making his own game.Dev blogFFF-50 · kovarex, "How it all begun" forum post, 6 October 2013revised
How we know
Factorio was inspired by Buildcraft, this game might be inspired by Factorio and it is in fact honour for us.
Automation genre · archived copy ↗ This topic I started (1 year, 7 months ago) made me start thinking about making my own game.
first post, kovarex, 6 October 2013 · 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.
- ^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 a February 2013 plan for Factorio's energy, kovarex proposed oil, saying he didn't want to copy BuildCraft's oil concept completely but liked it a lot, and that processing oil into fuel or other products "as in build craft" would be nice. It is a proposal; the post doesn't say what shipped.Dev blogkovarex, "Electric energy" forum post, 7 February 2013
How we know
I don't want to ripoff the buildcraft oil concept completely … but I like it a lot. … Processing oil to fuel or other products as in build craft would be nice
first post, kovarex, 7 February 2013, under "Oil" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^BuildCraft 2.2.4's oil chain is short: a pump lifts oil block by block out of a deposit it empties, the refinery's one recipe turns oil into the same amount of fuel, and the combustion engine burns the fuel for energy. Factorio 2.1.23's crude oil is an infinite resource a pumpjack draws from a well; the refinery's basic recipe makes petroleum gas alone, its advanced recipe splits crude oil and water into heavy oil, light oil and petroleum gas, and cracking recipes in the chemistry category, which the chemical plant runs, turn heavy oil into light oil and light oil into gas.CodeBuildCraft 2.2.4 · factorio-data 2.1.23revised
How we know
84 if (powerProvider.useEnergy(10, 10, true) == 10) { 85 index = getNextIndexToPump(true); 86 worldObj.setBlockWithNotify(index.i, index.j, index.k, 0);
buildcraft/common/net/minecraft/src/buildcraft/factory/TilePump.java lines 84–87 at 0a20887 · upstream ↗ 141 TileRefinery.addRecipe(new RefineryRecipe(oilStill.blockID, 1, 0, 0, 142 10, fuel.shiftedIndex, 1, 1)); ⋮ 148 API.ironEngineFuel.put(fuel.shiftedIndex, new IronEngineFuel( 149 fuel.shiftedIndex, 5, 50000));
buildcraft/common/net/minecraft/src/BuildCraftEnergy.java lines 141–149 at 0a20887 · upstream ↗ 220 name = "crude-oil", ⋮ 223 category = "basic-fluid", ⋮ 226 infinite = true, ⋮ 241 name = "crude-oil",
base/prototypes/entity/resources.lua lines 218–242 at 39dbd0f · upstream ↗ 1867 name = "pumpjack", ⋮ 1871 resource_categories = {"basic-fluid"},
base/prototypes/entity/mining-drill.lua lines 1867–1871 at 39dbd0f · upstream ↗ 153 name = "basic-oil-processing", ⋮ 163 {type = "fluid", name = "petroleum-gas", amount = 45, fluidbox_index = 3} ⋮ 178 name = "advanced-oil-processing", ⋮ 184 {type = "fluid", name = "water", amount = 50}, 185 {type = "fluid", name = "crude-oil", amount = 100} ⋮ 189 {type = "fluid", name = "heavy-oil", amount = 25}, 190 {type = "fluid", name = "light-oil", amount = 45}, 191 {type = "fluid", name = "petroleum-gas", amount = 55}
base/prototypes/recipe.lua lines 153–229 at 39dbd0f · upstream ↗ 234 name = "heavy-oil-cracking", 235 categories = {"chemistry"}, ⋮ 264 name = "light-oil-cracking", 265 categories = {"chemistry"}, ⋮ 295 categories = {"chemistry"}, ⋮ 324 categories = {"chemistry"},
base/prototypes/recipe.lua lines 234–344 at 39dbd0f · upstream ↗ 8857 crafting_categories = {"chemistry"},base/prototypes/entity/entities.lua lines 8849–8857 at 39dbd0f · 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.
- ^Friday Facts #416 (2024) says that in the discussions on Factorio 2.0's fluids, Rseding proposed an algorithm "very close to" one from the Minecraft mod Thermal Expansion by Team CoFH, in which pipes, underground pipes, and storage tanks merge into fluid "segments".Dev blogFriday Facts #416
How we know
Rseding proposed an algorithm very close to one he had played with several times, an algorithm from the Minecraft mod Thermal Expansion by team CoFH: Pipes, underground pipes, and storage tanks are merged into fluid "segments".
The new algorithm · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
Sources
Code
- SpaceToad. 2011. “BuildCraft 1.4.1 source.” GitHub (BuildCraft/BuildCraft). Commit 1a31ccd. BuildCraft/BuildCraft @ 1a31ccd · licence, all uses
- SpaceToad. 2011. “BuildCraft 2.2.4 source.” GitHub (BuildCraft/BuildCraft). Commit 0a20887. BuildCraft/BuildCraft @ 0a20887 · licence, all uses
- SpaceToad, Krapht, SirSengir, cpw, CovertJaguar, Nevercast, and contributors. 2012. “BuildCraft 3.2.2 source.” GitHub (BuildCraft/BuildCraft). Commit 40eb640. BuildCraft/BuildCraft @ 40eb640 · licence, all uses
- SpaceToad. 2012. “BuildCraft 3.1.2 source.” GitHub (BuildCraft/BuildCraft). Commit 972c1c9. BuildCraft/BuildCraft @ 972c1c9 · 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
Primary
- SpaceToad. 2011. “BuildCraft (original Minecraft Forum thread).” Mapping and Modding > Minecraft Mods. Minecraft Forum. original · archived · licence, all uses
- Siekierka, Adrian. 2015. “BuildCraft History and Design.” asie's blog. original · archived · licence, all uses
- SpaceToad. 2011. “BuildCraft official site (2011).” BuildCraft. original · archived · licence, all uses
- SpaceToad. 2011. “Going Wide Open.” mod-buildcraft.com blog. BuildCraft. original · archived · licence, all uses
- SpaceToad. 2011. “A preview of BuildCraft 3.0.0.” mod-buildcraft.com blog. BuildCraft. original · archived · licence, all uses
- SpaceToad. 2011. “BuildCraft 3.0.0 Alpha released.” mod-buildcraft.com blog. BuildCraft. original · archived · licence, all uses
- SpaceToad. 2011. “BuildCraft 3.1.0 Preview.” mod-buildcraft.com blog. BuildCraft. original · archived · licence, all uses
- SpaceToad. 2012. “Handing over BuildCraft development.” mod-buildcraft.com blog. BuildCraft. original · archived · licence, all uses
- SirSengir. 2012. “BuildCraft - Blueprints, Pipes, Quarries, Autocrafting, Logic Gates and more!” Mapping and Modding > Minecraft Mods. Minecraft Forum. original · archived · licence, all uses
- SpaceToad. 2014. “SpaceToad is creating BuildCraft.” Patreon. original · archived · licence, all uses
- Team CoFH. 2026. “About Team CoFH.” Team CoFH. original · archived · licence, all uses
- Kovařík, Michal. 2014. “Friday Facts #50 - Growing secretly.” Wube Software (factorio.com). original · archived · licence, all uses
- Kovařík, Michal. 2013. “How it all begun — Factorio forums, Off topic.” Factorio forums. 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
- Kovařík, Michal. 2013. “Electric energy — Factorio forums, Development Proposals.” Factorio forums. original · archived · licence, all uses
- raiguard. 2024. “Friday Facts #416 - Fluids 2.0.” Factorio blog. Wube Software. original · archived · licence, all uses
Secondary
- BuildCraft team and CurseForge. 2026. “Buildcraft - Minecraft Mods - CurseForge.” CurseForge. original · archived · licence, all uses