What you need

Minecraft 1.20.1 Forge 47.x Windows or Linux x86-64

Any launcher works — the vanilla launcher, Prism, MultiMC, Modrinth, CurseForge. Nothing else needs installing: no separate library, no runtime, no download at first launch.

macOS and ARM: this release ships no engine for your platform. The mod still loads and plays normally — analysis is disabled, and it says so rather than failing quietly. To get analysis you would have to build br-sidecar from source and point sidecarPath at it.

Install

One file. The jar is the whole installation — the finite element engine travels inside it and unpacks itself the first time analysis is needed. If you installed an earlier version, read upgrading from 0.1a / 0.2a first.

1

Have a Forge 1.20.1 instance

Skip this if you already do. Otherwise create a profile: Minecraft 1.20.1, modloader Forge, any 47.x version.

CurseForge Create Profile dialog with Minecraft version 1.20.1 and modloader Forge 47.4.10 selected
A CurseForge profile on 1.20.1 with forge-47.4.10. Any launcher will do — the version numbers are what matter.
2

Put the jar in mods/

That is the install. Nothing goes anywhere else.

2.4 MB — most of it is the two engine binaries, Windows and Linux, riding along inside. The GitHub release additionally carries the loose engines, the optional installer scripts and the full SHA256SUMS.txt.

The folder you want is the game directory — the one holding mods/ and saves/, not the launcher's own folder. If mods/ does not exist yet, make it.

3

Launch and check

Start the instance, load any world, press T and run:

/br status

On a fresh world with nothing built yet, you should get back:

The /br status readout in game: engine IDLE, and the engine path resolving into blockreality/engine/c4d571a5911b/br-sidecar.exe
The line that matters is engine: — it resolves into blockreality\engine\c4d571a5911b\, the folder the jar unpacked itself into. Nothing was placed there by hand.

The same thing as text:

Minecraft chat — /br status
Block Reality
  dimension       minecraft:overworld
  engine          IDLE
  engine: <game directory>\blockreality\engine\c4d571a5911b\br-sidecar.exe
  revision        0   (rejected as stale: 0)
  blocks          0   test loads: 0
  last result     none yet
  • engine IDLE — found and waiting. Idle because there is nothing built yet.
  • engine: — the binary it resolved to. See where the engine comes from. If this line is missing, /br status lists every path it searched instead.
  • blocks 0   test loads: 0 — nothing structural in range.
  • last result none yet — no solve has run.

The engine: line and the searched-path list only print for operators — they spell out filesystem paths, including the account name, which a non-privileged player on a server has no business reading. A single-player creative world has the permission already.

Where the engine comes from

Block Reality is still two programs — the mod reads your blocks and draws the HUD, and a separate process runs the finite element solve. What changed in 0.3 is that you no longer have to place the second one. It rides inside the jar and unpacks itself on first use to:

<game directory>\blockreality\engine\<hash>\br-sidecar.exe

You put one file in. After the first analysis runs, the instance looks like this — the highlighted line is the only thing you placed:

the game directory, after first use
.minecraft\
├── mods\
│   └── blockreality-0.3c.jar      ← you put this here
├── blockreality\
│   └── engine\
│       └── c4d571a5911b\
│           └── br-sidecar.exe   ← unpacked from the jar
├── config\
└── saves\

The folder is named after the binary's own SHA-256. Three things fall out of that: a mod update lands beside the old engine instead of overwriting it, a half-written file can never be mistaken for a good one, and nothing is ever downloaded — those bytes were already in the jar you installed, and anything whose hash does not match is refused rather than run.

FrameCore is statically linked into br-sidecar, so there is no separate library to install. Running it as its own process rather than loading it into the JVM means a fault in the C++ costs one analysis instead of the server and the save.

The search order

It takes the first one that exists, most explicit first:

# Where Set by
1 sidecarPath in config/blockreality-server.toml you
2 -Dbr.sidecar JVM argument you
3 BR_SIDECAR environment variable you
4 the copy bundled in the jar the mod — this is the normal case
5 br-sidecar in the game directory, or in blockreality/ an older release's installer
6 PATH your system

The three explicit settings come first so a path you chose is never quietly overridden. The bundled engine comes before the game directory on purpose: a loose br-sidecar.exe sitting there is most often one an older installer left behind, while the bundled one is guaranteed to match the jar that is running.

Upgrading from 0.1a or 0.2a

Delete the old blockreality-*.jar from mods/ before adding the new one — two copies of the same mod in mods/ is a load error.

The loose br-sidecar.exe that the old installer put in your game directory can stay or go. Either way it is no longer what runs: the bundled engine is found first, precisely so that a stale binary left by an older release cannot outrank the one that matches the jar you are running. Deleting it is tidier and costs nothing.

The installer scripts, if you want them

Optional. They do exactly what step 2 does — put the jar in mods/ — plus copy a loose engine next to it, and find mods/ for you if you would rather not go looking. They ship in the release archive on GitHub, not here, because the jar on its own is a complete install.

Extract the archive properly before running one: the script copies the files sitting next to it, so it needs the folder intact. Then on Windows double-click install.bat, or on Linux:

./install.sh

With no arguments it searches the usual instance locations for the vanilla launcher, Prism, MultiMC, Modrinth and CurseForge. One hit and it uses it; several and it lists them and asks. You can also name the directory:

install.bat "D:\games\my-instance\.minecraft"
./install.sh ~/.minecraft

To see what it found without installing anything:

install.bat --list
install.bat --list
  Block Reality - 安裝器 / installer
  ==================================

    1) [Forge]    C:\Users\you\AppData\Roaming\.minecraft
    2) [no Forge] C:\Users\you\AppData\Roaming\PrismLauncher\instances\survival\.minecraft
    3) [no Forge] C:\Users\you\curseforge\minecraft\Instances\block-reality

And a successful run:

install.bat "…\.minecraft"
  Block Reality - 安裝器 / installer
  ==================================

  mod    -> C:\Users\you\AppData\Roaming\.minecraft\mods\blockreality-0.3c.jar
  engine -> C:\Users\you\AppData\Roaming\.minecraft\br-sidecar.exe

  [OK] 這個實例裡有 Forge。用你平常的啟動器開遊戲就好。
       Forge found in this instance. Launch it the way you normally do.

  進遊戲後:創造分頁 "Block Reality"。有問題打 /br status。
  In game: creative tab "Block Reality". If anything looks off: /br status

Real output, with the account name replaced. The engine it copies is the loose one, which lands in the game directory — search position 5. The bundled copy inside the jar is still what actually runs.

Checking the download

The jar served here:

f38c88e1425f13d9e5f072072de475110a3c3ffd0a91034fdb814b5468ed82ce  blockreality-0.3c.jar

Also as a file, so you can check it in one command:

sha256sum -c SHA256SUMS.txt

Or on Windows:

certutil -hashfile blockreality-0.3c.jar SHA256

SHA256SUMS.txt — the same hash the GitHub release lists for this file.

Troubleshooting

/br status shows no engine path

Instead of the engine: line you get a list of every place it looked. Read the bundled: entry first — normally the engine comes from there, so if it failed the message says why.

The two causes worth checking:

  • Antivirus quarantined it. A freshly unpacked unsigned .exe is exactly what heuristic scanners grab. Restore it, allow the folder, then /br reset — that makes the mod try the unpack again without restarting the game.
  • Your platform has no engine in this build. macOS and ARM say so explicitly. The mod plays fine; analysis is off.

The installer says there is no Forge, but there is

Known false alarm on CurseForge instances. CurseForge keeps the loader outside the instance folder, so the check — which looks for versions/*forge* or libraries/net/minecraftforge/ — finds nothing and prints [no Forge] even when minecraftinstance.json records a perfectly good forge-47.4.10.

It is only a warning. The mod is installed either way, and if you made the profile with a Forge 1.20.1 loader it will load normally. Prism, MultiMC and the vanilla launcher are all detected correctly.

The installer found no Minecraft instance

It searched these:

%APPDATA%\.minecraft
%APPDATA%\PrismLauncher\instances\*
%APPDATA%\MultiMC\instances\*
%APPDATA%\ModrinthApp\profiles\*
%USERPROFILE%\curseforge\minecraft\Instances\*

If yours lives somewhere else, hand it the path directly:

install.bat "D:\games\my-instance\.minecraft"

Or skip the script entirely and drop the jar in mods/ yourself — that is the whole install.

It warns there is no engine next to the script

The archive did not fully extract, or install.bat was moved out on its own. It copies the files beside it, so it needs the folder intact.

Harmless in 0.3c. That loose engine is only search position 5; the copy inside the jar is what runs anyway.

The mod loads but analysis never happens

Check /br status first — it prints the engine state, the resolved path, the block count and the last result, which between them identify almost every case.

If blocks is 0 while you are standing next to a structure, the blocks were probably placed by command or WorldEdit, which fire no place event. /br scan re-reads the chunks around you.

If the last result says MECHANISM, that is the correct answer rather than a fault: nothing is holding the structure up. A block counts as grounded only when the block directly below it is solid and non-structural — a beam butted sideways against a wall is not supported by it. See the usage guide.