Commands
AstralRanks registers two ACF commands: /ranks (menu entry point plus admin subcommands) and /mission (shortcuts into the current rank's mission menus). Every permission node is collected in the Permission summary.
/ranks
Aliases: ranks, rangs, rang, rank.
Subcommand | Syntax | Permission | Player-only | Description |
|---|
(default) | /ranks
| none | Yes | Opens the ranks-list menu (see The ranks-list menu). |
broadcast
| /ranks broadcast <rankId>
| astralranks.broadcast
| Yes | Looks up <rankId> via RankService#findById and re-sends the unlock-broadcast message (see Unlocking a rank) to the sender, formatted with that rank's %rank_...% placeholders — a way to preview the unlock-announcement format for a given rank without actually unlocking it. Replies Rank not found: <rankId> if the id doesn't resolve. |
list
| /ranks list
| astralranks.list
| No | Prints every loaded rank id (the keys of RankService#all) to the sender, one per line under an "Available Ranks:" header. Works from console. |
reset
| /ranks reset <player>
| astralranks.reset
| No | Clears the target's PlayerRankData — both the progress and completedCategories maps — via SyncAPI#findData; the categoryQuestsDisplay field is left untouched. <player> must be online (tab-completed with @players). Works from console; replies if no PlayerRankData is found for the target. |
reload
| /ranks reload
| astralranks.reload
| No | Reloads config.yml, categories.yml, messages.yml, the rank chain, and the menus (AstralRanks#loadConfiguration). Works from console. |
/mission
Aliases: mission, missions. Both invocations are player-only.
Invocation | Description |
|---|
/mission
| Opens the rank-details mission menu for the player's next rank (RankService#getNextRank, see Rank Details). If the player has no next rank (e.g. already at the top of the chain), sends the RANK_NOT_FOUND message instead (see Rank & requirement lookups). |
/mission <category>
| Opens the ranks-requirements menu (see Ranks Requirements) for <category> against the player's next rank. <category> is a RequirementCategory id from categories.yml — resolved by CategoryContextResolver and tab-completed via the @categories completion (CategoryCompletionHandler), which lists every category id currently loaded (AstralRanks#categoriesConfiguration). An unknown id is rejected with Category '<input>' not found. before the handler runs. |
Permission summary
Node | Grants |
|---|
astralranks.broadcast
| /ranks broadcast <rankId>
|
astralranks.list
| /ranks list
|
astralranks.reset
| /ranks reset <player>
|
astralranks.reload
| /ranks reload
|
/ranks (default, opens the ranks list) and both forms of /mission require no permission node — any player can open the rank/mission menus.
Command infrastructure
The <category> argument on /mission is wired through two ACF hooks, both registered in AstralRanks#onEnable:
registerCompletion("categories", new CategoryCompletionHandler(this)) — backs the @categories tab-completion, streaming RequirementCategory::id for every category currently loaded from categories.yml.
registerContext(RequirementCategory.class, new CategoryContextResolver(this)) — resolves the raw argument string into a RequirementCategory (case-insensitive id match), so MissionCommand's second @Default overload can take a typed RequirementCategory parameter directly instead of a raw string.
Last modified: 25 July 2026