Astral Realms Documentation Help

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