data/claims/buildcraft.yamlBuildCraft's machines in released source (1.4.1, 2.2.4, 3.1.2 and 3.2.2, 2011–2012)
Game: BuildCraft.
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. buildcraft/first-pipes
minecraft/net/minecraft/src/mod_BuildCraft.java#L94-L140ModLoader.AddName(woodenPipeBlock.setBlockName("woodenPipe"), "Wooden Pipe");
…
ModLoader.AddName(stonePipeBlock.setBlockName("stonePipe"), "Stone Pipe");
…
ModLoader.AddName(ironPipeBlock.setBlockName("ironPipe"), "Iron Pipe");
…
ModLoader.AddName(goldenPipeBlock.setBlockName("goldenPipe"), "Golden Pipe");
…
ModLoader.AddName(diamondPipeBlock.setBlockName("diamondPipe"), "Diamond Pipe");
…
ModLoader.AddName(miningWellBlock.setBlockName("miningWellBlock"), "Iron Mining Well");
…
…Checked by claude, 2026-10-26 — read the names registered in mod_BuildCraft.java at tag 1.4.1 and listed the tag's tree: no engine, oil, refinery or workbench classesCited by: BuildCraft, Production chain
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. buildcraft/pipe-set
buildcraft/common/net/minecraft/src/BuildCraftTransport.java#L113-L118CoreProxy.addName(pipeWaterproof, "Pipe Waterproof");
…
Character.valueOf('W'), new ItemStack(Item.dyePowder, 1, 2)});BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/BuildCraftTransport.java#L124-L144pipeItemsWood = createPipe (DefaultProps.PIPE_ITEMS_WOOD_ID, PipeItemsWood.class, "Wooden Transport Pipe", Block.planks, Block.glass, Block.planks);
…
pipeItemsObsidian = createPipe (DefaultProps.PIPE_ITEMS_OBSIDIAN_ID, PipeItemsObsidian.class, "Obsidian Transport Pipe", Block.obsidian, Block.glass, Block.obsidian);
…
pipeLiquidsWood = createPipe (DefaultProps.PIPE_LIQUIDS_WOOD_ID, PipeLiquidsWood.class, "Wooden Waterproof Pipe", pipeWaterproof, pipeItemsWood, null);
…
pipeLiquidsGold = createPipe (DefaultProps.PIPE_LIQUIDS_GOLD_ID, PipeLiquidsGold.class, "Golden Waterproof Pipe", pipeWaterproof, pipeItemsGold, null);
…
pipePowerWood = createPipe (DefaultProps.PIPE_POWER_WOOD_ID, PipePowerWood.class, "Wooden Conductive Pipe", Item.redstone, pipeItemsWood, null);
…
pipePowerGold = createPipe(DefaultProps.PIPE_POWER_GOLD_ID, PipePowerGold.class, "Golden Conductive Pipe", Item.redstone, pipeItemsGold, null);Checked by claude, 2026-10-26 — read the createPipe calls (seven item, five liquid, three power: wood, stone, gold) and the sealant's recipe, one dyePowder of damage 2 (cactus green in Minecraft's dye order)The waterproof set is wooden, cobblestone, stone, iron and golden; the conductive set wooden, stone and golden.
Cited by: BuildCraft, Fluid network
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. buildcraft/item-routing
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java#L114-L173if (Orientations.values()[o] != pos.orientation.reverse()
&& container.pipe.outputOpen(Orientations.values()[o])) {
…
if (entity instanceof IPipeEntry) {
return true;
} else if (entity instanceof TileGenericPipe) {
…
return pipe.pipe.transport instanceof PipeTransportItems;
} else if (entity instanceof IInventory) {
if (new StackUtil(item.item).checkAvailableSlot((IInventory) entity,BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java#L225-L237Orientations nextOrientation = resolveDestination (data);
if (nextOrientation == Orientations.Unknown) {
scheduleRemoval(data.item);
EntityItem dropped = data.item.toEntityItem(data.orientation);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java#L263-L282} else if (tile instanceof IInventory) {
…
data.item.remove();
} else {
data.item.item = utils.items;
EntityItem dropped = data.item.toEntityItem(data.orientation);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java#L373-L393if (listOfPossibleMovements.size() == 0) {
return Orientations.Unknown;
…
if (APIProxy.isClient(worldObj) || APIProxy.isServerSide()) {
i = Math.abs(data.item.entityId + xCoord + yCoord + zCoord
+ data.item.deterministicRandomization)
% listOfPossibleMovements.size();
} else {
i = worldObj.rand.nextInt(listOfPossibleMovements.size());Checked by claude, 2026-10-26 — read moveSolids (center reached → resolveDestination; Unknown → drop), getPossibleMovements and canReceivePipeObjects, the end-of-pipe hand-off to an inventory (the remainder drops), and resolveDestination's two pickersBouncing back the way it came is allowed only where allowBouncing is set (L131), which no pipe here enables; a pipe's own hook can narrow the list (the diamond pipe's filter, the iron pipe's one open side).
Cited by: BuildCraft, Fluid network, Production chain
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. buildcraft/item-speed
Value
{
"baseSpeed": 0.01,
"poweredGoldMultiplier": 20
}buildcraft/common/net/minecraft/src/buildcraft/core/Utils.java#L37public static float pipeNormalSpeed = 0.01F;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportItems.java#L63-L72if (item.speed > Utils.pipeNormalSpeed) {
item.speed = item.speed - Utils.pipeNormalSpeed;
}
if (item.speed < Utils.pipeNormalSpeed) {
item.speed = Utils.pipeNormalSpeed;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsStone.java#L35-L43item.speed = item.speed - Utils.pipeNormalSpeed / 2.0F;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsGold.java#L69-L73if (worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) {
item.speed = Utils.pipeNormalSpeed * 20F;Checked by claude, 2026-10-26 — read entityEntering (readjustSpeed first, then the pipe's entityEntered hook), the default readjust, the stone pipe's half-step readjust and the golden pipe's hook; the golden pipe readjusts by the default before its hook sets 0.2Cited by: BuildCraft
With 2.2.4's default connection rules (pipes.alwaysConnect false), 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. buildcraft/pipe-connections
buildcraft/common/net/minecraft/src/buildcraft/core/DefaultProps.java#L75public static boolean PIPES_ALWAYS_CONNECT = false;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicStone.java#L24-L29return (pipe2 == null || !(pipe2.logic instanceof PipeLogicCobblestone))BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicCobblestone.java#L24-L29return (pipe2 == null || !(pipe2.logic instanceof PipeLogicStone))BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsGold.java#L53-L58return (pipe2 == null || !(pipe2.logic instanceof PipeLogicGold))BuildCraft 3.2.2 source · common/buildcraft/transport/pipes/PipeItemsGold.java#L48-L51// return (pipe2 == null || !(pipe2.logic instanceof PipeLogicGold)) && super.isPipeConnected(tile);Checked by claude, 2026-10-26 — read both logic classes' isPipeConnected and the golden item pipe's override at 2.2.4, the config default, and the same override commented out at 3.2.2The config comment at BuildCraftTransport.java L88 reads "set to false to deactivate pipe connection rules", the reverse of what the code does: true skips the rules. Why golden pipes refused each other, and when the rule went, isn't in the code.
Cited by: BuildCraft
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.exclusion list, 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. buildcraft/wooden-pipe
buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java#L41-L43powerProvider.configure(50, 1, 64, 1, 64);
powerProvider.configurePowerPerdition(64, 1);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java#L78-L127if (powerProvider.energyStored <= 0) {
return;
…
ItemStack stack = checkExtract(inventory, true,
pos.orientation.reverse());
…
((PipeTransportItems) transport).entityEntering(entity,
entityPos.orientation);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/BuildCraftTransport.java#L90-L94.getOrCreateProperty("woodenPipe.exclusion",
Configuration.BLOCK_PROPERTY, "");
PipeLogicWood.excludedBlocks = exclusionList.value.split(",");BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicWood.java#L64-L76for (String excluded : excludedBlocks) {
if (excluded.equals (block.getBlockName())
|| excluded.equals (Integer.toString(block.blockID))) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java#L156-L199} else if (inventory.getSizeInventory() == 2) {
// This is an input-output inventory
…
if (from == Orientations.YNeg || from == Orientations.YPos) {
slotIndex = 0;
} else {
slotIndex = 1;
…
} else if (inventory.getSizeInventory() == 3) {
// This is a furnace-like inventoryBuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java#L215-L235return inventory.decrStackSize(k, powerProvider
.useEnergy(1, slot.stackSize, true));BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/api/PowerProvider.java#L64-L99energyStored -= powerLoss;
…
public int useEnergy (int min, int max, boolean doUse) {Checked by claude, 2026-10-26 — read doWork, checkExtract's branches (special, sided, two-slot, three-slot, generic: first non-empty slot) and useEnergy (returns the whole store up to max); configure is latency, min and max received, activation, max stored; perdition 64 every 1 tickUnder the default pneumatic power framework the 50-tick latency is set to 0 (PneumaticPowerProvider.java L16-L22), so the pipe acts whenever it holds energy. If that framework fails to load, BuildCraft falls back to a redstone framework (BuildCraftCore.java L100-L106), not covered here. A special inventory (the automatic crafting table) answers through its own extractItem instead.
Cited by: BuildCraft, Production chain
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. buildcraft/iron-and-diamond-pipes
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicIron.java#L24-L69if (currentPower != lastPower) {
switchPosition();
…
if (((TileGenericPipe) tile).pipe.logic instanceof PipeLogicWood) {
continue;
…
if (tile instanceof IPipeEntry
|| tile instanceof IInventory
|| tile instanceof ILiquidContainer
|| tile instanceof TileGenericPipe) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeLogicIron.java#L112-L115public boolean outputOpen(Orientations to) {
return to.ordinal() == worldObj
.getBlockMetadata(xCoord, yCoord, zCoord);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsDiamond.java#L46-L84for (int slot = 0; slot < 9; ++slot) {
ItemStack stack = logic.getStackInSlot(dir.ordinal() * 9 + slot);
…
if ((Item.itemsList[item.item.itemID].isDamageable())) {
filteredOrientations.add(dir);
…
if (!foundFilter) {
defaultOrientations.add(dir);
…
if(filteredOrientations.size() != 0) {
return filteredOrientations;
} else {
…Checked by claude, 2026-10-26 — read the iron logic's switchPower, switchPosition and outputOpen, and the diamond pipe's filterPossibleMovementsThe diamond pipe's comment says a kind entered in several slots of one side makes that side likelier, since each match adds the side again before the random pick.
Cited by: BuildCraft, Production chain
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. buildcraft/conductive-pipes
buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportPower.java#L36public double powerResitance = 0.01;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportPower.java#L83-L127double totalWatt = internalPower [i];
…
double watts = (totalWatt / div * powerQuery [j]);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/PipeTransportPower.java#L200-L212internalNextPower[from.ordinal()] += val * (1 - powerResitance);
if (internalNextPower [from.ordinal()] >= 1000) {
worldObj.createExplosion(null, xCoord, yCoord, zCoord, 2);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipePowerGold.java#L20((PipeTransportPower) transport).powerResitance = 0.001;Checked by claude, 2026-10-26 — read updateEntity's share-out by powerQuery, receiveEnergy's resistance and explosion, and the golden pipe's resistance; the stone pipe sets none, so keeps 0.01The wooden conductive pipe is where engines feed in (a power receptor storing up to 1,000, PipePowerWood.java L35); its own hook isn't read here.
Cited by: BuildCraft, Power network
BuildCraft 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. buildcraft/engines
buildcraft/common/net/minecraft/src/BuildCraftEnergy.java#L109-L111CoreProxy.addName(new ItemStack (engineBlock, 1, 0), "Redstone Engine");
CoreProxy.addName(new ItemStack (engineBlock, 1, 1), "Steam Engine");
CoreProxy.addName(new ItemStack (engineBlock, 1, 2), "Combustion Engine");BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineWood.java#L16-L54maxEnergy = 1000;
…
if (tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, tile.yCoord, tile.zCoord)) {
if ((tile.worldObj.getWorldTime() % 20) == 0) {
energy++;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineStone.java#L28-L106maxEnergy = 10000;
maxEnergyExtracted = 100;
…
if(burnTime > 0) {
burnTime--;
addEnergy(1);
}
if (burnTime == 0 && tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord,
…
return 300;
…
if (i == Item.coal.shiftedIndex) {
…BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L38-L39maxEnergy = 100000;
maxEnergyExtracted = 500;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/Engine.java#L26public int maxEnergyExtracted = 1;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/TileEngine.java#L84-L131if (engine.progress > 0.5 && progressPart == 1) {
…
int extracted = engine.extractEnergy(
receptor.getPowerProvider().minEnergyReceived,
receptor.getPowerProvider().maxEnergyReceived, true);
…
} else if (isPowered) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineStone.java#L44-L57case Blue:
return 0.02F;
…
case Red:
return 0.16F;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L80-L85if (tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord,
tile.yCoord, tile.zCoord)) {
if(burnTime > 0 || liquidQty > 0) {Checked by claude, 2026-10-26 — read each engine's store, extraction cap and energy source (the steam engine's burnTime counts down unconditionally, the signal is tested only to light the next item; the combustion engine's burn is inside the signal test), Engine.extractEnergy (capped at maxEnergyExtracted), and TileEngine.updateEntity: a stroke starts only while powered and hands energy over at mid-stroke; piston speed by the four energy stages (Engine.computeEnergyStage, quarters of the store)The steam engine burns what Minecraft's furnace would through CoreProxy.addFuel for items not listed. Out of signal an engine loses 1 energy a tick (Engine.java L64-L71). The combustion engine's stages follow its heat, not its store (EngineIron.java L142-L154).
Cited by: BuildCraft, Power network
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. buildcraft/engine-explosions
buildcraft/common/net/minecraft/src/buildcraft/energy/Engine.java#L42-L96} else if (energy / (double) maxEnergy * 100.0 <= 100.0) {
energyStage = EnergyStage.Red;
} else {
energyStage = EnergyStage.Explosion;
…
public void addEnergy (int addition) {
energy += addition;
if (getEnergyStage() == EnergyStage.Explosion) {
tile.worldObj.createExplosion(null, tile.xCoord, tile.yCoord,
tile.zCoord, explosionRange());BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineStone.java#L36-L38return 4;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L22-L48public static int MAX_HEAT = 100000;
public static int COOLANT_THRESHOLD = 49000;
…
return 8;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L93-L94addEnergy(currentFuel.powerPerCycle);
heat += currentFuel.powerPerCycle;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L120-L154if (heat > COOLANT_THRESHOLD) {
int extraHeat = heat - COOLANT_THRESHOLD;
if (coolantQty > extraHeat) {
coolantQty -= extraHeat;
heat = COOLANT_THRESHOLD;
…
if (heat > 0 && !tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord,
tile.yCoord, tile.zCoord)) {
if (heat >= 10) {
heat -= 10;
…
} else if (heat <= MAX_HEAT) {
…BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L162-L165if (id == Block.waterStill.blockID) {
return fillCoolant (from, quantity, id, doFill);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineWood.java#L49-L52energy++;Checked by claude, 2026-10-26 — read addEnergy's explosion test against the stage (in burn() addEnergy runs before heat += powerPerCycle, so the test sees the previous tick's heat; the coolant step holds 49,000 only when coolantQty > extraHeat, else it subtracts what water is left), the steam engine's store-based stages and the combustion engine's heat-based override, its coolant step and unpowered cooling, its fill (water goes to the coolant tank), and the redstone engine's direct energy++Cited by: BuildCraft, Power network
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. buildcraft/minecraft-joules
common/buildcraft/energy/gui/GuiEngine.java#L40-L42fontRenderer.drawString(engine.getCurrentOutput() + " MJ/t", x + 22, y + 32, textColour);
…
fontRenderer.drawString(engine.getEnergyStored() + " MJ", x + 22, y + 56, textColour);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/Engine.java#L23public int energy;BuildCraft History and Design · opening section, on 2.0.0The major revolution here was the addition of a power system - Minecraft Joules.Checked by claude, 2026-10-26 — read the 3.2.2 engine GUI's labels and the 2.2.4 Engine's int energy; asie's history names the unit Minecraft JoulesCited by: BuildCraft
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. buildcraft/oil-deposits
buildcraft/common/net/minecraft/src/buildcraft/energy/OilPopulate.java#L36-L57if (biomegenbase == BiomeGenBase.desert && rand.nextFloat() > 0.97) {
// Generate a small desert deposit
…
generateSurfaceDeposit(world, i, j, k, 3);
…
boolean mediumDeposit = rand.nextDouble() <= (0.2 / 100.0);
boolean largeDeposit = rand.nextDouble() <= (0.005 / 100.0);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/OilPopulate.java#L63-L127int cx = x, cy = 20 + rand.nextInt(10), cz = z;
…
r = 8 + rand.nextInt(9);
} else if (mediumDeposit) {
r = 4 + rand.nextInt(4);
…
generateSurfaceDeposit(world, cx, y, cz,
20 + rand.nextInt(20));
} else if (mediumDeposit) {
generateSurfaceDeposit(world, cx, y, cz,
5 + rand.nextInt(5));
…
…BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/BuildCraftEnergy.java#L157-L159public static void generateSurface(World world, Random random, int i, int j) {
OilPopulate.doPopulate(world, i, j);Checked by claude, 2026-10-26 — read doPopulate: the desert roll, the two independent deposit rolls, the sphere fill, the surface pool radius (5–9 medium, 20–39 large) and the column from the surface to ymax, with oil filling every block below the surface down to the sphere"Chunk by chunk" is ModLoader's generateSurface hook, which Minecraft calls once per chunk it populates; that call isn't in this source. A pool's radius is the reach of generateSurfaceDeposit, whose blocks are placed at a chance that falls toward the edge (L132-L140), so the radius is an upper bound. The medium and large rolls are independent; when both succeed, the large deposit's sizes are used.
Cited by: BuildCraft
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. buildcraft/pump
buildcraft/common/net/minecraft/src/buildcraft/factory/TilePump.java#L74-L93if (powerProvider.useEnergy(10, 10, true) == 10) {
index = getNextIndexToPump(true);
worldObj.setBlockWithNotify(index.i, index.j, index.k, 0);
internalLiquid = internalLiquid += API.BUCKET_VOLUME;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TilePump.java#L115-L132if (tile instanceof ILiquidContainer) {
internalLiquid -= ((ILiquidContainer) tile).fill(BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/api/API.java#L22public static final int BUCKET_VOLUME = 1000;Checked by claude, 2026-10-26 — read updateEntity: the tube's descent, the 10-energy pump step that sets the block to 0 (air) and adds 1,000, and the hand-off to adjacent liquid containersCited by: BuildCraft
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. buildcraft/refinery
Value
{
"oilIn": 1,
"fuelOut": 1,
"energy": 10,
"delayTicks": 1
}buildcraft/common/net/minecraft/src/BuildCraftEnergy.java#L141-L142TileRefinery.addRecipe(new RefineryRecipe(oilStill.blockID, 1, 0, 0,
10, fuel.shiftedIndex, 1, 1));BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/RefineryRecipe.java#L22-L23public RefineryRecipe(int sourceId1, int sourceQty1, int sourceId2,
int sourceQty2, int energy, int resultId, int resultQty, int delay) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileRefinery.java#L33public static int LIQUID_PER_SLOT = API.BUCKET_VOLUME * 4;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileRefinery.java#L256-L277if (!time.markTimeIfDelay(worldObj, currentRecipe.delay)) {
return;
}
int energyUsed = powerProvider.useEnergy(currentRecipe.energy,
currentRecipe.energy, true);
if (energyUsed != 0) {
result.liquidId = currentRecipe.resultId;
result.quantity += currentRecipe.resultQty;
src1.quantity -= currentRecipe.sourceQty1;Checked by claude, 2026-10-26 — read the one addRecipe call in BuildCraftEnergy against RefineryRecipe's argument order, the slot size, and updateEntity's once-per-delay stepCited by: BuildCraft, Production chain
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. buildcraft/combustion-fuels
Value
{
"fuel": 255000,
"oil": 22000,
"lava": 3000
}buildcraft/common/net/minecraft/src/BuildCraftEnergy.java#L144-L149API.ironEngineFuel.put(Block.lavaStill.blockID, new IronEngineFuel(
oilStill.blockID, 1, 2000));
API.ironEngineFuel.put(oilStill.blockID, new IronEngineFuel(
oilStill.blockID, 2, 10000));
API.ironEngineFuel.put(fuel.shiftedIndex, new IronEngineFuel(
fuel.shiftedIndex, 5, 50000));BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/api/IronEngineFuel.java#L17public IronEngineFuel (int fuelId, int powerPerCycle, int totalBurningTime) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/energy/EngineIron.java#L85-L94if(burnTime > 0 || liquidQty > 0) {
if (burnTime > 0) {
burnTime--;
} else {
liquidQty--;
burnTime = currentFuel.totalBurningTime / API.BUCKET_VOLUME;
}
addEnergy(currentFuel.powerPerCycle);Checked by claude, 2026-10-26 — read burn(): the tick that draws a unit also adds energy, then burnTime ticks follow, so a unit lasts 1 + total/1000 ticks (fuel 51, oil 11, lava 3) at powerPerCycle each, times 1,000 units a bucketThe products are this set's arithmetic on the cited lines, not figures BuildCraft states. Engine output is still capped at 500 a stroke and heat limits a run without water (engine-explosions).
Cited by: BuildCraft
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. buildcraft/fuel-values-3-2-2
common/buildcraft/BuildCraftEnergy.java#L148-L153RefineryRecipe.registerRefineryRecipe(new RefineryRecipe(new LiquidStack(oilStill.blockID, 1, 0), null, new LiquidStack(fuel.shiftedIndex, 1, 0), 12, 1));
…
IronEngineFuel.fuels.add(new IronEngineFuel(Block.lavaStill.blockID, 1, 20000));
IronEngineFuel.fuels.add(new IronEngineFuel(oilStill.blockID, 3, 20000));
IronEngineFuel.fuels.add(new IronEngineFuel(fuel.shiftedIndex, 6, 100000));BuildCraft 3.2.2 source · common/buildcraft/api/recipes/RefineryRecipe.java#L48public RefineryRecipe(LiquidStack ingredient1, LiquidStack ingredient2, LiquidStack result, int energy, int delay) {Checked by claude, 2026-10-26 — read the 3.2.2 refinery recipe against its LiquidStack constructor and the three fuel registrations; when they changed between the tags isn't readCited by: BuildCraft
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. buildcraft/quarry-area
buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L431-L495a = Utils.getNearbyAreaProvider(worldObj, xCoord, yCoord,
…
a = new DefaultAreaProvider(xCoord, yCoord, zCoord, xCoord + 10,
yCoord + 4, zCoord + 10);
…
if (xSize < 3 || zSize < 3) {
…
if (ySize < 5) {
ySize = 5;
…
Orientations o = Orientations.values()[worldObj.getBlockMetadata(
xCoord, yCoord, zCoord)].reverse();BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L163-L169// configuration for building phase
powerProvider.configure(20, 25, 25, 25, MAX_ENERGY);
if (powerProvider.useEnergy(25, 25, true) != 25) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L511-L520bluePrint.setBlockId(i, it * (box.sizeY() - 1), 0,
BuildCraftFactory.frameBlock.blockID);Checked by claude, 2026-10-26 — read setBoundaries (landmark area or the 11 × 5 × 11 default, offset from the quarry by the reverse of its facing), doWork's building phase and the frame blueprint on the box's edges; findTarget searches sizeX − 2 by sizeZ − 2 columnsCited by: BuildCraft
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. buildcraft/quarry-digging
Value
{
"maxEnergy": 7000
}buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L206-L267for (int searchY = yCoord + 3; searchY >= 0; --searchY) {
…
if (searchY % 2 == 0) {
…
if (blockDig (blockId)) {
blockedColumns [searchX][searchZ] = true;
} else if (canDig(blockId)) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L399-L409return blockID == Block.bedrock.blockID
|| blockID == Block.lavaStill.blockID
|| blockID == Block.lavaMoving.blockID;
…
return !blockDig(blockID)
&& !API.softBlock(blockID)
&& blockID != Block.snow.blockID;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/api/API.java#L49-L54return blockId == 0
|| blockId == Block.waterStill.blockID
|| blockId == Block.waterMoving.blockIDBuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L361-L392// First, try to add to a nearby chest
…
added = Utils.addToRandomPipeEntry(this,
…
// Last, throw the object awayBuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L56public static int MAX_ENERGY = 7000;BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileQuarry.java#L116-L126int energyToUse = 2 + powerProvider.energyStored / 1000;
…
arm.doMove(0.015 + (float) energy / 200F);Checked by claude, 2026-10-26 — read findTarget's serpentine search with blocked columns, blockDig and canDig with API.softBlock, positionReached's chest, pipe, throw order, and updateEntity's arm energy; the digging phase itself spends nothing at doWorkThe thrown item leaves from the quarry block's own position with an upward kick (L376-L391). The 3.2.2 changelog's first line is a rewrite of this search ("Refactored quarry algorithm for efficiency to reduce CPU usage", buildcraft_resources/CHANGELOG.txt L3-L4), not read here.
Cited by: BuildCraft
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. buildcraft/auto-workbench
buildcraft/common/net/minecraft/src/BuildCraftFactory.java#L102-L111autoWorkbenchBlock = new BlockAutoWorkbench(
Integer.parseInt(autoWorkbenchId.value));
…
"Automatic Crafting Table");BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java#L165-L228if (stack.stackSize <= 1) {
StackPointer pointer = getNearbyItem(stack.itemID,
stack.getItemDamage());
if (pointer == null) {
resetPointers(pointerList);
return null;
…
pointer.item = this.decrStackSize(i, 1);
…
ItemStack resultStack = CraftingManager.getInstance().findMatchingRecipe(
craftMatrix);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java#L270-L281if (tile instanceof ISpecialInventory) {
// Don't get stuff out of ISpecialInventory for now / we wouldn't
…
} else if (tile instanceof IInventory) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java#L125-L157&& stackInInventory.itemID == stack.itemID
&& stackInInventory.getItemDamage() == stack.getItemDamage()
&& stackInInventory.stackSize < minSimilar) {BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/buildcraft/transport/pipes/PipeItemsWood.java#L137-L140if (inventory instanceof ISpecialInventory) {
// TAKE INTO ACCOUNT SPECIAL INVENTORIES!!!
return ((ISpecialInventory) inventory).extractItem(doRemove, from);Checked by claude, 2026-10-26 — read extractItem (pattern slots, neighbor lookup in the order −x, +x, −y, +y, −z, +z, vanilla recipe match, container items such as buckets put back), getNearbyItemFromOrientation and addItem; the class has no power providerCited by: BuildCraft, Production chain
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. buildcraft/gates
common/net/minecraft/src/BuildCraftSilicon.java#L80-L131new ItemStack[] { new ItemStack(redstoneChipset, 1, 0) },
20000, new ItemStack(BuildCraftTransport.pipeGate, 1, 0)));
CoreProxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 0),
"Gate");
…
new ItemStack(BuildCraftTransport.redPipeWire) }, 40000,
…
"Iron OR Gate");
…
new ItemStack(BuildCraftTransport.bluePipeWire) }, 80000,
…
"Gold OR Gate");
…BuildCraft 3.1.2 source · buildcraft_client/src/net/minecraft/src/buildcraft/transport/GuiGateInterface.java#L186-L222if (pipe.gateKind == GateKind.Single) {
nbEntries = 1;
…
} else if (pipe.gateKind == GateKind.AND_2 || pipe.gateKind == GateKind.OR_2) {
nbEntries = 2;
…
} else if (pipe.gateKind == GateKind.AND_3 || pipe.gateKind == GateKind.OR_3) {
nbEntries = 4;
…
slots [position] = new TriggerParameterSlot (78, 36 + 18 * k, pipe.getTriggerParameter(position - 8));
…
} else if (pipe.gateKind == GateKind.AND_4 || pipe.gateKind == GateKind.OR_4) {
…BuildCraft 3.1.2 source · common/net/minecraft/src/buildcraft/transport/BlockGenericPipe.java#L371-L395else if (entityplayer.getCurrentEquippedItem().itemID == BuildCraftTransport.pipeGate.shiftedIndex) {
if (!pipe.hasInterface()) {Checked by claude, 2026-10-26 — read the seven assembly recipes and names in BuildCraftSilicon, the gate screen's slot layouts per kind (parameter slots appear from the gold gates on), and BlockGenericPipe's gate placement by item damageCited by: BuildCraft
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. buildcraft/gate-logic
common/net/minecraft/src/buildcraft/transport/Pipe.java#L583-L638if (!actions.containsKey(action.id)) {
actions.put(action.id, isNearbyTriggerActive(trigger, parameter));
} else {
if (gateKind == GateKind.AND_2
|| gateKind == GateKind.AND_3
|| gateKind == GateKind.AND_4) {
actions.put(action.id, actions.get(action.id)
&& isNearbyTriggerActive(trigger, parameter));
} else {
actions.put(action.id, actions.get(action.id)
|| isNearbyTriggerActive(trigger, parameter));
…
…BuildCraft 3.1.2 source · common/net/minecraft/src/BuildCraftCore.java#L85-L101public static Trigger triggerMachineActive = new TriggerMachine(DefaultProps.TRIGGER_MACHINE_ACTIVE, true);
…
public static Trigger triggerFullInventory = new TriggerInventory(DefaultProps.TRIGGER_FULL_INVENTORY, TriggerInventory.State.Full);
…
public static Trigger triggerFullLiquid = new TriggerLiquidContainer(DefaultProps.TRIGGER_FULL_LIQUID, TriggerLiquidContainer.State.Full);
public static Trigger triggerRedstoneActive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_ACTIVE, true);
…
public static Action actionRedstone = new ActionRedstoneOutput(DefaultProps.ACTION_REDSTONE);
public static Action actionOn = new ActionMachineControl(DefaultProps.ACTION_ON, Mode.On);
public static Action actionOff = new ActionMachineControl(DefaultProps.ACTION_OFF, Mode.Off);
public static Action actionLoop = new ActionMachineControl(DefaultProps.ACTION_LOOP, Mode.Loop);BuildCraft 3.1.2 source · common/net/minecraft/src/BuildCraftTransport.java#L100-L116public static Trigger triggerPipeEmpty = new TriggerPipeContents(DefaultProps.TRIGGER_PIPE_EMPTY, Kind.Empty);
…
public static Trigger triggerPipeEnergy = new TriggerPipeContents(DefaultProps.TRIGGER_PIPE_ENERGY, Kind.ContainsEnergy);
public static Trigger triggerRedSignalActive = new TriggerPipeSignal(DefaultProps.TRIGGER_RED_SIGNAL_ACTIVE, true, IPipe.WireColor.Red);
…
public static Action actionRedSignal = new ActionSignalOutput(DefaultProps.ACTION_RED_SIGNAL, IPipe.WireColor.Red);BuildCraft 3.1.2 source · common/net/minecraft/src/BuildCraftEnergy.java#L56-L59public static Trigger triggerBlueEngineHeat = new TriggerEngineHeat(DefaultProps.TRIGGER_BLUE_ENGINE_HEAT, EnergyStage.Blue);Checked by claude, 2026-10-26 — read resolveActions (grouping by action id, AND for the AND kinds, OR otherwise, then the three kinds of action) and the trigger and action registrations in BuildCraftCore, BuildCraftTransport and BuildCraftEnergyCited by: BuildCraft
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. buildcraft/pipe-wires
common/net/minecraft/src/buildcraft/transport/Pipe.java#L60-L61public boolean [] wireSet = new boolean [] {false, false, false, false};BuildCraft 3.1.2 source · common/net/minecraft/src/BuildCraftTransport.java#L236-L263CoreProxy.addName(redPipeWire, "Red Pipe Wire");
…
CoreProxy.addName(bluePipeWire, "Blue Pipe Wire");
…
CoreProxy.addName(greenPipeWire, "Green Pipe Wire");
…
CoreProxy.addName(yellowPipeWire, "Yellow Pipe Wire");BuildCraft 3.1.2 source · common/net/minecraft/src/buildcraft/transport/Pipe.java#L323-L344if (isWireConnectedTo(tile, color)) {
foundBiggerSignal |= receiveSignal(
tilePipe.pipe.signalStrength[color.ordinal()] - 1,
color);
…
if (!foundBiggerSignal && signalStrength [color.ordinal()] != 0) {
signalStrength [color.ordinal()]= 0;BuildCraft 3.1.2 source · common/net/minecraft/src/buildcraft/transport/Pipe.java#L366-L398if (!wireSet [color.ordinal()]) {
return;
}
…
if (broadcastSignal [color.ordinal()]) {
receiveSignal(255, color);
} else {
readNearbyPipesSignal(color);
…
if (signalStrength [color.ordinal()] > 1) {
…
&& tilePipe.pipe.wireSet [color.ordinal()]) {
…BuildCraft 3.1.2 source · common/net/minecraft/src/buildcraft/transport/Pipe.java#L400-L408if (signal >= signalStrength [color.ordinal()] && signal != 0) {
signalStrength [color.ordinal()] = signal;Checked by claude, 2026-10-26 — read updateSignalStateForColor (255 at a broadcasting gate, else readNearbyPipesSignal; pass on strength − 1 to wired, connected neighbors while above 1), receiveSignal (keeps the larger), and the four wire itemsCited by: BuildCraft
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. buildcraft/oil-vs-factorio
buildcraft/common/net/minecraft/src/buildcraft/factory/TilePump.java#L84-L87if (powerProvider.useEnergy(10, 10, true) == 10) {
index = getNextIndexToPump(true);
worldObj.setBlockWithNotify(index.i, index.j, index.k, 0);BuildCraft 2.2.4 source · buildcraft/common/net/minecraft/src/BuildCraftEnergy.java#L141-L149TileRefinery.addRecipe(new RefineryRecipe(oilStill.blockID, 1, 0, 0,
10, fuel.shiftedIndex, 1, 1));
…
API.ironEngineFuel.put(fuel.shiftedIndex, new IronEngineFuel(
fuel.shiftedIndex, 5, 50000));factorio-data: Factorio's Lua prototype definitions, version 2.1.23 · base/prototypes/entity/resources.lua#L218-L242name = "crude-oil",
…
infinite = true,
…
category = "basic-fluid",factorio-data: Factorio's Lua prototype definitions, version 2.1.23 · base/prototypes/entity/mining-drill.lua#L1867-L1871name = "pumpjack",
…
resource_categories = {"basic-fluid"},factorio-data: Factorio's Lua prototype definitions, version 2.1.23 · base/prototypes/recipe.lua#L153-L229name = "basic-oil-processing",
…
{type = "fluid", name = "petroleum-gas", amount = 45, fluidbox_index = 3}
…
name = "advanced-oil-processing",
…
{type = "fluid", name = "water", amount = 50},
{type = "fluid", name = "crude-oil", amount = 100}
…
…
{type = "fluid", name = "heavy-oil", amount = 25},
{type = "fluid", name = "light-oil", amount = 45},
…factorio-data: Factorio's Lua prototype definitions, version 2.1.23 · base/prototypes/recipe.lua#L234-L344name = "heavy-oil-cracking",
categories = {"chemistry"},
…
name = "light-oil-cracking",factorio-data: Factorio's Lua prototype definitions, version 2.1.23 · base/prototypes/entity/entities.lua#L8849-L8857crafting_categories = {"chemistry"},Checked by claude, 2026-10-26 — read BuildCraft's pump step, refinery recipe and fuel registration at 2.2.4, and Factorio's crude-oil resource (category basic-fluid), the pumpjack's resource_categories, the basic and advanced oil-processing recipes, the cracking recipes' chemistry category and the chemical plant's crafting_categories, at or beside the lines factorio-production/crude-oil, oil-refining and cracking-and-chemistry citeFactorio's side is the factorio-production set's claims (crude-oil, oil-refining, cracking-and-chemistry). In February 2013 kovarex said he liked BuildCraft's oil concept and wanted processing "as in build craft" without copying it completely (factorio-lineage/buildcraft-oil); which parts of the shipped chain follow from that isn't stated by Wube.
Cited by: BuildCraft, Production chain