Configuration
AstralDungeons ships as two separate plugins that each carry their own configuration:
Dungeon server (
papermodule, pluginAstralDungeons, data folderplugins/AstralDungeons/) — hosts the actual dungeon world instances (see Dungeon Instances) and the room/dungeon blueprints (Dungeon & Room Blueprints). Shipsconfig.ymlandmessages.yml.Bridge server (
bridgemodule, pluginAstralDungeons-Bridge, data folderplugins/AstralDungeons-Bridge/) — runs on the hub/lobby, allocates instances across dungeon servers, and pays out rewards (Loot & Rewards) when a player returns from a run. Ships onlyconfig.yml.
Dungeon server config.yml
Backed by the DungeonConfiguration record:
Field | Type | Default | Description |
|---|---|---|---|
| Duration |
| How long an instance may sit idle before |
| int |
| Hard cap on concurrent dungeon instances this process will host. Reported to the bridge on a heartbeat (every 30s, via |
| String |
| Server group name (resolved through the network's server registry, same mechanism as AstralCore's |
|
| see below | Controls dungeon mob/boss activation as players move. |
|
| material | Item used for the boss guide-trail arrows. |
mobs
Field | Type | Default | Description |
|---|---|---|---|
| int (chunk radius) |
| On every block-changing player move inside an active instance, the surrounding chunks (this many chunks out from the player's chunk) are scanned for the room's still-unconsumed mob spawn points ( |
| int (blocks) |
| Of the spawn points found by |
Detection and activation are decoupled on purpose: detection-range is a coarse chunk-grid prefilter, and activation-range is the precise block-distance trigger applied to whatever it finds.
guidance-arrow
ItemStackWrapper (see ItemStackWrapper for the full field set — material, name, lore, enchantments, item flags, amount, components, copy-from). Only material: "arrow" is set by default. This is the item stack shown on every entity in the "way to the boss" guide trail — a line of oriented ItemDisplay entities PathGuidanceService computes once per instance and renders from the spawn room to the boss. If the configured item fails to resolve (e.g. invalid material), PathGuidanceService logs a warning and falls back to a plain ItemStack(Material.ARROW).
Bridge server config.yml
The shipped default above is placeholder text and should be replaced. Backed by the DungeonsConfiguration record:
Field | Type | Description |
|---|---|---|
|
| AstralCore action list run against a returning player. Triggered by |
messages.yml (dungeon server)
Loaded into the DungeonMessages enum (ComponentWrapper values, MiniMessage-capable). Only the dungeon server ships messages.yml — the bridge has no message keys of its own.
Key | Default | Sent when |
|---|---|---|
|
| A participant dies ( |
|
| The instance ends with cause |
|
| The instance ends with any other end cause. Same timing as |
Data folders
Two folders under the dungeon server's data directory must be populated before any dungeon can be created; BlueprintService skips (with a warning) anything that doesn't validate:
Folder | Contents |
|---|---|
|
|
|
|
See Dungeon & Room Blueprints for the full YAML shape of both file types.
Reload
/dungeon reload (aliases /dungeons, plus /dg on the bridge) exists on both servers, gated by permission dungeons.reload:
Dungeon server — additionally requires the class-level
dungeons.commandpermission. CallsAstralDungeons.loadConfiguration(), which re-readsconfig.ymlintoDungeonConfiguration, re-readsmessages.ymlintoDungeonMessages, and re-runsBlueprintService.load()— fully re-scanningrooms/andblueprints/from disk, so blueprint files added, edited, or removed since the last load take effect immediately. It does not affect dungeon instances already in progress.Bridge server — re-reads only
config.ymlintoDungeonsConfiguration(there is nomessages.ymlor blueprint folder on this side).
Neither reload touches the cache, messaging, or (bridge-side) party connections — those are opened once in onEnable and require a restart to pick up connection-setting changes.
Configurate mapping note
Both configuration records are Configurate @ConfigSerializable types. An unannotated camelCase Java field maps to a kebab-case YAML key:
Java field | Declaring type | YAML key |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|