Reactor Column

Reactor Column

alaindustrial:fuel_rod_assembly
NuclearImplementednuclearreactormultiblockfueluraniumsteamfluid-transport

Summary

The Reactor Column is what the reactor is loaded with, and what cools it. A transparent rack for four rods stands inside a reactor room, is filled by right-clicking with a fuel rod in hand, and is emptied with an empty one. It has no menu at all.

Since stage 3 it also has two tanks — water and steam. Water arrives by pipe, boils and carries heat away; steam leaves by pipe. The water level, like the rod count, is visible from outside, on the model itself.

This is the central decision of stage 2 of the epic: the fuel does not sit in a slot, it stands in the room. An empty rack and a full one are told apart from across the floor, "top up the reactor" is an action in the world rather than in a window, and a half-spent core is visible at a glance instead of as a number in a GUI.

It stores items, not a counter

Before stage 4 the rack held a number of rods and one shared "how much is left in the burning one". Exactly two things followed, and a player met both in the first hour: a started rod was destroyed when pulled out (there was nowhere to write down what was left of it), and a burnt-out one vanished — so every refuelling cost a fresh shielding plate, and therefore palladium.

Now the rack holds four items. Both consequences went away with their cause:

BeforeNow
A half-burnt rod was lostcomes back with its durability and carries on from the same point
A burnt-out rod vanishedbecomes a fuel rod cladding and stays standing in the rack
One shared burn counterevery rod carries its own durability (see the rod spec)

How to use it

ActionWhat happens
Right-click with a rod in handthe rod goes into the first free slot, metal sound; in creative the item is not consumed
Right-click with a cladding in handthe same: a casing can be parked in the rack for later
Right-click on a full racknothing is taken — the item stays in hand
Right-click empty-handedthe rack hands one rod back, spent casings first
Right-click with any other itemfalls into the same branch as an empty hand: a rod is taken out anyway
Breaking the blockeverything racked drops, whole and half-burnt alike

The fifth row is not a slip but a forced decision: in 26.2 an InteractionResult.PASS from does not fall through to, so "take a rod out with a pickaxe in hand" would otherwise silently do nothing. It returns TRY_WITH_EMPTY_HAND.

Spent casings come out first

That order is the whole interaction. A player walks up to a worked-out column for the casings, to refill them, and least of all wants to first fish back out the live rods they put in ten minutes ago. The order is fixed: empties first, and only once there are none left, the fuelled ones, top down.

The drop on removal is handled by rather than a player-only break hook: a creeper opening the rack is exactly when losing the contents would hurt most.

Wear is applied to every fuelled rod at once

The controller charges EU/FE against the column, and the column converts them into durability points — on all fuelled rods simultaneously, one point per round.

price of a round = 144 EU/FE x (how many rods carry uranium)

While the banked draw is short of a whole round it is carried to the next tick; as soon as it is enough, every fuelled rod takes +1 damage. A rod that reaches 1000 is replaced by an empty one right there in its slot.

It works that way because "one at a time" was simply untrue: four rods sit in the same neutron flux and all four produce power, yet only one of them aged. The player saw four working rods and one draining bar. The arithmetic did not drift for it: the column still spends exactly one rod's worth of energy per rod, it just takes it out of all of them at once.

The practical consequence: a column of four rods works itself out all at once. For twenty minutes (in a lone rack) all four are full, then all four become casings together. A rack loaded piecemeal evens out too: a fresh rod outlives its half-spent neighbours, because the round is charged against all of them and the ones that drop out stop paying.

Fuel is spent only when the energy is wanted. If the controller's buffer is full and nothing is drawing, the racks do not wear at all — the same principle by which the charge pad spends EU/FE per transfer rather than per tick.

The fill level is visible from outside

The blockstate carries two counters, not one:

PropertyWhat it meansHow it is drawn
rods = 0…4how many rods stand in it at all, casings includedoccupied slots
fuelled = 0…4how many of those carry uraniumlit rods; the rest are dark casings

Two properties are needed not because it looks nicer. With a single counter that counted fuel alone, a worked-out column reported zero — and the casings in it became not only invisible but unreachable: the interaction code read the blockstate to decide whether there was anything to take out. Such a rack could be neither emptied nor refilled, only broken.

The block entity counts its own contents and brings the blockstate into line on every change (syncRods), so the model cannot disagree with what is inside.

Racks join up vertically

Two extra boolean states — up and down — turn on when another rack stands directly above or below. Joined racks lose the cap and the base plate between them and the seam is filled by a connector piece, so a column of three assemblies reads as one tall rack rather than as three boxes stacked on each other. The same trick a cable or a pipe uses in this mod.

The join is not purely cosmetic: fluids travel along it (see "A stack is one vessel"). It does not affect output or heat — adjacency does (see Balance), and the controller counts that on all three axes regardless of how the assembly looks.

The outline follows the model: a lone rack is 12x14x12, one joined above is 12x16x12. Otherwise the selection box of a stacked assembly would hang two pixels below the geometry the player can see.

The states are recomputed in rather than: that is the vanilla hook for exactly this, and it runs on world edits and structure placement too.

Water and steam

Since stage 3 the column has two tanks, and together they are half of the reactor's cooling loop.

TankCapacityWhat it takesWhat it gives outward
Water4000 mB (4 buckets)water onlynothing
Steam4000 mBnothingsteam

The tanks are mirrored on purpose. Water can only be poured in: reactor coolant is not a reserve to borrow from. Allow it to be pumped out and a player would park a pump on a hot core and pull the coolant back, which is both free steam and a meltdown on demand. Steam, conversely, can only be taken: nothing can push it into a column from outside.

The face rule: steam up only, water everywhere else

FaceWhat is published there
Topthe steam tank
The other fivethe water tank

That way one pipe is always unambiguous: one face, one fluid, one direction. And the rule survives stacking, which "steam leaves through the top of every column" would not: the lower columns of a stack have no free top face at all.

A pipe collecting steam must stand above the column in extract mode; a pipe supplying water goes on any other side, in insert mode.

A stack is one vessel; the column next to it is another

The port a pipe talks to reports for the whole vertical stack, not for one block: total amount, total capacity, filled from the bottom up, steam drawn from the top down. Every tick the controller also re-settles the stack's contents — water sinks, steam rises.

Without this a two-block column simply would not fill: water sinks into the bottom block, that block reaches capacity first, and a pipe asking "is there room?" got "no" from a vessel that was half empty, and stopped.

⚠️ Columns standing side by side are separate vessels. The controller used to even the tanks out across the whole room, and one pipe watered the entire hall. That was convenient and untrue: coolant appearing inside a rack nothing is plumbed to reads as a bug however useful it is. Plumb the columns you want cooled; the easiest way is to build them in stacks and pipe into one block of each.

Boiling

The column does not boil water by itself — the controller does, every tick while the reaction runs, with no threshold at all: the water carries away all of the reaction's heat and, on top of that, a twentieth of what has already piled up. While the rods work the room's shell sheds no heat, so the water in the columns is the only thing that cools a running reactor: without it the gauge climbs to an accident. A reactor with enough water sits near zero on the gauge, and amber means "the water is not coping".

One millibucket of water carries = 2 units of heat away and turns into 1 mB of steam — one to one by volume.

Boiling runs into two limits at once: how much water the column holds, and how much room is left in it for steam. A loop choked with steam therefore stops cooling as surely as a dry water tank — the water is there, the gauge is full, and the temperature climbs. That is not a bug; it is the one and only reason the exhaust (steam nozzle) is mandatory.

The water level is visible from outside

The blockstate carries water = 0…4 — quarters of the tank, a separate part of the multipart model. The rounding rule is special: anything above zero shows at least one quarter. A column with a mouthful of water left must not look the same as a dry one — the reactions those two states call for are completely different.

It does not tick

The assembly has a block entity, but no tick of its own. The reactor is one machine, not a floor covered in machines: the controller drives every assembly in its room from a single tick, so a hall with thirty racks costs the server what one block entity costs, not thirty.

The split of duties: the rack is state and the rules for changing it (what stands in the slots, how much is left in the rods, what to hand back when broken); the controller is the schedule.

One practical consequence worth knowing: the controller sweeps the room not every tick but once every = 40 ticks (2 s). A rod inserted by hand enters the calculation on the next sweep — up to two seconds of delay, unnoticeable next to a rod that burns for minutes.

An empty rack no longer drops out of the calculation. All columns go into the controller's list, not just the loaded ones: a column is part of the machine because it stands in the room, not because somebody has fuelled it yet. The old fuel filter left a discharged rack without cooling and out of the settling pass, which is why water pumped into the bottom of a stack never rose past the first loaded column. Adjacency is still counted by fuel: two empty racks side by side accelerate nothing.

How the reactor burns it

StepWhat the controller does
Every 2 ssweeps the room interior, collects all columns, sums the fuelled rods, counts adjacency pairs
Every producing ticksplits the output between columns in proportion to the fuelled rods in each
Inside a columnthe share is converted into durability points and charged against all fuelled rods at once
Every tickre-settles the fluids inside each vertical stack

The remainder of the division goes to the first column with fuel rather than being dropped: a room whose rod count does not divide the output evenly still pays for every EU/FE it made.

On the controller's screen the column shows up on the «Core» tab as part of its vertical stack: how many fuelled rods and spent casings the stack holds, average and worst wear, energy left, water and steam. The energy left is the remaining durability points of every fuelled rod multiplied by the EU/FE per point: the same quantity in which the column pays for its output. A rod at 400 damage out of 1000 shows exactly 600 points of reserve.

Block properties

FieldValue
Shapea rack 12x14x12 (lone), 12x16x12 (joined above) — not a full cube
Occlusion— the casing is transparent and the rods inside have to be drawn
Hardness3.0
Blast resistance6.0
Toolpickaxe
Soundmetal
Blockstatesrods = 0…4, fuelled = 0…4, water = 0…4, up, down
BlockEntityyes, with no tick of its own
NBTthe rack contents as items, CarriedEu (draw not yet charged), Water, Steam (tank contents, mB)

Rod durability lives on the items themselves, so the rack's NBT has no field for it — and there can be no disagreement between "how much is left" and "what is standing there". Only amounts are saved from the tanks: each tank holds exactly one fluid by construction, and a "which one" field could only ever disagree with the code.

The block's hardness is deliberately below the shell's (5.0 / 30.0): the assembly lives inside a protected room and needs no armour of its own — a reactor has to be opened through a wall anyway.

Sound

A running core drones low and steady — the loop — and the sound comes from the fuelled columns themselves, not from the controller: a reactor hall is heard as a room, not as a panel on a wall. Not every column sounds at once, only a few of them; otherwise a densely packed hall would turn into a wall of noise. Inside the room the drone is heard at full strength, outside the shell muffles it, and through an open airlock it spills out. A stopped reactor is silent — including the columns that still hold fuel.

Recipes

Craft — x2 at a time.

I G I I = iron ingot x4
G S G G = reactor glass x4
I G I S = shielding plate x1

The recipe describes the item: glass walls to see the charge through, an iron frame, and a shielding plate at the core. Two per craft, because racks are needed by the dozen and a one-at-a-time recipe would turn loading a hall into workbench drudgery.

Progression

Tier: none (the block has no energy at all). Needs: reactor glass and a shielding plate — that is palladium, and therefore the Nether. Unlocks: the reactor controller producing power. Without a single loaded assembly, a sealed room stays a diagnostic device.

Fuel Rod — what goes into it. Fuel Rod Cladding — what it hands back. Reactor Controller — what burns it and counts its adjacency. Reactor Port — how water gets into the room and steam gets out. Steam Nozzle — where the steam goes, and why boiling stalls without it. Steam — what appears in the column's upper tank. Reactor Glass — half the recipe and the same "see what is inside" idea. Reactor Casing — the walls the rack stands inside.

Crafting

Shaped Crafting
Iron Ingot
Reactor Glass
Iron Ingot
Reactor Glass
Shielding Plate
Reactor Glass
Iron Ingot
Reactor Glass
Iron Ingot
Crafting Table
Reactor Column×2
Reactor Column