Astral Realms Documentation Help

Placeholders

AstralPunishments registers three placeholder namespaces on the paper module — punishment, alt and ip — all ComplexPlaceholders. None is globally registered: an instance only becomes resolvable once the matching record is placed into scope, which happens when MenuService wraps the rows it fetched and opens a staff menu with them. For the placeholder syntax itself (%a_b_c%, chaining, $e(...)) see Placeholders.

The punishment namespace is also used outside the menus: the mute messages (chat-muted/command-muted) render %punishment_reason% and %punishment_remaining%.

punishment_*

Placeholder

Type

Description

%punishment_id%

UUID

The punishment's uniqueId.

%punishment_type%

PunishmentType

BAN, IPBAN, MUTE, KICK, or WARN.

%punishment_icon%

ItemStackWrapper

The type's icon from display.yml (display().icons().get(type)).

%punishment_player%

MinecraftPlayerPlaceholder

The target, chainable into any player_*-style sub-key.

%punishment_operatorId%

UUID

The issuing operator's id, or null for console.

%punishment_operatorName%

String

The issuing operator's name, or "Console" if null.

%punishment_reason%

String

The punishment's reason, or "Aucune" (French for "none") if unset.

%punishment_createdAt%

TimePlaceholder

When the punishment was issued — chain _format for a rendered date/time.

%punishment_expiresAt%

TimePlaceholder

When it expires, or null if isPermanent().

%punishment_duration%

String

"Permanent", or the human-readable span between createdAt and expiresAt (DurationParser.toHumanReadable).

%punishment_remaining%

String

"Permanent", or the human-readable time left before it lapses — for messages shown to the punished player.

%punishment_status%

String

"Révoquée" (pardoned) / "Expirée" (lapsed) / "Active" — French, mirroring the paper messages.yml locale.

%punishment_active%

boolean

The raw active column.

%punishment_expired%

boolean

isExpired() — active is true but past expiresAt.

%punishment_permanent%

boolean

isPermanent() — expiresAt is null or -1.

%punishment_pardonable%

boolean

true only when active && !expired and type is BAN, IPBAN, MUTE or WARN — gates the Pardon button in the detail menu. A KICK is never pardonable.

%punishment_removedById%

UUID

Who pardoned it, or null if still active/never pardoned.

%punishment_removedByName%

String

Pardoner's name, or "Inconnu" ("unknown") if null.

%punishment_removedAt%

TimePlaceholder

When it was pardoned, or null if never pardoned.

%punishment_removedReason%

String

The pardon reason, or "Aucune" if unset.

alt_*

One linked account, per row of the alts menu. A bare %alt% resolves to the account's UUID.

Placeholder

Type

Description

%alt_id%

UUID

The account's id — what the row's [lookup] hub … action takes.

%alt_player%

MinecraftPlayerPlaceholder

The account, chainable into any player_*-style sub-key (head, name, …).

%alt_name%

String

Last known name, or "Inconnu" when unknown.

%alt_lastSeen%

TimePlaceholder

When the address was last shared — chain _format for a rendered date.

%alt_sharedIps%

int

How many addresses this account shares with the looked-up one.

%alt_banned%

boolean

Whether the account is banned right now.

%alt_muted%

boolean

Whether it is muted right now.

%alt_status%

String

A short summary of the two for inline display ("Banni & Muet", …).

ip_*

One recorded address, per row of the IP-history menu. A bare %ip% resolves to the address.

Placeholder

Type

Description

%ip_address%

String

The address.

%ip_name%

String

The name last seen on it, or "Inconnu".

%ip_firstSeen%

TimePlaceholder

First connection from it — chain _format.

%ip_lastSeen%

TimePlaceholder

Most recent connection from it.

Where these are consumed

File

Usage

menus/punishments/history.yml

Row icon (copy-from: "%parameter_punishment_icon%"), lore (reason, operatorName, createdAt_format, duration, status), and the click action [open-menu] punishment-detail:punishment=%parameter_punishment%:....

menus/punishments/detail.yml

Full info block; view-requirements gating the Retrait (revocation) block on %parameters_punishment_active% == false and the Pardon button on %parameters_punishment_pardonable% == true.

menus/punishments/confirm-pardon.yml

Confirmation summary; [pardon-punishment] %parameters_punishment_id% %parameters_target_uuid% action.

menus/punishments/lookup.yml

Hub buttons; %parameters_historyCount%/_altCount%/_ipCount% and [lookup] <section> %parameters_target_uuid%.

menus/punishments/alts.yml

Rows from the alts taint, rendered through %parameter_alt_*%; [lookup] hub %parameter_alt_id%.

menus/punishments/iphistory.yml

Rows from the ips taint, rendered through %parameter_ip_*%.

menus/punishments/list.yml

Rows from the punishments taint; [lookup] hub %parameter_punishment_player_uuid%, plus %parameters_heading%/_subheading%/_icon%/_count%.

messages.yml (paper)

chat-muted/command-muted read %punishment_reason% and %punishment_remaining%.

See Punishment History GUI for how punishment enters menu scope via the punishments layout taint vs. the parameters_punishment open-parameter, and the [pardon-punishment] action that consumes %punishment_id% directly.

Last modified: 25 September 2026