Skip to content

AetherGrid Storage

LocoShailo edited this page Nov 7, 2026 · 1 revision

Storage & Performance

Storage

AetherGrid keeps all grids in memory and writes them to the database asynchronously through HikariCP.

database.type When to use
SQLITE (default) Single server. File: plugins/AetherGrid/grids.db. One connection, WAL mode.
MYSQL Large servers, or when you want to back up / inspect the data externally.

Grids are saved right after important changes (creation, expansion, module install/upgrade/removal, team changes) and every autosave-minutes (default 5) for production counters, XP, power and essence. On shutdown everything is saved synchronously.

Tables (prefix aether_)

Table Contents
aether_grids id, owner UUID, grid slot, size, level, xp, visitors, created, power, essence
aether_grid_members grid id + member UUID
aether_grid_tiles grid id, tile x/z, module id, module level, items produced

New columns are added automatically on startup when you update the plugin.

Switching from SQLite to MySQL

There is no built-in converter yet. Switching gives every player a fresh start, so choose your database before launch.

Backups

Back up plugins/AetherGrid/ (the database) and the aether_grid/ world folder together. The database says which modules are on which tiles; the world holds the blocks and chest contents.

Performance model

AetherGrid splits all work in two stages:

Stage Thread Work
1 – async AetherGrid-Ticker Synergy recalculation (only for changed grids), module timers, power accounting, loot rolls, generator output, action bar text, hologram animation keyframes.
2 – main thread Server thread Putting items into chests, transmutation, turret shots, applying hologram keyframes, sending action bars. Hard-capped at engine.delivery-budget-ms (default 2 ms per tick).

Bukkit only allows world, inventory and entity changes on the main thread, so stage 2 cannot be async. It is kept tiny and time-boxed instead.

Holograms use client-side interpolation: the server sends one new keyframe per second and every client animates smoothly in between. 100 active modules cost about 100 entity updates per second, not per tick.

Grid building (creation and expansion) is spread over ticks with world.blocks-per-tick (default 1500 blocks per tick). A full 7x7 grid is built in a few seconds without a TPS drop.

Mob Spawner Tiles do not spawn entities; they roll loot like other producers.

What to watch

/aethergrid info:

Engine: 0.05ms async | Tiles produced last cycle: 7 | Queue: 0
  • Engine = time of the last async cycle. Not on the main thread, so even a few ms is fine.
  • Queue should stay near 0. If it keeps growing, raise engine.delivery-budget-ms slightly or raise module intervals.

Use spark to profile the main thread if you suspect lag; AetherGrid's main-thread work shows up as TickingEngine.flush and GridDisplayRenderer.applyPending.

Tuning for big servers

Setting Effect
engine.require-online-member: true Offline grids cost nothing. (Default.)
engine.require-loaded-chunk: true Unloaded grids cost nothing. (Default.)
Higher interval-seconds in modules.yml Fewer cycles.
displays.enabled: false or displays.labels: false Fewer entities.
Lower world.blocks-per-tick Smoother building on weak hardware.

Clone this wiki locally