Astral Realms Documentation Help

Configuration

AstralPack#loadConfiguration loads the single file config.yml into the MainConfiguration record, then recomputes every pack (see Overview — Computing packs). There is no messages.yml and no database.properties: every command reply is hard-coded English text in PackCommand, and the only configurable player-facing text is each pack's prompt.

config.yml

packs: main: id: "main" url: "https://cdn.astralrealms.fr/generated.zip" groups: - "spawn" - "resource" - "build" prompt: "Veuillez télécharger et installer le ressource pour le jouer sur Astral Realms." unload-on-group-change: false tower: id: "tower" url: "https://cdn.astralrealms.fr/tower.zip" groups: - "tower" prompt: "Veuillez télécharger et installer le ressource pour le jouer sur Astral Realms." unload-on-group-change: true dungeon: id: "dungeon" url: "https://cdn.astralrealms.fr/dungeon.zip" groups: - "dungeon" prompt: "Veuillez télécharger et installer le ressource pour le jouer sur Astral Realms." unload-on-group-change: true

Key

Type

Description

packs

Map of pack blueprint

Every resource pack the proxy knows about. MainConfiguration is record MainConfiguration(Map<String, PackBlueprint> packs) — this is the only key in the file.

The map key (main, tower, dungeon) is for YAML organisation only. Everything in code keys off the id field: command argument resolution, tab completion, computed-pack lookup and de-duplication, and the log lines. The shipped file sets key == id; keeping them equal is the sane convention, but nothing enforces it.

packs

Each entry is a PackBlueprint record — record PackBlueprint(String id, String url, List<String> groups, Component prompt, boolean unloadOnGroupChange), @ConfigSerializable. Configurate maps camelCase fields to kebab-case keys, so unloadOnGroupChange is the YAML key unload-on-group-change.

Field

Type

Description

id

String

The pack's identity. Matched case-insensitively by the <pack> command argument, listed verbatim by the @packs tab-completion, and used as the lookup/de-duplication key for the computed pack.

url

String

Direct HTTP(S) URL to the pack ZIP. The proxy downloads it at startup to compute the SHA-1, and a ?cacheKey=<random hex> query string is appended to the URL that is both hashed and handed to the client. The pack's UUID is UUID.nameUUIDFromBytes(url.getBytes()), derived from the raw URL without the cache key — stable across cache-busts, but two blueprints sharing a url produce the same pack UUID and interfere with each other's send and remove calls.

groups

List of String

AstralCore server groups (MinecraftServer#group) this pack applies to. A player entering the configuration phase for a server in one of these groups is sent the pack, unless it is already applied or still downloading.

prompt

MiniMessage String → Component

The confirm-dialog message, passed to ResourcePackRequest.prompt(...). Deserialized by AstralCore's ComponentTypeSerializer, which calls AdventureUtils.deserialize → MiniMessage.deserialize(raw, CoreRegistry.resolvers()), so MiniMessage tags and AstralCore's global tag resolvers are available. An absent node yields Component.empty(). All packs are sent with .required(true).

unload-on-group-change

boolean

When true, the pack is removed from the player (player.removeResourcePacks(...)) as soon as they enter configuration for a server whose group is not in this pack's groups and the pack is currently applied or pending. When false the pack stays applied everywhere once installed — which is why the shipped global main pack sets false while the per-area tower and dungeon packs set true. The shipped file sets this explicitly on every pack.

How packs are matched

A pack is sent only when blueprint.groups().contains(group) — a plain List.contains, so the match is exact and case-sensitive. The group strings must match AstralCore's registered group names exactly; a pack whose groups never match any registered server group is never sent. The full sequence is described in Overview — Configuration-phase flow.

Reloading

/pack reload re-reads this file. It clears and asynchronously recomputes every pack, so already-connected players keep whatever they have until they next pass through the configuration phase or someone runs /pack update.

See also

  • Overview — hash computation, cache busting, and the configuration-phase flow these keys drive.

  • Commands — /pack, /pack update, /pack reload.

Last modified: 03 September 2026