Commands
All commands are registered through ACF (co.aikar.commands) against a PaperCommandManager. Permission nodes are unprefixed (essentials.*) except two: the cooldown bypass (cooldown.bypass) and the command-blocking bypass (astralessentials.bypass.commandblock), both described under Cooldowns and Command gating below. Commands listed under unregistered-commands in config.yml are removed from the server entirely — see Installation — and /essentials reload (below) can be used to re-apply that list after editing it.
Gamemode
/gamemode (alias /gm)
Class-level permission essentials.gamemode gates the whole command (both variants below).
Invocation | Extra permission | Description |
|---|---|---|
|
| Change your own game mode. |
|
| Change another player's game mode. |
<mode> is resolved by a custom GameMode context resolver and accepts, as literal (case-sensitive, not lower-cased) tokens: 0/s/survival, 1/c/creative, 2/a/adventure, 3/sp/spectator. Any other value throws an invalid-argument error before the command body runs. Tab-completion (@gamemodes) only offers the tokens for modes the sender holds essentials.gamemode.<mode> for — it is not filtered by the .others permissions for the target-player form.
A denied mode change (missing essentials.gamemode.<mode>/.others.<mode>) sends a hardcoded red/bold "You don't have permission to change to that game mode." message — this one is not sourced from messages.yml/EssentialsMessages, unlike the rest of the command's feedback.
Compact aliases
Alias | Mode |
|---|---|
| Survival |
| Creative |
| Adventure |
| Spectator |
All eight aliases are registered on one command class, gated the same way as /gamemode: class-level essentials.gamemode, plus essentials.gamemode.others (method-level) for the <player> form. The mode is inferred from the alias actually typed (getExecCommandLabel()), not from an argument.
Speed
Permission essentials.speed for the whole command.
Invocation | Description |
|---|---|
| Set fly speed if you're currently flying, otherwise set walk speed. Defaults to |
| Set fly speed explicitly. |
| Set walk speed explicitly. |
The integer argument (0–10, default 1) is divided by 10 to produce the Bukkit speed float (e.g. 5 → 0.5).
Heal & feed
Invocation | Permission | Cooldown key |
|---|---|---|
|
|
|
|
| (none — no cooldown check on the others path) |
|
|
|
|
| (none) |
/heal fully heals (Attribute.MAX_HEALTH); /feed sets food level and saturation to 20. The <player> forms take a CommandSender, so they can be run from console, and only message the target and the sender — they do not consult the cooldown system at all.
Movement & world interaction
Command | Permission | Description |
|---|---|---|
|
| Teleport to the highest safe block at your column. In the Nether, searches downward from |
|
| Extinguish yourself ( |
|
| Wear the item in your main hand as a helmet. Your previous helmet is returned to your inventory, or dropped at your feet if it doesn't fit. Fails on an empty main hand. |
| (none) | Sit on the slab or stair block you're looking at (within 5 blocks). Fires a synthetic |
|
| Toggle the lit state of the candle block you're looking at (within 5 blocks). Lighting fires a synthetic |
Sudo
Invocation | Permission | Description |
|---|---|---|
|
| Forces |
Per-player time & weather
/playertime (alias /ptime)
Permission essentials.ptime for the whole command.
Invocation | Description |
|---|---|
| Set your personal time. If |
| Reset to server time ( |
/pweather
Invocation | Permission | Description |
|---|---|---|
|
| Set your personal weather. Unlike the gamemode argument, this token is matched case-insensitively ( |
Both commands persist their state through SyncAPI in a PlayerTimeData record so it follows the player across servers — see AstralSync integration.
Inventory commands
Command | Aliases | Permission | Opens |
|---|---|---|---|
|
|
| A virtual crafting table ( |
| — |
| AstralItems' custom anvil ( |
|
|
| A virtual stonecutter ( |
|
|
| Your own ender chest inventory. |
|
| (none) | A trash-bin GUI sized and titled from |
/trash has no permission requirement in source. Closing it with items still inside triggers a confirmation flow ([confirm-trash]/[refund-trash] actions) — see the Overview's trash-bin summary.
Item utilities
Command | Aliases | Subcommand | Permission | Cooldown key |
|---|---|---|---|---|
|
| (default), |
|
|
|
|
|
| |
|
| (default) |
|
|
|
|
|
| |
| — | (default) |
|
|
|
|
|
| |
|
| (default) |
| — |
|
|
| — | |
| — | (default) |
|
|
|
|
|
| |
| — | (default) |
|
|
|
|
|
|
/repair (hand or all) resets Damageable durability on items that have item meta and are not AstralItems custom items (ItemsAPI.isCustomItem); it's a no-op message (not a failure) if nothing in scope is repairable. /furnace and /condense look up the input material against the live Bukkit recipe iterator (/furnace) or the condensable-items config map (/condense) respectively; all variants batch across your whole inventory and deliver the output through AstralCore's MailboxService.giveOrAdd — added directly if there's room, otherwise queued to your mailbox with a chat notification — whereas the single-item variants place the result back in your main hand (/furnace) or hard-fail with an inventory-full message if it doesn't fit (/condense). /strip and /concrete both replace the held item(s) in place (stripped log/wood, or concrete powder → concrete) and don't touch the mailbox.
/xpbottle (alias /bottlexp)
type(leveldefault, orexp, tab-completed via@expTypes) selects whether<amount>is interpreted as player levels (converted withExperienceUtils.getExperienceFromTotalLevels) or raw XP points.bottles(default1) is how many bottles to fill; the plugin removestotalExp * bottlesXP from the player up front and fails with a not-enough-experience message if that exceeds what they have./xpbottle all [amount](defaultamount=1) drains the player's entire current experience acrossamountbottles instead.Both paths abort with an inventory-full message if the player has no completely empty slot — checked once up front, not per bottle produced.
Each bottle is built from the
xp-bottleconfig entry and tagged with its XP value in aastralessentials:exp_bottlepersistent-data key, consumed byExperienceBottleListeneron use.
Admin
Command | Permission | Description |
|---|---|---|
|
| Reload |
essentials.command is a class-level @CommandPermission, so it gates the entire /essentials base command. See Installation § Reloading configuration for the exact reload sequence and what it does not re-run.
Cooldowns
cooldowns.yml defines a Duration per throttled command, tracked per player through AstralCore's CooldownService under the key astralessentials:<command>. A zero/negative duration disables that command's cooldown. Players with the bare cooldown.bypass permission skip every cooldown check outright.
Key | Default (shipped | Command |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| (not present — see below) |
|
| (not present — see below) |
|
|
|
|
|
|
|
Being on cooldown sends COMMAND_ON_COOLDOWN with the remaining time (DurationParser.toHumanReadable) exposed as the time placeholder, and blocks the command.
Two source-level notes:
CooldownConfigurationhasstrip/stripAllfields (used by/strip), but the shippedcooldowns.ymlresource only defines the ten keys above —stripandstrip-allare absent from the default file./strip all's cooldown key isstrip_all(underscore), while every other multi-word key in this plugin uses a hyphen (condense-all,furnace-all,repair-all,concrete-all) — so itsCooldownServicekey isastralessentials:strip_all, notastralessentials:strip-all.
Two check patterns are used across these commands: /feed, /heal, /repair (hand), /furnace (single item), and /strip (single item) call checkCooldown, which checks and arms the cooldown in one call — the cooldown starts as soon as the pre-conditions pass. /repair all, /furnace all, /condense, /condense all, /strip all, /concrete, and /concrete all call isInCooldown up front and only call setInCooldown after the operation actually affected at least one item — no cooldown is applied if nothing happened.
Completions & context resolvers
Name | Kind | Used by | Behavior |
|---|---|---|---|
| Async completion |
| Offers |
| Context |
| Parses the raw first argument into a |
| Completion |
| Static list: |
| Completion |
| Static list: |
| Completion |
| Standard ACF online-player completion (not registered by this plugin). |
| Completion |
| Standard ACF numeric-range completion. |
| Completion |
| A static pipe-delimited literal list, not |
Player-only vs console
Most commands on this page take a Player as their method's first argument, so they can only be run by a player in-game (ACF rejects console/command-block invocation before the method body runs). The exceptions that accept a CommandSender — and so can be run from console — are the <player>-targeting forms: /gamemode <mode> <player>, /gms… /gm3 <player>, /heal <player>, /feed <player>, /sudo, and /essentials reload.
EssentialsMessages declares a PLAYER_ONLY_COMMAND entry (player-only-command in messages.yml), but no command class in this plugin actually sends it — none of the Player-only commands catch and re-message a console invocation. In practice, a console/command-block attempt at a player-only command falls back to ACF's own built-in "player only" handling rather than this plugin's message.
Command gating
Beyond permissions, CommandListener can remove a command before it ever reaches ACF, keyed off MainConfiguration:
blocked-commands— command labels blocked everywhere; a match is also stripped from tab-completion and fromPlayerCommandSendEvent's command list (so it doesn't even show as "known").groups-blocked-commands— keyed by the server's own group (AstralPaperAPI.serverInformation().group(), e.g.resource), each entry listing a set of blocked command labels; a match sendsCOMMAND_DISABLED_IN_WORLDand cancels the command (unlikeblocked-commands, it isn't hidden from tab-completion). Each entry's config schema also has aworldsfield, butisCommandBlockedInGroupnever reads it — blocking currently applies to the whole server group, not to specific worlds within it, despite the field's name. See World & Server Management § Command Restrictions for the full breakdown.Players holding
astralessentials.bypass.commandblockskip both checks (note theastralessentials.prefix — unlike every other permission on this page, which is unprefixedessentials.*).
Separately, the custom Nether/End portals (not chat commands, but gated the same way conceptually) check an AstralCore requirement list before teleporting — by default a [permission] world.nether/[permission] world.end node — with configurable deny-actions on failure. See World & Server Management § Custom Portals for the full configuration reference for both of these systems.
Permission summary
Node | Grants |
|---|---|
| Base node for |
| Changing your own mode to that mode (self, on any gamemode command). |
|
|
| Changing another player's mode via |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Skip every command cooldown (bare node, not |
| Skip |
/sit and /trash//poubelle have no permission requirement in source.