Skip to content

Reactor Calculations

masteri212 edited this page Nov 1, 2026 · 3 revisions

Reactor Calculations

How the Dark Energy Reactor works out its power, spin, stability and failures, tick by tick. Every number is the default; the config key that changes it is in code (all in masteris_bhe-server.toml).

A few names used all through this page:

Name Meaning Default
M Total mass in the four stabilizers
M₀ The ignition minimum: 4 × minMassPerStabilizer 4 × 10,000 = 40,000
rpm The accretion disc's spin (signed; negative spins backwards and behaves the same)
safe safeRpm, the spin above which the ring takes stress 4,000
offset The stabilizers' angle, in degrees, ±maxOffset ±15

Mass

What things are worth

Fed in (Mass Input Port, bomb, Horizon Ring) or swallowed Mass each Config
Any block 1 blockMass
Neutronium Ingot 200 neutroniumMass
Block of Neutronium 9 × ingot = 1,800
Raw Neutronium ½ × ingot = 100
Mass Shard 16 massShardMass
Singularity Heart 10,000 singularityHeartMass
An item that isn't a block (swallowed only; can't be fed in) 1 swallowedItemMass
A creature (swallowed) ⌈max health ÷ 2 × 1⌉, so 1 per heart creatureMassPerHeart

A zombie (20 health, 10 hearts) is worth 10 mass.

Mass a running black hole swallows (items, mobs, blocks it tears loose) is split evenly across the four stabilizers. Any remainder goes round-robin, so none is lost.

Thresholds

Total mass Config
Ignition needs, in each stabilizer 10,000 minMassPerStabilizer
Below this, stability is pushed down by 20 10,000 warningMass
Below this, the reactor goes to pre-meltdown 4,000 criticalMass
A stabilizer at 0 while the disc spins faster than 1,000 rpm stalls the disc

Mass scale

Several things grow with the square root of the mass, scaled to the ignition minimum:

scale = √(M / M₀)          1 at 40,000 mass, 2 at 160,000, 3 at 360,000

The black hole's size

radius = 1.5 × clamp(scale, 0.5, 3.33) blocks

So it's 3 blocks across at 40,000 mass, never smaller than 0.75 radius, and reaches its biggest (5 radius, 10 across) at about 444,000 mass. Anything that touches it is swallowed.

Spin shake

More mass holds the core steadier. "Shake" multiplies what the offset and overspin cost in stability, how fast ring stress builds, and how hard the disc wobbles:

shake = clamp((M₀ / M) ^ 1.5, 0.1, 2)      (massSteadiness, minSpinShake, maxSpinShake)
Mass Shake
25,000 or less 2 (twice as touchy)
30,000 1.54
40,000 1
80,000 0.35
160,000 0.13
186,000 or more 0.1 (the floor)

With massSteadiness at 1, twice the mass halves the shake; at 0, mass doesn't matter.


Spin

Every tick the stabilizers push the disc:

rpm += offset × 0.5                    (spinAcceleration)

There's no top speed: at 1° the disc gains 10 rpm per second for as long as you leave it. A negative offset brakes a forward spin, then spins the disc backwards. The stabilizers turn toward the offset you set at 1° per second.

While shutting down, the disc brakes by 40 rpm per tick (shutdownBrake). Offline it slows by 50 rpm per tick.


Power

There are two sources, and they add up.

1. Rotation (needs both axial stabilizers)

mass power      = (M / M₀) ^ 1                                    (massPowerExponent)
rotational RF/t = 0.0125 × rpm² × efficiency × mass power         (rfPerRpmSquared)

Every RF of it is paid for with spin:

rpm lost this tick = rotational RF / (2,000,000 × mass power)     (rfPerRpmSpent)

A heavier disc makes more power at the same spin and holds more energy per rpm, so the extra power costs no extra spin: the spin drains exactly as fast at any mass.

Spin is only spent on RF the core has room for, so with a full buffer the disc keeps its speed. Without both axial stabilizers, spin makes no power at all and isn't spent (so it just keeps climbing).

At the ignition minimum (40,000 mass, mass power 1):

rpm RF/t at 100% efficiency Spin it costs
1,000 12,500 0.006 rpm/t
2,500 78,125 0.039 rpm/t (0.8 rpm/s)
4,000 (safe) 200,000 0.1 rpm/t (2 rpm/s)
6,000 450,000 0.225 rpm/t

With more mass, multiply the RF (not the spin cost):

Total mass Mass power RF/t at 4,000 rpm, 100% efficiency
40,000 1 200,000
80,000 2 400,000
160,000 4 800,000
400,000 10 2,000,000

With massPowerExponent at 0, mass makes no difference; at 2, four times the mass gives sixteen times the power.

Worked example: why you can't just leave it at 1°. At 1° the disc gains 0.5 rpm/t. At 100% efficiency the conversion only takes 0.5 rpm/t back at (at any mass)

0.5 = 0.0125 × rpm² / 2,000,000  →  rpm ≈ 8,944

That's more than twice the safe spin. So you spin up with offset, then set it back to 0 and let conversion slowly drain the spin (at 2,500 rpm it loses under 1 rpm per second), topping up with short bursts of offset.

Efficiency: resonance × wobble

efficiency = resonance efficiency × wobble efficiency       (0 without the axial stabilizers)

Resonance

Spin turns into power fully only inside a resonance band that moves.

center = max(600, min(2,500 × scale, 0.95 × safe) + drift)   (resonanceRpm)
band   = center ± 300                                       (resonanceWidth)
  • At 40,000 mass the center is 2,500 rpm. It rises with the square root of the mass and stops at 3,800 (95% of safe), from about 92,000 mass.
  • Drift: each tick the center wanders randomly by up to ±0.6 rpm (resonanceDrift 6 → about ±6 rpm per second). About once a minute (1 in 1,200 per tick) it jumps 300–600 rpm up or down. The drift never takes it more than 900 rpm (3 × width) from its base. A disc stall also knocks it 600 rpm one way or the other.

Outside the band, efficiency falls off smoothly to a floor:

off = |rpm − center| − 300
if off ≤ 0: resonance efficiency = 1
else:       resonance efficiency = 0.2 + 0.8 × e^(−(off / 450)²)     (resonanceMinEfficiency = 0.2)
Distance from the center Efficiency
up to 300 rpm 100%
450 91%
600 71%
900 34%
1,200 or more about 20%

Wobble (precession)

With the axial stabilizers up, the spinning disc precesses and leans (−100…100, negative toward the north-west). The axial trim (−10…10) pushes back. Each tick:

uneven    = (heaviest stabilizer − lightest) / heaviest
precession wanders by ±0.01 per tick, kept within −1…1
drive     = rpm / safe × 0.5 × precession × (1 + 2 × uneven) × 1.0 × shake      (precessionStrength)
wobble    = (wobble + drive + trim × 0.1) × 0.99

So faster spin and uneven mass (up to 3× the push) make it lean harder, and more mass (a smaller shake) makes it lean less.

  • Up to ±25 it's harmless.
  • Past ±25 it costs efficiency: wobble efficiency = 1 − (|wobble| − 25) / 75 × 0.5, down to 50% at the edge.
  • It also costs stability (see below).
  • At ±100 the disc tips over and stalls.

Without the axial stabilizers there's nothing to lean against, and any wobble dies away (×0.95 per tick).

2. Laser bending

The Bending Laser is part of the containment ring: it replaces the outermost middle block of the north-east beam port tunnel (12 east, 12 north of the core, at core height). Only a laser in that spot is used. It fires RF past the black hole; the beam swings round it and comes back stronger, burning mass as it does:

laser in   = 200,000 × power% / 100 RF/t                     (laserMaxRate)
gain       = 1.15 + (1.30 − 1.15) × power% / 100              (laserGainMin, laserGainMax)
laser out  = laser in × gain
mass burnt = laser in / 400,000 per tick                       (laserRfPerMass)
Laser power In (RF/t) Out (RF/t) Net gain (RF/t) Mass burnt
25% 50,000 59,375 9,375 0.125/t (150/min)
50% 100,000 122,500 22,500 0.25/t (300/min)
100% 200,000 260,000 60,000 0.5/t (600/min)

Mass is drained evenly from the four stabilizers.

Stabilizer power

The stabilizers run on the reactor's own power. While it runs, each stabilizer draws 2,000 RF/t (stabilizerPower) from the core's buffer: the four around the ring, plus the two axial stabilizers once they're built.

Built Draw
Ring stabilizers only 8,000 RF/t
With both axial stabilizers 12,000 RF/t

It's paid each tick out of that tick's output, before the Reactor Ports take anything. Whatever the buffer can't cover leaves stabilizers unpowered. Each costs its share of 100 stability (unpoweredStabilityLoss): one of six costs about 17, and with none powered the target is 0, so stability drains away into pre-meltdown.

For the first 30 seconds after ignition (stabilizerGraceSeconds) the stabilizers run on the ignition charge and draw nothing, giving the disc time to spin up. After that the spin has to cover the draw (about 1,000 rpm at the ignition minimum of mass, in the resonance band), or the buffer has to: charge it beyond the ignition cost, feed it through a Reactor Port, or run the Bending Laser. Without the axial stabilizers, spin makes no power at all.

The buffer

Config
Core buffer 1,000,000,000 RF
Ignition costs 50,000,000 RF ignitionEnergy
Each Reactor Port pushes, per side up to 2,000,000 RF/t portPushPerSide

Ports only push while the reactor generates (stable, warning, shutting down or pre-meltdown).


Ring stress

above safe spin:  stress += (|rpm| − safe) / 20,000 × shake    per tick
otherwise:        stress −= 0.05                                per tick (1% per second)

Example: at 5,000 rpm with 40,000 mass, stress climbs 0.05 per tick, 1% per second, so 100% in under two minutes. At 100% the reactor goes to pre-meltdown.


Stability

Stability (0–100%) moves toward a target by at most 0.2 per tick (4% per second):

target = 100
       − |offset| × 2 × shake
       − laser power% × 0.2
       − stress × 0.3
       − (|rpm| − safe) / 100 × shake            only above safe spin
       − 20                                       only below warningMass (10,000)
       − (|wobble| − 25) × 0.3                    only past ±25 wobble
       − 100 × unpowered / all stabilizers        (see Stabilizer power)

Example: 40,000 mass (shake 1), 5° offset, laser at 50%, no stress, under safe spin, no wobble:

target = 100 − 10 − 10 = 80

More mass makes the offset and overspin cost less: at 80,000 mass the same 5° costs only 3.5.

Offline, stability recovers 0.5 per tick. During a disc stall it drops 0.02 per tick.

States

State When Config
Stable stability ≥ 50 warningStability
Warning stability < 50
Pre-meltdown stability < 20, or stress ≥ 100, or mass < 4,000, or a breach of the ring preMeltdownStability, criticalMass
Recovers from pre-meltdown stability ≥ 35 and stress < 90 and mass ≥ 4,000 and the structure is whole recoverStability, recoverStress

Countdowns:

Seconds Config
Disc stall (overcharge every breaker, then JUMP) 60 discStallSeconds
JUMP pressed too early costs 5 jumpPenaltySeconds
Fixing an ignition or shutdown fault 120 faultSeconds
Pre-meltdown 90 preMeltdownSeconds
Meltdown phase 1 120 meltdownPhase1Seconds
Meltdown phase 2, then collapse 60 meltdownPhase2Seconds

Disc stalls

The disc stalls when:

  • a stabilizer runs dry (0 mass) while the disc spins faster than 1,000 rpm, or
  • the wobble reaches ±100, or
  • you SCRAM above 90% of the safe spin (3,600 rpm; scramStallSpin).

When it stalls, the disc's trapped energy dumps into the buffer, and stability drops by 15:

RF dumped = 0.0125 × rpm² × 200

At 3,000 rpm that's 22,500,000 RF.


Fault chances

Rolled when you ignite or start a shutdown. Both are capped at 90%.

Ignition fault

low, high = the emptiest and fullest stabilizer
imbalance = (high − low) / high
thin      = clamp(1 − (low / 10,000 − 1) / 0.5, 0, 1)       full at exactly the minimum, gone at 1.5× it
chance    = 0.05 + 0.5 × imbalance + 0.3 × thin + 0.3 × (1 − stability / 100)    (faultBaseChance = 0.05)
Setup Chance
All four at 15,000+, stability 100 5%
All four at exactly 10,000 35%
20,000 / 20,000 / 20,000 / 10,000 5% + 25% + 30% = 60%

Shutdown fault

chance = 0.05 + 0.5 × (1 − stability / 100) + 0.25 × stress / 100 + (0.15 if |rpm| > safe)

A clean shutdown (100% stability, no stress, under safe spin) is 5%. Shutting down from a shaky 60% stability with 40% stress at 4,500 rpm is 5 + 20 + 10 + 15 = 50%.


Venting

Mass burnt Config
Normal vent through the Venting Lance 15% ventMassFraction
Vent while the ring is breached 75% breachVentMassFraction
Emergency vent (meltdown phase 1) all of it, and the lance

A singularity rebound (a shutdown fault) closes once you drain the core's charge below 5,000,000 RF (reboundDrainRf).


Pull and tearing

The running black hole pulls in items and mobs, and tears loose blocks within a sphere (when pullBlocks is on), turning them into mass. The sphere grows as things go wrong:

State Reach (blocks from the core)
Running normally 12.5 (just inside the ring)
Disc stall, fault 21.5 (just past the ring)
Pre-meltdown 21.5 → 31.5 over the countdown, +6 if breached
Meltdown phase 1 40
Meltdown phase 2 48

Past the ring, blocks are only eaten with destroyBlocks on. At most 300 torn blocks fly in at once (maxBlocksInFlight). In a meltdown, mobs, players and items are dragged in from 20 blocks (phase 1, meltdownPhase1Pull) and 32 blocks (phase 2, meltdownPhase2Pull).


Collapse

When meltdown phase 2 runs out, the core collapses.

crater radius = min(80, 50 + M / 10,000)          (baseExplosionRadius, massPerRadius, maxExplosionRadius)
zone radius   = clamp(500 × scale, 150, 2,000)    (zoneRadius, zoneMinRadius, zoneMaxRadius)
fallout       = min(zone radius, 500)             (falloutRadius)
Mass at collapse Crater Zone Fallout
10,000 51 250 250
40,000 54 500 500
160,000 66 1,000 500
300,000 80 (cap) 1,369 500
640,000+ 80 2,000 (cap) 500

The zone is a sphere centered on the crater floor. Inside it, gravity is 40% (gravityMultiplier). It takes 8 stabilized ore nodes to close (stabilizationNodes); each one shrinks the radius by an equal share of what's left.

Black Hole Bomb

blast radius = min(150, 60 + M / 25)              (bomb.baseRadius, bomb.massPerRadius, bomb.maxRadius)
zone radius  = as above, but for twice the bomb's mass

1,000 mass gives a 100-block blast. 2,250 or more hits the 150 cap.