Astral Realms Documentation Help

Commands

Every skyblock command shares one ACF base command registered with three interchangeable aliases: /skyblock, /is, /island (@CommandAlias("skyblock|is|island"), declared identically on SkyblockCommand, InvitationCommand, MemberCommand and CoopCommand). This page uses /is in examples. All subcommands below are player-only except /is reload, which also accepts the console.

Most subcommands are not gated by a Bukkit permission node at all — access is controlled by the caller's in-island permission (an IslandPermission value checked against their role via Island#hasPermission), not by @CommandPermission. See Permissions below for the one exception and for the skyblock.admin bypass node.

Island

Registered by SkyblockCommand.

Command

Description

In-island permission

/is

Opens the island-main menu for the caller's island.

/is create [name] [blueprint]

Creates a new island.

/is delete <island>

Deletes an island (database row and world).

/is go <island>

Loads and teleports the caller to an island.

/is reload

Reloads the plugin configuration.

skyblock.reload (Bukkit)

  • /is — resolves the caller's island via members().findPlayerIsland(...) and opens the island-main menu with it. If the caller has no island, the command currently does nothing: the creation-menu fallback is a // TODO: Open creation menu in source and is not implemented in this version.

  • /is create [name] [blueprint] — both arguments are optional (@Nullable @Optional) despite the <name> <blueprint> syntax hint. If name is omitted or blank, it defaults to the caller's username; if blueprint is omitted, it defaults to BlueprintService#defaultBlueprint() (the blueprint flagged default: true in its file — see Islands). Fails with NAME_ALREADY_TAKEN if the resolved name is already in use. The command does not check whether the caller already owns an island before creating another one. Tab-completes <blueprint> with @islandBlueprints.

  • /is delete <island> — resolves <island> by exact name (see Argument resolution) and calls IslandService#delete directly. Neither the command nor the service performs an ownership or permission check — any player who can name (or tab-complete via @islands) an island can request its deletion.

  • /is go <island> — resolves the island's host server (or loads it on the network's emptiest island-capable server if it isn't hosted anywhere), then teleports the caller there through the core TeleportationService. Like delete, no ownership check is performed.

  • /is reload — works for console senders too (CommandSender, not Player). Re-invokes AstralSkyblock#loadConfiguration(), which reloads config.yml, loader.yml, roles.yml, block-values.yml, messages.yml, settings.yml and permissions.yml. See Configuration.

Invitations

Registered by InvitationCommand. Invitations expire 15 minutes after creation (IslandInvitation.create, hardcoded — not a config value).

Command

Description

In-island permission

/is invite <player>

Sends a member invitation.

INVITE_MEMBER

/is coop <player>

Sends a co-op invitation.

COOP_MEMBER

/is accept [player]

Accepts a pending invitation.

/is decline [player]

Declines a pending invitation.

/is cancel <player>

Cancels an invitation the caller sent.

  • /is invite//is coop — both fail with NO_ISLAND if the caller has no island, and with NO_PERMISSION if the caller's role lacks INVITE_MEMBER/COOP_MEMBER. Both delegate to InvitationService#create, which silently no-ops (no message) if the recipient is already a member (or already coop, for COOP invitations) or already has a non-expired invitation from that island.

  • /is accept [player]//is decline [player] — with <player> given, resolves that sender's non-expired invitation specifically and fails with NO_PENDING_INVITATION if none exists. Without an argument, looks at all of the caller's non-expired invitations: zero sends NO_PENDING_INVITATION, exactly one is auto-accepted/declined, and more than one sends MULTIPLE_PENDING_INVITATIONS (the caller must re-run with a sender specified).

  • /is cancel <player> — fails with NO_ISLAND if the caller has no island. InvitationService#cancel additionally requires the caller to be the original sender of the pending invitation, otherwise it behaves as if no invitation exists (INVITATION_NOT_FOUND).

All four target-taking subcommands tab-complete <player> with @networkPlayers.

Members

Registered by MemberCommand. Role comparisons use each IslandRole's weight(); the promote/demote ladder is the island's non-owner (MEMBER-kind) roles sorted ascending by weight.

Command

Description

In-island permission

/is kick <player>

Removes a member from the island.

KICK_MEMBER

/is leave

Leaves the caller's island.

/is promote <player>

Promotes a member one step up the role ladder.

PROMOTE_MEMBERS

/is demote <player>

Demotes a member one step down the role ladder.

DEMOTE_MEMBERS

/is transfer <player>

Transfers island ownership to a member.

owner only

  • /is kick — the island owner can never be kicked (MEMBER_HIGHER_ROLE); a non-owner kicker must also outrank the target's role weight.

  • /is leave — blocked for the island owner (OWNER_CANNOT_LEAVE); the owner must /is transfer first.

  • /is promote//is demote — fail with MEMBER_ALREADY_HIGHEST_ROLE/MEMBER_ALREADY_LOWEST_ROLE at the ends of the ladder; a non-owner sender cannot promote a target to or above their own role weight, and must outrank the target to demote them (MEMBER_HIGHER_ROLE/MEMBER_PROMOTE_HIGHER).

  • /is transfer — checked directly against island.owner() rather than an IslandPermission (NOT_ISLAND_OWNER if the caller isn't the owner). <player> must already be a member (MEMBER_NOT_FOUND otherwise). On success the ex-owner is demoted to the island's highest-weight MEMBER-kind role and the target becomes owner.

<player> tab-completes with @islandMembers on all five subcommands (members of the caller's island, excluding the caller).

Co-ops

Registered by CoopCommand. See Members, Co-ops & Invitations for how co-op players differ from full members.

Command

Description

In-island permission

/is uncoop <player>

Removes a co-op player from the island.

UNCOOP_MEMBER

Fails with NO_ISLAND if the caller has no island, NO_PERMISSION if the caller's role lacks UNCOOP_MEMBER, and COOP_NOT_FOUND if <player> isn't currently a co-op of the island. Unlike the member-management subcommands, <player> tab-completes with the generic @players (any online player), not @islandMembers.

Permissions

Node

Kind

Grants

skyblock.reload

Bukkit (@CommandPermission)

/is reload. The only ACF @CommandPermission node in the plugin.

skyblock.admin

Bukkit (checked directly in code, not via ACF)

Bypasses every in-island IslandPermission check made by Island#hasPermission (used by all the INVITE_MEMBER/COOP_MEMBER/KICK_MEMBER/PROMOTE_MEMBERS/DEMOTE_MEMBERS/UNCOOP_MEMBER checks above), as well as Island#canEditRole's owner/role-edit check.

Neither node is declared in plugin.yml (no permissions: block), so both fall back to Bukkit's default behavior for undeclared permissions (operators only).

Everything else is gated by the island's own role system — an IslandPermission value looked up on the caller's IslandRole (owners always pass; co-op players are checked against the island's COOP-kind role). See Roles, Permissions & Settings for the full IslandPermission list and how roles assign them.

Argument resolution

Two custom ACF context resolvers back the command arguments above:

Type

Resolver

Behavior

IslandBlueprint

IslandBlueprintContextResolver

Pops the first argument and resolves it with blueprints().findById(name); throws InvalidCommandArgument if not found.

Island

IslandContextResolver (issuer-aware)

Pops the first argument. If it's absent and the parameter is @Optional, resolves to null. If it's absent and the command isn't carrying a real flag, falls back to the caller's own island via members().findPlayerIsland(...). Otherwise resolves by exact name via islands().repository().findByName(name), throwing InvalidCommandArgument if no island has that name.

MinecraftPlayer arguments (used by invite/coop/accept/decline/cancel/kick/promote/demote/transfer/uncoop) resolve through AstralCore's context resolver, not one registered by this plugin.

Tab completion

Handler

Registered as

Source

IslandBlueprintCompletionHandler

@islandBlueprints

blueprints().keys() — every loaded blueprint id.

IslandCompletionHandler

@islands

islands().repository().names() — every island on the server.

IslandMemberCompletionHandler

@islandMembers

Names of the caller's island's members, excluding the caller; empty if the caller has no island.

@networkPlayers and @players are AstralCore-provided completions, not registered by this plugin.

Last modified: 25 July 2026