commands - STEMMechanics/STEMCraft GitHub Wiki
Commands are registered from four places:
- standalone command classes in
dev.stemcraft.command - feature-owned registrations
- service-owned registrations
- minigame command classes
The list below reflects the active built-in command roots in source.
| Command | Owner | Notes |
|---|---|---|
/stemcraft |
STEMCraftCommand |
Status, version, explicit STEMCraft/extension saves, reload, and first-join administration |
/maintenance |
STEMCraft.java |
Toggles server maintenance mode |
/webserver |
WebServiceImpl |
Embedded web server control, status and a clickable HTTP diagnostic URL |
/world |
WorldCommand |
World lifecycle, inspection, settings, and join/leave command editing |
/resourcepack |
ResourcePackCommand |
Pack delivery, pack builds and a clickable download URL |
/namedregion |
NamedRegions |
Inspect, find, teleport to, rename, retire, release, and regenerate named areas; see Named Regions |
/hologram |
HologramServiceImpl |
Hologram creation and editing |
/mail |
Mailboxes |
Compose item and message deliveries (mailbox admin) |
/mailbox |
Mailboxes |
Send letter-only mail and administer the delivery queue |
/quest |
QuestFeature |
Player quest journal and administration |
/audit |
AuditServiceImpl |
Audit review |
/moderation |
ChatServiceImpl |
Moderation incident review |
/reports |
ChatServiceImpl |
Player report review |
/profanity |
ProfanityFilterServiceImpl |
Filter inspection and management |
/muteall |
ChatServiceImpl |
Global chat mute control |
/ban, /unban, /kick, /warn
|
PunishmentServiceImpl |
Punishment management |
/report |
ChatServiceImpl |
Player report submission |
The configured /help wilderness and /stembot wilderness topic checks that the
player is in a Survival overworld, then uses exit-region:survival-old-terrain to
give the closest direction out of the supplied area, distance and coordinates.
Topics, world restrictions and dialogue live in stembot.yml. The same
require-world and exit-region instructions can serve other topics and regions.
See STEMBot for bounds and custom-script setup.
Use /webserver or /webserver status to see whether the embedded server is
running, its listening address, and a clickable /status URL. Successful
/webserver start and /webserver stop commands confirm their outcome to the
player. A failed start reports failure to the player and logs the cause.
Direct connections to the embedded server use HTTP. An HTTPS public URL
requires a reverse proxy that terminates TLS and forwards HTTP to this server.
web_server.ip: "127.0.0.1" accepts local connections, such as a local reverse
proxy. For direct connections from other computers, bind to "0.0.0.0" and
forward/allow the configured port, then set web_server.public-url to the
address clients can reach.
Open the /status link from the affected computer first, then use
/resourcepack url to test the pack download. If no request appears in the log,
the request did not reach the HTTP handler: check the protocol, address, port,
proxy, and firewall. Handler failures log their exception and return HTTP 500
when a response has not already started. Quest editor access codes stay redacted
from request log paths.
Use /resourcepack url (or /respack url) to print the current download address
as a clickable link. Open it in a browser on the affected player's computer to
check whether that computer can download the pack. The address includes the same
version parameter used when sending the pack to Minecraft. This command displays
the URL without requesting an in-game download or rebuilding the pack.
It requires stemcraft.command.resourcepack, like the other resource pack commands.
Tab completion offers info, send, sendall, url and zip; player names are
offered after send.
Create one rotating arena-stat board with /hologram create minigame_leaderboard.
Boards render only while their chunks are loaded; automatic rotation does not load unattended chunks. Returning renders the current page once. Reloading STEMCraft rebuilds tracked boards. Unlinked nameplates remain for manual cleanup.
Default leaderboard rows use columns: ranks and names align left, and scores or
times align right. This also applies to stat_leaderboard and Parkour/Boat Race
record boards. Rows fit the longest entry with a minimum two-space gap between
the name and score/time, measured in the default Minecraft font. Spaces leave at most
three pixels of rounding. Titles remain centered. Custom line= and first=
templates retain their formatting; add {gap} between the name and score/time
to align the right column, and {rank-gap} after the rank to align names.
It discovers arena-scoped minigame stats and shows one arena at a time. Wins are
used when available; otherwise it prefers goals, scores, then a stat by key.
The default rotation delay is 20 seconds. Configure or disable timed rotation
with /hologram cycle delay <seconds> (0 disables timed rotation), then set a
single manual advance button with /hologram cycle button set while looking at
it, or remove it with /hologram cycle button clear. Setting these options
requires stemcraft.command.hologram; any player can press the configured
button. The board accepts the stat leaderboard options limit, period, line,
and first as pipe-separated data after the type.
Use /hologram delete -range 4 to delete all registered STEMCraft holograms
within four blocks of your position in the current world. Add -limit 1 to
delete only the nearest one. The limit is optional; candidates are ordered from
closest to furthest, with the lower hologram ID first when distances tie.
Distance is measured to the saved board position, as with /hologram closest.
Positive decimal ranges are accepted, and the two flags can appear in either order.
Deleting by ID still works, including from the console. Range deletion requires
a player and the existing stemcraft.command.hologram permission.
Deletion removes registered boards and their tracked rows. It does not remove unlinked nameplates, Citizens displays, or other plugins' entities. Reload and shutdown likewise leave untracked entities alone.
For explicit cleanup of old STEMCraft-tagged static rows, stand nearby and run:
/minecraft:kill @e[type=minecraft:armor_stand,distance=..4,nbt={Tags:["stemcraft:hologram"]},nbt=!{Tags:["stemcraft:dynamic-hologram"]}]
This also removes any active STEMCraft rows in that radius. It requires the
minecraft.command.kill and minecraft.command.selector permissions; see
Paper's permissions reference.
Use NBT filters for these colon-containing tag names. Minecraft's tag= selector
reads an unquoted word and does not accept these names, even with quotes. The
selector above was verified with Mojang's Minecraft 26.2 parser.
From the server console, use the player's location instead:
minecraft:execute at <player> run minecraft:kill @e[type=minecraft:armor_stand,distance=..4,nbt={Tags:["stemcraft:hologram"]},nbt=!{Tags:["stemcraft:dynamic-hologram"]}]
| Command | Owner | Notes |
|---|---|---|
/hub |
HubCommand |
Sends players to the configured hub |
/back |
TeleportUtils |
Returns to last stored location |
/warp, /setwarp, /delwarp
|
TeleportUtils |
Warp management |
/spawn, /tpspawn
|
TeleportUtils |
Spawn travel |
/tpall, /tphere
|
TeleportUtils |
Player teleport administration |
/tpworld, /tpworldspawn, /tpworldlast
|
TeleportUtils |
World-aware teleport tools |
/top, /jump, /thru
|
TeleportUtils |
Positional utility commands |
/coord, /coordbar
|
Coordinates |
Coordinate displays |
/speed |
PlayerSpeed |
Walk/fly speed management |
/fly |
FlyCommand |
Flight toggle/control |
/ptime, /pweather
|
Base commands | Per-player time/weather |
/workbench |
WorkbenchCommand |
Virtual workstation surface plus aliases such as anvil and stonecutter
|
/invsee, /enderchest, /clearinv, /break, /repair
|
Base commands | Inventory/admin utilities |
/clearsel |
SelectionServiceImpl |
Clears active selection state |
/selpreview [on|off|grid [on|off]] |
SelectionServiceImpl |
Controls saved player preferences for WorldEdit outlines and grids; alias /selprev; available to all players |
| Command | Owner | Notes |
|---|---|---|
/book |
CustomBooks |
Create, list, show, and distribute configured books; saved book keys are title-derived and preserve existing hyphens |
/quest |
QuestFeature |
View active quests and carried books, track objectives, or abandon quests |
/imenu |
InteractiveMenus |
Interactive menu runtime and editor |
| dynamic configured aliases | CustomCommands |
Commands loaded from config at startup; default player sender with optional player: / server: prefixes |
gms, gmc, gma, gmsp
|
GameModeAliases |
Short aliases that dispatch to /gamemode
|
| Command | Owner |
|---|---|
/bridge |
BridgeCommand |
/boatrace |
BoatRaceCommand |
/bedwars |
BedWarsCommand |
/minefield |
MinefieldCommand |
/nightfall |
NightfallCommand |
/parkour |
ParkourCommand |
/skyblock |
SkyBlockCommand |
/tntrun |
TntRunCommand |
/world duplicate <source> <destination> supports both standalone world folders
and Paper's integrated world/dimensions/minecraft/<world> storage. Integrated
worlds are copied to a sibling dimension folder, preserving terrain, entities,
generation settings and per-world data. UUID metadata and session locks are omitted
so Paper assigns a fresh identity when the copy is loaded. The source is saved and
unloaded before copying; the destination remains unloaded until /world load.
Destinations must be new names using lowercase letters, numbers, dots, underscores
or hyphens. Existing worlds are never merged or overwritten. Symbolic links are
rejected, and an incomplete destination is removed if copying fails.
The /world command is one of the most important operator surfaces. It covers:
- create, load, unload, duplicate, and delete
- world inspection via
/world info - player-facing world names via
/world displayname <world> <name|clear> - stored generator selection
- world settings such as time, weather, tick speed, gamemode, nether, end, and random spawn
- join/leave command editors:
/world joincommands/world leavecommands/world addjoincommand/world addleavecommand/world setjoincommand/world setleavecommand/world removejoincommand/world removeleavecommand
Join and leave commands run as the player by default. Use player: or server: prefixes on individual entries to control sender mode per command.
Custom command aliases also run as the player by default. Use player: or server: on a configured run entry to force the sender, and {player} / {uuid} placeholders inside the configured command text.
See Player and staff permissions for the standard-player grant list, all eight minigames, other-player checks and migration from the old broad permissions.
Most built-in commands follow:
stemcraft.command.<label>
Common exceptions:
- feature editor permissions such as
stemcraft.imenu.edit - maintenance bypass or specialized gameplay override permissions
For exact argument validation and user-facing usage strings, see locale entries in plugin/src/main/resources/locales/en.yml.
Notice boards use /noticeboard post, /noticeboard list [page], /noticeboard edit <post-id>, /noticeboard expiry <post-id> <duration|-1>, and /noticeboard remove <post-id>. Administrators create displays with /noticeboard board create <id> [columns] [rows] while targeting the bottom-left backing block.
Registered commands own all aliases and namespaced labels pointing to their exact Bukkit command object. Cleanup snapshots matching keys and removes them through Paper's command map, which updates Brigadier. Do not use entrySet().removeIf: the current Paper forwarding iterator does not support iterator removal. Re-registration first cleans up the previous registration; failure retains the handle and logs its cause.
/tpworldlast survival [player] returns to the most recently visited location in
survival or any survival_* world, including custom dimensions. If the player
is already in that group, it leaves them at their current location. A player with
no saved visit goes to the base world's spawn. Locations persist through logout
and restart. Cancelled teleports do not update them.
Travel groups use the requested base name and an underscore boundary; they are
independent of inventory sharing settings. /tpworld survival still explicitly
selects the overworld, and /tpworldspawn survival selects its spawn.
Commands that declare a {players} argument accept comma-separated online
player names, * for all online players, and -name exclusions. For example,
/hub *,-kira sends everyone except Kira to the hub. The older {player}
placeholder remains a single-player argument.
For existing installations, change the custom /survival command's run entry
in config.yml to server:tpworldlast survival {player} and reload STEMCraft.
Also change any survival menu command to player:tpworldlast survival; players
using that direct command need stemcraft.command.tpworldlast. Bundled defaults
use these commands, but existing custom commands are preserved.