Astral Realms Documentation Help

Placeholders

AstralTower registers a tower placeholder namespace independently in each module — the paper module's TowerPlaceholder reads live in-instance state, the bridge module's TowerPlaceholder reads lobby-side ticket/queue state. Both are ComplexPlaceholders registered globally into RootPlaceholderContainer. For the placeholder syntax itself (%namespace_key%, %outer_{inner}%) see Placeholders.

tower_* (tower server)

Resolves only against a Player context; any other context (or none) returns null.

Placeholder

Type

Description

%tower_coins%

int

The player's in-session coin count from the in-memory PlayerDataService (loaded on PlayerJoinTowerInstanceEvent, dropped on quit). Resolves to 0 if the player has no loaded PlayerData (not currently in a tower instance).

%tower_room%

RoomInstance (chain point)

The player's current room, resolved via InstanceService#findByPlayer. null if the player isn't in a tower instance. See room sub-keys below.

%tower_inInstance%

boolean

Whether the player is currently inside a tower instance.

Any other sub-key (or none) resolves to null.

lines: - "<gray>Coins this run: <gold>%tower_coins%" - "<gray>In a tower instance: <yellow>%tower_inInstance%"

tower_room_* sub-keys

RoomInstance is itself a ComplexPlaceholder (namespace room) — chained under %tower_room_<key>%. A bare %tower_room% (no sub-key) resolves to the RoomInstance object itself (its toString()).

Placeholder

Description

%tower_room_index%

The room's position in the generated sequence (int, 0-based).

%tower_room_phase%

The room's RoomPhase name — SPAWNING, COMBAT, REWARDS, END_REWARDS, or COMPLETE.

%tower_room_rewardType%

The RoomRewardType name the room was entered with — ARTIFACTS, COINS, SHOP, BOSS, or NONE.

%tower_room_type%

The room blueprint's RoomType (e.g. LOBBY, MONSTERS, SHOP, BOSS).

%tower_room_mobs%

Count of still-valid (alive) mob entities currently tracked for the room.

%tower_room_mobCount%

The room's configured total mob count (mobs.yml's count for that room index), independent of how many have died so far.

%tower_room_completed%

Whether the room's phase is COMPLETE.

lines: - "<gray>Room <yellow>%tower_room_index%<gray> — <yellow>%tower_room_phase%" - "<gray>Enemies remaining: <red>%tower_room_mobs%<gray>/<yellow>%tower_room_mobCount%"

tower_* (lobby)

A separate ComplexPlaceholder (also namespace tower) registered by the bridge module. Resolves only against a Player context.

Placeholder

Description

%tower_tickets%

The player's TowerPlayerData.tickets() (AstralSync player data), as a string. Resolves to "0" if the player has no TowerPlayerData loaded.

%tower_status%

The lobby's tower-queue status component — queue-status-paused if InstanceService#isQueuePaused(), else queue-status-active. See /tower pause/resume.

Any other sub-key (or none) resolves to null.

lines: - "<gray>Dimensional passes: <gold>%tower_tickets%" - "<gray>Tower status: %tower_status%"

Because this namespace only exists on the lobby and the paper module's tower namespace only exists on tower servers, %tower_*% always resolves against whichever module is actually running on that server — the two never collide at runtime.

Last modified: 25 July 2026