EternalTD Setup
The current EternalTD setup flow is built around Nightbreak-managed content, optional model support through FreeMinecraftModels, and a resource-pack helper command.
Requirements
- EternalTD, with these instructions following current source
1.7.8 - Java
21 - A Paper/Spigot-compatible server on the current
1.21.4API line
Optional integrations:
FreeMinecraftModelsfor EternalTD's custom modelsResourcePackManagerif you want EternalTD to register its official resource pack there instead of writing toserver.propertiesfloodgateandLibsDisguisesare soft-depends, not setup requirements for the current setup flow
plugin.yml declares exactly four soft-depends: FreeMinecraftModels, LibsDisguises, floodgate, and ResourcePackManager. ModelEngine is no longer referenced anywhere in the plugin.
What EternalTD Creates
On startup, EternalTD initializes or uses these paths:
plugins/EternalTD/config.yml
plugins/EternalTD/content_packages/
plugins/EternalTD/imports/
plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/
Legacy note:
- The plugin now treats
levels/andnpcs/as canonical folder names. - On startup and reload it will migrate legacy
Levels/andNPCs/folders into the lowercase paths automatically. - The migration never overwrites a file. If the lowercase folder already holds a file with the same name, the move stops, the unmoved files stay in the legacy folder or in
levels_migration/(npcs_migration/), and EternalTD logs an initialization failure. Merge the files by hand and restart.
Recommended First-Time Flow
- Install EternalTD and start the server once.
- Link your Nightbreak account with
/nightbreaklogin, then approve the server at the link it prints. - Run
/etd downloadallto download all accessible EternalTD packages intoplugins/EternalTD/imports. - Run
/etd installto apply the official EternalTD resource-pack setup. - Run
/etd setupany time you want to browse, enable, disable, or update individual packages.
/nightbreaklogin is part of the shared Nightbreak/MagmaCore account flow, not a command declared in EternalTD's plugin.yml.
The /etd initialize menu
While setupDone is false, players with eternaltd.* get a setup reminder 10 seconds after joining. It links /etd initialize and /etd setup.
/etd initialize opens the first-time setup menu. Its three choices all set setupDone: true, which stops the reminder:
- Recommended Setup prints the guided setup steps and, if the server is not linked yet, starts a
/nightbreakloginlink for you. - Manual Setup leaves pack management to you and reminds you to run
/etd install. - Use Current Content keeps your existing EternalTD content folders as they are.
The /etd setup menu
/etd setup opens the shared MagmaCore setup menu. Alongside the EternalTD content packages (filtered by Free Content, Premium Packs, and Resources), the menu also exposes these standard MagmaCore controls:
- a Plugin Update entry that shows the installed vs. latest EternalTD version and downloads a plugin update when one is available (applied on restart, or sooner if
nightbreak.applyPluginUpdatesWithoutRestartallows it), - a Recommended Plugins entry that opens the companion-plugin recommendation view (also reachable with
/etd recommendedplugins), - an Automatic Updates toggle button that flips the
nightbreak.autoDownloadPluginUpdatesconfig value on or off, - a Download All entry that runs
/etd downloadall(plugin update plus all available content).
Spawn and Hub Behavior
config.yml currently includes:
setupDone— flag tracking whether first-time setup guidance has been completed (defaultfalse).spawnLocations— defaults toetd_spawn,0,65,0,0,0and is always written to the config. EternalTD only resolves and uses it when theetd_spawnworld exists.manageSpawn— defaults totrue. Teleports joining players to the EternalTD hub world when it is available.playerGuide— the in-game guide book text.nightbreak.autoDownloadPluginUpdates— defaults tofalse. Shared MagmaCore setting; whentruethe plugin automatically downloads available plugin and content updates on startup (used after the next restart, unlessnightbreak.applyPluginUpdatesWithoutRestartapplies the plugin update sooner). This is also toggleable in-game from the/etd setupmenu's "Automatic Updates" button.nightbreak.applyPluginUpdatesWithoutRestart(defaultnever) is a shared MagmaCore setting that controls when a downloaded plugin update is applied without a restart:neverwaits for the next restart,when-emptyapplies it the next time no players are online, andimmediatelyapplies it as soon as the download finishes. Any other value counts asnever. Applying an update disables and re-enables EternalTD, so running levels end./etd applypluginupdateapplies a downloaded update on demand.
When manageSpawn: true and the etd_spawn world exists, joining players are teleported to the configured EternalTD spawn location.
The official hub package is tracked separately from gameplay maps and is installed as the etd_spawn world in the server's world container.
On Paper 26.1 and newer, worlds get migrated out of the world-container root into <level-name>/dimensions/minecraft/<world>. EternalTD looks for etd_spawn in both the legacy root and the migrated location, so a migrated hub is still detected as installed and loaded. Half-migrated leftovers are quarantined before the world is created, because Paper's migration refuses to merge a legacy copy sitting next to a migrated one.
Reloading After Imports
Use /etd reload after manual imports or manual file cleanup.
/etd reload is a full in-place restart of the plugin — it runs EternalTD's disable, load, and enable path — so everything startup does happens again:
- legacy
Levels/andNPCs/folders are migrated to lowercase - the importer re-runs
- content packages, waves, levels, world templates, and NPCs are reloaded
- package update/access state is refreshed
- the resource-pack helper re-initializes
Two consequences worth knowing:
- Any level session in progress is torn down, because the reload goes through the plugin's normal shutdown.
- When this reload imports models or other files into FreeMinecraftModels' folders (such as
scripts) and FreeMinecraftModels is enabled, the shared importer triggers FMM's content reload. If you edit or copy files directly into FMM's folders, use FMM's own reload command.
Players Already Online
manageSpawn normally teleports players to the hub on join, but players who connect while EternalTD is still initializing miss that (the hub world and the join listener only exist once initialization finishes). When initialization completes, EternalTD sweeps everyone already online and teleports anyone who is not already in the hub world to the configured spawn.
Troubleshooting
- A level cannot be joined. Check the console for errors about that level's file, its waves file or its world template, and confirm in
/etd setupthat the package is installed and enabled. The join and start messages are listed under World Lifecycle and Session Start Validation. - Towers show as vanilla mobs, or models have no textures. Check the two halves separately. Models need FreeMinecraftModels and the
EternalTD Custom Modelspackage. Textures need the resource pack to reach the player; see Models and Resource Pack. - Before updating content, back up any packaged level, wave or NPC file you edited. A content update writes the package's files over your edited copies.
When asking for help, include the EternalTD and server versions, the affected level, the relevant config files and the full server log. /logify uploads the log and returns a link.