Astral Realms Documentation Help

Commands

AstralDungeons registers a single base command, /dungeon, from two independent ACF BaseCommand classes — one shipped in the bridge module (the lobby) and one in the paper module (dungeon servers) — with different aliases, class-level permissions and subcommands. See Overview: Two-module architecture for how the two builds relate.

Every subcommand method takes a Player as its first parameter, so all subcommands are player-only — none of them are console-runnable.

/dungeon (lobby)

Registered by the bridge module's DungeonCommand. Aliases: /dungeon, /dungeons, /dg (@CommandAlias("dungeon|dungeons|dg")). The base command carries no class-level permission.

Subcommand

Syntax

Permission

Description

(default)

/dungeon

Placeholder only: replies Not implemented. A source TODO marks it as intended to eventually open a menu.

create

/dungeon create <blueprintId>

Creates a dungeon instance for the player's party. See /dungeon create below.

reload

/dungeon reload

dungeons.reload

Reloads the bridge's configuration — plugin.loadConfiguration() reloads config.yml only on this module. See Configuration.

/dungeon create <blueprintId>

Requires the player to already be in an AstralParty party, resolved with PartyAPI#findByPlayer. If they aren't, the command replies You must be in a party to create a dungeon instance. and stops there.

Otherwise it calls ServerService#createInstance(player, party, blueprintId), which dispatches the creation request to every connected dungeon server and teleports the requesting player plus the rest of the party to whichever eligible server accepts it — effectively the emptiest server able to host that blueprint. See Overview: Creating a dungeon instance for the full request/response flow, and Dungeon & Room Blueprints for what a blueprint ID refers to. On success the player sees Dungeon instance created successfully!; on failure (RPC error, or no eligible server accepted the request) an error message is shown instead.

blueprintId tab-completes with @dungeonBlueprints — see Tab completion.

/dungeon (dungeon server)

Registered by the paper module's DungeonCommand. Aliases: /dungeon, /dungeons (@CommandAlias("dungeon|dungeons")). The class-level @CommandPermission("dungeons.command") gates the entire base command, so every subcommand on this module also requires dungeons.command.

Subcommand

Syntax

Permission

Description

reload

/dungeon reload

dungeons.command + dungeons.reload

Reloads config.yml, messages.yml, and every room/dungeon blueprint — plugin.loadConfiguration() on this module also calls blueprints.load(). See Dungeon & Room Blueprints and Configuration.

Tab completion & argument resolution

Name

Module

Registered as

Source

@dungeonBlueprints

Bridge

DungeonBlueprintCompletionHandler

ServerService#availableBlueprints() — the union of blueprint IDs offered by dungeon servers that still have a free instance slot, i.e. blueprints creatable right now across the network. Backs /dungeon create's blueprintId argument.

@dungeons

Dungeon server

DungeonCompletionHandler

plugin.blueprints().dungeons() keys — the blueprint IDs loaded locally on that server. Not currently wired to any subcommand argument.

The paper module also registers a DungeonBlueprint context resolver (DungeonContextResolver, via registerContext(DungeonBlueprint.class, ...)), which pops the next raw argument and resolves it to a DungeonBlueprint through plugin.blueprints().findDungeon(...), throwing an invalid-argument error (Dungeon blueprint not found: <id>) if no blueprint with that ID is loaded. It is registered but not currently consumed by any subcommand parameter on either module.

Permission summary

Node

Module

Grants

dungeons.command

Dungeon server

Class-level gate on the entire /dungeon base command. The bridge's base command has no equivalent — its subcommands are reachable by anyone, subject to their own checks (e.g. create requires party membership).

dungeons.reload

Both

/dungeon reload. On the lobby, reloads the bridge's config.yml. On a dungeon server, reloads config.yml, messages.yml and all room/dungeon blueprints — and also requires dungeons.command there.

Last modified: 25 July 2026