Real structural engineering, inside Minecraft

Version 0.3c Minecraft 1.20.1 Forge 47.x

In vanilla Minecraft, gravity stops at sand and gravel. Block Reality reads what you build as a structural model and hands it to a real finite element engine — the same kind of solve an engineer runs on a building before it gets poured.

Every beam, column, slab and wall carries its own self-weight. Put a load on a member and you get back its demand-to-capacity ratio, the governing fibre, the stress profile through the section depth, and — separately, because it is a separate question — whether the thing is about to buckle.

Utilisation lens showing member demand-to-capacity ratios in colour
The utilisation lens: colour is demand over capacity, cold through amber to vermilion. This is the view that answers where is it closest to failing.

How it works

Block Reality translates voxel geometry into a structural model behind the scenes:

A 199-member model solves in about 50 ms on the reference laptop, and not on the tick thread — so that is the latency before the numbers appear, not time taken away from the game. Above 300 blocks the buckling solve is skipped by default and the HUD says so, because that solve grows as the cube of the model.

What it does, and what it does not

It is an analysis and visualisation tool. It tells you what the forces are and where the structure is closest to failing. Blocks do not crack, deform or fall down — overload turns a member red and pushes max D/C past 1, and an unsupported structure is reported as a mechanism rather than collapsing. Progressive collapse is on the roadmap for 0.4, not in this build.

Implemented today: 6-DOF beams, MITC4 shells including floors and shear walls, linear buckling for both, per-member and per-shell demand-to-capacity, and surface stress contours you can walk around and read off both faces of a slab.

Not implemented, stated plainly: reinforced-concrete composite sections — the catalogue is solid rectangles and circles, and the tokens say so — per-plate buckling, and nonlinear post-buckling. The buckling factor is the linear onset.

How accurate that onset is depends on the mesh, which is worth knowing before you rely on it. A straight run is one element, so it carries one constant axial force. Where the real axial force is nearly constant that is excellent: a 19 m cantilever under a top load 400× its self weight lands within 0.5% of the Euler value. Where the axial force varies along the member it is not: the same column buckling under its own weight reports 3.14 where the exact answer is 9.89 — 68% low, so conservative — and climbs to 9.15 once nineteen elements exist. A one-newton test load at mid-height raises the reported factor by 68%, because it splits the run in two. Both figures come from scripts that ship in the repository and run against the engine you installed; earlier releases described this number as an upper bound on the real critical load, which is wrong for the self-weight case and has been withdrawn.

Every solve returns a global equilibrium residual, recomputed independently from geometry and density rather than read back out of the assembled load vector — so it is a statement about the answer that does not depend on the solver agreeing with itself. /br status prints it. The full verification record, every benchmark against its closed form, lives in evidence/VERIFICATION.md.

Latest Devlog

Read All Devlogs

Devlog #1: First Steps into Web Development

Today marks my official start in programming. I kicked things off with the Mimo app to get a feel for basic syntax

Go to Devlog page for full screenshots →