EternalTD Commands
EternalTD registers the root command:
/eternaltd
/etd
The Nightbreak account commands used during setup are separate top-level commands registered by MagmaCore:
/nightbreaklogin <token>
/nightbreaklogout
Both are gated behind nightbreak.login (default: op). /nightbreaklogout clears the stored Nightbreak account token from the server.
MagmaCore also registers a per-plugin changelog command, /etdchangelog, as its own top-level command (see Release changelog).
Setup and Content Management
Most of these subcommands are registered by MagmaCore through NightbreakPluginBootstrap.registerStandardCommands. They are shared across all Nightbreak plugins and ship inside EternalTD because MagmaCore is shaded into the plugin.
| Command | Sender | Current purpose |
|---|---|---|
/etd | Any | Prints the current setup/content quick-start help. Now genuinely requires eternaltd.* — a sender without it gets "You do not have permission to run this command!" |
/etd initialize | Player | Opens the first-time setup menu. Requires eternaltd.*. |
/etd setup | Player | Opens the EternalTD setup menu (package browser plus the shared plugin-update, recommended-plugins, and automatic-update controls) |
/etd recommendedplugins | Any | Opens (player) or prints (console) the recommended companion plugins for EternalTD |
/etd downloadpluginupdate | Any | Downloads an EternalTD plugin update if one is available (used after the next restart) |
/etd downloadall | Any | Downloads the EternalTD plugin update and all available content |
/etd downloadallcontent | Any | Downloads all available EternalTD content (no plugin update) |
/etd updatecontent | Any | Downloads updates for outdated EternalTD content |
/etd updateallcontent | Any | Alias for /etd updatecontent |
/etd forcereinstallcontent <package|all> | Any | Re-downloads content through the normal authenticated import/reload pipeline even when the installed version is already current. all covers every package detected as downloaded; a Nightbreak slug (tab-completed) targets one package and works even if its files are completely missing. Use this to repair a package whose files were deleted or corrupted. |
/etd install | Any | Applies the official EternalTD resource-pack setup |
/etd reload | Any | Restarts EternalTD in place (full disable, load, enable cycle) |
Admin note:
- EternalTD's
plugin.ymldeclares a single permission node,eternaltd.*(default: op), described as granting access to the admin, setup, and debug commands. - Everything admin-facing resolves to that one node:
setup,recommendedplugins,downloadall,downloadallcontent,downloadpluginupdate,updatecontent/updateallcontent,forcereinstallcontent,install,reload,cheat,setwave,selectfloor,selectfloorcoordinates,showselection,register,register start,register end, and the bare/etd. (The shared MagmaCore commands split this into "admin", "setup" and "initialize" permissions, but EternalTD passeseternaltd.*for all three, so the effective requirement is identical.) - The two Nightbreak account commands use their own node,
nightbreak.login(default: op), which MagmaCore registers at runtime rather than through EternalTD'splugin.yml. initializeis registered by the shared bootstrap and also requireseternaltd.*; preset modes do not control its registration.- Only the player-facing commands are unrestricted:
hub/lobby,join,start/go, andquit/stop. - Tab completion for the first argument is also filtered by permission, so players without
eternaltd.*only see the player-facing subcommands.
Gameplay Commands
| Command | Sender | Current purpose |
|---|---|---|
/etd join <level> | Player | Starts a new level session from a loaded level file. The template world is copied off the main thread, so the command replies "Preparing world - hang tight!" first and "Created your world! We're ready to go." once the instance is live. Running it again while a copy is in flight is refused with "Your level is already being prepared. Please wait!" |
/etd start | Player | Starts the active session's first wave |
/etd go | Player | Alias for /etd start |
/etd quit | Player | Ends your current level session |
/etd stop | Player | Alias for /etd quit |
/etd hub | Player | Teleports you back to the EternalTD hub spawn. If run mid-run, the active session is ended cleanly first (inventory restored, towers removed, instance world deleted). Requires the hub spawn to be configured in config.yml; if the server rejects the teleport, the command reports that failure instead of claiming success. |
/etd lobby | Player | Alias for /etd hub |
Debug and Admin Gameplay Commands
| Command | Sender | Current purpose |
|---|---|---|
/etd cheat | Player | Toggles cheat mode for the active session |
/etd setwave <wave> | Player | Skips the active session to a specific wave |
These are not normal player setup commands. They are session/debug tools.
Map Authoring Commands
These commands are still present in the current codebase for floor selection and level registration work.
| Command | Sender | Current purpose |
|---|---|---|
/etd selectfloor | Player | Starts or stops floor-corner selection with clicks |
/etd selectfloorcoordinates <x1> <y1> <z1> <x2> <y2> <z2> | Player | Sets the selection region directly from coordinates |
/etd showselection <level> | Player | Checks the current floor selection and keeps it. The particle visualizer is disabled in the current implementation. |
/etd register <level> | Player | Checks the current floor selection, then clears it. It neither displays particles nor saves levelLocations; write the floor region into the level YAML manually. |
/etd register <level> start | Player | Adds the player's current standing block to the level's startLocation list |
/etd register <level> end | Player | Adds the player's current standing block to the level's endLocation list |
Release changelog
MagmaCore registers one extra top-level command per Nightbreak plugin, named after the root command plus changelog:
/etdchangelog
/etdchangelog dismiss
/etdchangelog disable
| Form | Effect |
|---|---|
/etdchangelog | Opens the release notes for the EternalTD versions (and tracked content packages) you have not read yet |
/etdchangelog dismiss | Marks the currently shown releases as read and jumps to the next unread batch, if any |
/etdchangelog disable | Permanently stops the changelog notice for that player |
Behavior worth knowing:
- The command is player-only and admin-only. "Admin" here means op,
eternaltd.*, or any of the spec's admin/setup/initialize permissions — all three of which EternalTD sets toeternaltd.*. - Admins who join the server get a chat notice with a clickable view button roughly 2 seconds after login, but only when there is something unread and they have not run
disable. - Read/dismissed state, the version the tracking started from, and the cached release text live in
plugins/EternalTD/nightbreak-changelogs.yml. - If another plugin already owns the
etdchangeloglabel, MagmaCore registers a namespaced fallback (eternaltd:etdchangelog) instead.
Notes
- EternalTD's
plugin.ymlonly declares the root command and theeternaltd.*permission. Subcommands are registered through the command manager at runtime. /etd reloadis a real plugin restart: it calls the plugin's disable, load, and enable path rather than a lightweight content re-import. Everything that startup does (folder migration, importer, content packages, waves, levels, world templates, NPCs, resource-pack helper) runs again. It does not call FreeMinecraftModels' reload path — the method that would do that is present in the source but nothing invokes it.- Level-name arguments on
join,showselection, and theregistercommands are resolved when you tab-complete, not when the plugin starts, so levels added by a download or a reload show up without a restart.