Astral Realms Documentation Help

Placeholders

AstralDungeons registers a dungeons namespace on both modules — but they are entirely different placeholder sets, because they answer different questions. On the dungeon server dungeons reads the live run; on the bridge it reads the player's dungeon inventory. Several nested namespaces (data, blueprint, preset, grid, inventory) are reachable only through an object registered into a specific container.

For the placeholder syntax itself (%namespace_key%, %outer_{inner}%) see Placeholders.

Namespace

Where

Reachable from

dungeons_*

Dungeon server

Any container with a Player context (registered globally).

dungeons_inventory_*

Bridge

Any container with a Player context (registered globally).

data_*

Bridge

reward-actions only.

blueprint_*

Bridge

The entry messages, and anywhere a blueprint is registered.

preset_*

Bridge

A preset object, usually via %dungeons_inventory_presets% or a menu preset parameter.

grid_*

Bridge

%dungeons_inventory_equipped%.

dungeons_* on the dungeon server

DungeonsPlaceholders (paper) is a ComplexPlaceholder registered once, globally, into RootPlaceholderContainer from the Paper module's onEnable. Because PlaceholderContainer.placeholder(namespace) falls back to the root container for any namespace it doesn't hold locally, %dungeons_*% resolves from any placeholder container built on that server once a Player context is attached — including the ad-hoc containers the listeners build for the player-death and chat-format messages.

Every key below returns null when the placeholder is not resolving against a Player context.

Placeholder

Type

Description

%dungeons_experience%

double

The player's live, unclaimed run experience, off the DungeonPlayerData in the dungeon server's in-memory cache. null if they have no cached data (no active instance for their party on this server).

%dungeons_alive%

boolean

Whether the player is still an alive participant of their instance. false when they are dead (spectating) or in no instance.

%dungeons_inInstance%

boolean

Whether the player is currently registered to any instance.

%dungeons_party%

Party

The player's AstralParty party object, for further nesting (%dungeons_party_...%). null if they are not in one.

%dungeons_instance_state%

InstanceState

The player's instance state — CREATING, ACTIVE, ENDING, DESTROYING, DESTROYED, DESTROY_FAILED. See Instance states.

%dungeons_instance_mobs_alive%

int

The number of entities the instance is currently tracking.

%dungeons_instance_mobs_total%

int

The number of mob spawn markers the instance was created with.

Any other sub-key — including bare %dungeons% — resolves to null.

lines: - "<gray>Experience earned so far: <yellow>%dungeons_experience%" - "<gray>Mobs in play: <white>%dungeons_instance_mobs_alive%<gray>/<white>%dungeons_instance_mobs_total%"

dungeons_inventory_* on the bridge

The bridge's DungeonsPlaceholders exposes exactly one key — inventory — which resolves to the viewing player's DungeonInventory (looked up through SyncAPI.findData), and the rest of the path is handled by that object. null when the context is not a Player or the player has no synced dungeon inventory.

See Dungeon Inventory & Presets for what these mean; slot indices are 0 helmet, 1 chestplate, 2 leggings, 3 boots, 4 main hand, 5 off hand, 6–23 storage.

Placeholder

Type

Description

%dungeons_inventory_helmet%

ItemStack

Slot 0 of the inventory's own array. null when empty.

%dungeons_inventory_chestplate%

ItemStack

Slot 1, same.

%dungeons_inventory_leggings%

ItemStack

Slot 2, same.

%dungeons_inventory_boots%

ItemStack

Slot 3, same.

%dungeons_inventory_slot_<n>%

ItemStack

Slot n of the inventory's own array. Unlike the four above, an empty slot yields an empty stack rather than null, so a menu can copy-from it unconditionally. n may itself be a placeholder. Out of range or unparseable yields the literal string <invalid slot: n>.

%dungeons_inventory_content%

ItemProvider

All 24 slots as a provider, empty slots included as empty stacks — so a menu layout renders the whole grid and provider index equals slot index.

%dungeons_inventory_equipped%

DungeonInventoryGrid

The grid the player is wearing: the equipped preset's content, or the inventory's own array when none is equipped. Nest further with grid_*.

%dungeons_inventory_presets%

ItemProvider

The player's presets, for a menu layout. Each entry nests as preset_*.

%dungeons_inventory_activePreset%

DungeonInventoryPreset

The equipped preset object, or null.

%dungeons_inventory_hasActivePreset%

boolean

Whether a preset is equipped.

%dungeons_inventory_activePresetId%

String

The equipped preset's UUID, or the literal string none.

%dungeons_inventory_stat_<key>%

double

The summed value of AstralItems stat <key> across every item in equippedContent(). See Stat totals.

Stat totals

%dungeons_inventory_stat_<key>% sums one AstralItems stat over the worn grid. The remainder of the placeholder path is collapsed into an Adventure Key, so a namespaced stat works: %dungeons_inventory_stat_astralitems:strength%.

Two filters apply per item:

  • Items AstralItems does not recognise, or that carry no stats, contribute nothing.

  • An item whose blueprint has an armour-equip pipeline contributes only if that pipeline head's requirements pass for the viewing player. An item with no such pipeline always contributes. A requirement that throws counts as failed.

So the total reflects what the player would actually benefit from, not merely what is in the grid. It requires a Player context; anything else yields null.

preset_*

Reachable from a preset object — a %dungeons_inventory_presets% provider entry (%parameter_preset% in a layout) or %dungeons_inventory_activePreset%.

Placeholder

Type

Description

%preset_name%

String

The preset's name.

%preset_uuid%

String

Its UUID, as a string.

%preset_content%

ItemProvider

All 24 slots, empty ones as empty stacks.

%preset_slot_<n>%

ItemStack

Slot n, empty slots as empty stacks. Out of range or unparseable yields null (not the <invalid slot> string the inventory uses).

Bare %preset% resolves to the preset object itself, which is what lets it be passed to an action or a menu parameter: [toggle-preset] %parameter_preset%, [open-menu] dungeons-preset:preset=%parameter_preset%.

grid_*

%dungeons_inventory_equipped% resolves to a DungeonInventoryGrid — the worn array, without saying whether it came from a preset or the inventory.

Placeholder

Type

Description

%grid_content%

ItemProvider

All 24 slots, empty ones as empty stacks.

%grid_slot_<n>%

ItemStack

Slot n. Out of range or unparseable yields <invalid slot: n>. Unlike the inventory's own slot_<n>, n is parsed as a plain integer and is not itself placeholder-resolved.

In practice menus write the whole path in one go — %dungeons_inventory_equipped_slot_0% — rather than thinking of grid as a separate namespace.

blueprint_*

The bridge DungeonBlueprint is itself a ComplexPlaceholder. It is registered into the one-off container built for each of the entry messages — creation-start, creation-success, failed-requirements, no-available-server, invalid-party-size.

Placeholder

Type

Description

%blueprint_id%

String

The blueprint id.

%blueprint_name%

Component

Its display name, resolved against the calling container.

%blueprint_key%

ItemStack

Its key item, resolved (but not stamped with the dungeons:blueprint PDC — this is the raw wrapper output, not a working key).

%blueprint_particle%

Particle

Its portal particle.

Bare %blueprint% resolves to the blueprint object itself.

data_* (bridge, reward-claim actions only)

DungeonPlayerData is itself a ComplexPlaceholder, but it is never registered into RootPlaceholderContainer — %data_*% is not globally available anywhere on the network. Instead, PlayerDataService#claimRewards (bridge) builds a one-off PlaceholderContainer for the returning player, registers the just-claimed DungeonPlayerData into it, and runs the bridge's reward-actions against that container. The placeholder is therefore scoped to that single action run.

Because the registration happens after DungeonCompletedEvent fires, the values a listener wrote are the ones these placeholders report.

Placeholder

Type

Description

%data_blueprintId%

String

The blueprint the run was for.

%data_experience%

double

Experience accumulated across the run.

%data_killedMobs%

int

Mobs this player personally killed.

%data_duration%

long

Run length in milliseconds, stamped when the player left the dungeon server.

%data_completed%

boolean

Whether the boss was defeated while this player was alive.

Any other sub-key (or none) resolves to null. The commands list carried by the same object is not exposed as a placeholder — claimRewards dispatches those separately from console, after the reward actions run, with %player_name% substituted into each command string.

# Bridge server config.yml reward-actions: - "[message] <gray>Run finished in <white>$e(%data_duration% / 1000)s<gray>, <white>%data_killedMobs%<gray> mobs killed." - "[message] Tu as win %data_experience% points d'expérience chef !"
Last modified: 25 September 2026