Search

Search projects, devlog entries, events, partners, and docs.

← glowstone/projectsAlpha · internal
a Minecraft server engine by Glowstone

Ember

The server engine under Atom.

A Minecraft server of our own, because the systems our game modes need do not fit through a plugin API.

ember/ceilingwhy build a server

The plugin ceiling

Atom needs the server to know whether a room is sealed, whether a block is supported, how warm you are. Today it gets there as a Paper plugin: block scans on a timer, third-party plugins for custom content, mixins for whatever the API will not expose.

That approach has real limits. The tick starts slipping, the profiler points at code we cannot change, and every game update rewrites internals we were relying on.

So we are building our own server instead.

Before
Atom (a plugin)
GlowstoneLib
Mixin patches
ours
Custom-content plugin
Permission system
Paper-family server
Vanilla server code
someone else's code
every update: wait, wait, wait
Now
Atom
the game
Ember
custom backend, built for Atom
no vanilla code
ours
our code, top to bottom
ember/originnothing inherited

No vanilla code underneath.

Every block is one we defined.

Ember starts empty. Stone is a definition we wrote, the same way reinforced concrete is, and both spell out how they break, what they drop and what light they cast. Nothing sits underneath them to override, so when Atom needs a block to act differently, there is one place to go and change it.

ember/scalemany entities at once

Thousands of entities

Ember runs on an ECS. An entity is rows of plain data rather than an object, so a system makes one pass over the parts it cares about and a crowd costs about what that pass costs. Systems declare what they read and write, which lets the ones touching different data run on separate threads.

ember/anatomythe engine, exploded

The world is ours

Ember stores every block itself, vanilla ones included. Nothing underneath it gets to decide what a block is. A custom block carries its own state and its own hardness, so every mechanic can treat it like any other block.

Built for our load

Atom asks the server to track body temperature, block support and reinforcement across thousands of blocks and every player, every tick. Ember was built around that workload.

Nothing we can't fix

Every line in the hot path is ours to read and profile. When a mode gets expensive, the fix goes into the engine.

One base, many modes

Atom runs on Ember first. Whatever Atom needs the engine to do gets built once, and the mode after it starts from there.

The forge is lit

build log, updated as we go