Staff Menus
The paper module owns every staff-facing punishment GUI. All of them are ordinary AstralCore menu blueprints under plugins/AstralPunishments/menus/punishments/, opened by MenuService with the data already fetched and wrapped as placeholders — so the blueprints stay pure YAML and can be restyled freely.
Blueprint | Menu id | Opened by |
|---|---|---|
|
|
|
|
|
|
|
| A history row |
|
| The detail menu's pardon button |
|
|
|
|
| The hub's addresses button |
|
|
|
The history, detail and pardon flow has its own page: Punishment History GUI.
The lookup hub
/lookup <player> opens punishment-lookup, a 27-slot router with one button per section. The three sections are pre-counted in parallel before the menu opens, so each button can show how many entries it holds before the viewer drills in.
Parameter | Value |
|---|---|
| The looked-up account ( |
| Number of punishments ever recorded against them. |
| Number of accounts sharing an address. |
| Number of addresses on record. |
Each button runs [lookup] with its section and %parameters_target_uuid%.
Alts
punishment-alts lists every account that has connected from an address this one has also used — exact-IP alt detection over ip_history, most recently shared connection first. Each row is enriched, in a single follow-up round-trip, with that account's live enforcement status, so the listing shows at a glance who is already banned or muted. Clicking a row opens that account's lookup hub, which is what makes walking an alt network a matter of clicking through it.
Rows are provided as %parameters_alts% under the alts layout taint and rendered through the alt placeholder namespace. An account with no alts gets the no-alts message and no menu.
IP history
punishment-ip-history lists every address the account has connected from, most recently seen first — %parameters_ips% under the ips taint, rendered through the ip namespace. Empty answers no-ip-history.
In-force listings
/banlist, /mutelist and /warnlist share one blueprint, punishment-list, differing only in the rows and headings passed to it: every punishment of those types currently in force network-wide, newest first, capped at 500 rows. /staffhistory <staff> uses the same blueprint for a different question — every punishment that staff member has issued, including lapsed and lifted ones, since the point there is what they handed out rather than what is still standing.
Parameter | Value |
|---|---|
| The rows, as |
| Per-listing labels and the header item's material. |
| How many rows are shown. |
Clicking a row opens that player's lookup hub. An empty result answers no-results and opens nothing.
[lookup]
The single navigation action behind the whole family — hub buttons, section back buttons and alt clickthroughs all go through it.
Arg | Type | Description |
|---|---|---|
|
| One of |
|
| The account to open the section for. |
Because it takes a UUID rather than a resolved player, the action re-resolves the account itself — which is why an alt row can route straight into another player's hub without the menu ever loading that player.
See also
Punishment History GUI — the history → detail → pardon flow.
Placeholders — the
punishment,altandipnamespaces these menus read.Commands — what opens each menu.