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, owns the portals, keys and the dungeon-inventory UI, allocates instances across dungeon servers, and pays out rewards (Loot & Rewards) when a player returns from a run. Shipsconfig.yml,leaderboards.yml,messages.yml, and themenus/+dialogs/folders.
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 participants are sent to once an instance ends — win or lose — and the target of |
|
| see below | Controls dungeon mob/boss activation as players move, and how an AstralMobs drop is recognised as dungeon loot. |
|
|
| Item shown on the arrows that ride the boss guidance stream. |
|
| see below | The fixed hotbar every player is given on entering a dungeon. |
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 still-unconsumed mob spawn markers ( |
| int (blocks) |
| Of the spawn markers found by |
| Adventure |
| The persistent-data key |
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. A marker inside activation-range still only spawns when the player either stands within 25 blocks of it (a hard-coded constant, so mobs behind a corner still appear when the player is on top of them) or has line of sight to it.
guidance-arrow
ItemStackWrapper (see ItemStackWrapper for the full field set — material, name, lore, enchantments, item flags, amount, components, copy-from). This is the item stack shown on the oriented ItemDisplay arrows that ride each guidance pulse from the player toward the boss. If the configured item fails to resolve — an exception, or a stack that comes back null or air — PathGuidanceService logs a warning and falls back to a plain ItemStack(Material.ARROW).
inventory
The player's own inventory is wiped on entering a dungeon and rebuilt: slots 0–5 from their dungeon inventory gear (helmet, chestplate, leggings, boots, main hand, off hand), then everything under inventory.items on top.
Field | Type | Default | Description |
|---|---|---|---|
| int |
| The hotbar slot the player is locked to. Selected on join, and re-selected whenever they try to scroll away — |
|
| slot | Raw Bukkit inventory slot index → item to place there. Resolved once per player against their own placeholder container, so |
Bridge server config.yml
The shipped reward-actions default is placeholder text and should be replaced. Backed by the DungeonsConfiguration record:
Field | Type | Description |
|---|---|---|
| String | The server group that hosts the dungeon portals. |
|
| AstralCore action list run against a returning player. Triggered by |
| String | Menu blueprint id opened by a bare |
Bridge server leaderboards.yml
Backed by the LeaderboardConfiguration record — three AstralLeaderboards board ids, updated by PlayerDataService#claimRewards once a run is claimed. All three are looked up through LeaderboardService; if that service is absent the update is skipped silently.
Field | Updated with | When |
|---|---|---|
|
| Every claimed run. |
|
| Only when the run was |
|
| Only when the run was |
messages.yml
Both modules load their own messages.yml into their own DungeonMessages enum (ComponentWrapper values, MiniMessage-capable). They are different key sets — the two files are not interchangeable.
Dungeon server
Key | Default | Sent when |
|---|---|---|
|
| A participant dies ( |
|
| The instance ends with cause |
|
| The instance ends with any other end cause. |
|
| The renderer applied to every chat message sent inside an instance. |
won/lost are sent by EndInstanceTask, which runs every 5 ticks from the moment the instance ends: the message goes out immediately, participants are teleported to spawn-group after ~12s, kicked after ~20s, and the instance is deleted after ~25s.
Bridge server messages
Key | Sent when |
|---|---|
| Every entry gate passed; the create RPC is going out. |
| A dungeon server accepted and built the instance. |
| The RPC failed, timed out, or every server declined. |
| The player walked into a portal (or ran |
| A party member other than the leader stepped into the portal. |
| Party size is outside the blueprint's |
| At least one party member is missing the key or fails the blueprint's |
| No dungeon server with a free slot currently advertises that blueprint. |
| The matching preset action succeeded. |
| A preset name outside 3–16 characters, or blank. |
| The player already has a preset with that name. |
| The player already has 9 presets (the menu layout does not paginate). |
| A preset is equipped and the player tried to create another — a new preset takes the gear being worn, which already belongs to the equipped one. |
| A requirement threw, or the |
Data folders
Dungeon server
Two folders under plugins/AstralDungeons/ 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.
Bridge server
Folder | Contents |
|---|---|
| Bridge-side |
| AstralCore menu blueprints. Ships |
| AstralCore dialog blueprints. Ships |
Reload
/dungeon reload exists on the dungeon server only, gated by the class-level dungeons.command permission plus dungeons.reload. It calls AstralDungeons.loadConfiguration(), which re-reads config.yml into DungeonConfiguration, re-reads messages.yml into DungeonMessages, and re-runs BlueprintService.load() — fully re-scanning rooms/ and blueprints/ 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.
The bridge exposes no reload command; its loadConfiguration() (re-reading config.yml, leaderboards.yml, messages.yml, and the blueprint/menu/dialog folders) only runs on enable, so bridge-side changes need a plugin or server restart.
Neither module's reload touches the cache or messaging 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 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| bridge |
|