Skip to main content

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.4 API line

Optional integrations:

  • FreeMinecraftModels for EternalTD's custom models
  • ResourcePackManager if you want EternalTD to register its official resource pack there instead of writing to server.properties
  • floodgate and LibsDisguises are 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/ and npcs/ as canonical folder names.
  • On startup and reload it will migrate legacy Levels/ and NPCs/ 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.
  1. Install EternalTD and start the server once.
  2. Link your Nightbreak account with /nightbreaklogin, then approve the server at the link it prints.
  3. Run /etd downloadall to download all accessible EternalTD packages into plugins/EternalTD/imports.
  4. Run /etd install to apply the official EternalTD resource-pack setup.
  5. Run /etd setup any 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 /nightbreaklogin link 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.applyPluginUpdatesWithoutRestart allows 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.autoDownloadPluginUpdates config 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 (default false).
  • spawnLocations — defaults to etd_spawn,0,65,0,0,0 and is always written to the config. EternalTD only resolves and uses it when the etd_spawn world exists.
  • manageSpawn — defaults to true. Teleports joining players to the EternalTD hub world when it is available.
  • playerGuide — the in-game guide book text.
  • nightbreak.autoDownloadPluginUpdates — defaults to false. Shared MagmaCore setting; when true the plugin automatically downloads available plugin and content updates on startup (used after the next restart, unless nightbreak.applyPluginUpdatesWithoutRestart applies the plugin update sooner). This is also toggleable in-game from the /etd setup menu's "Automatic Updates" button.
  • nightbreak.applyPluginUpdatesWithoutRestart (default never) is a shared MagmaCore setting that controls when a downloaded plugin update is applied without a restart: never waits for the next restart, when-empty applies it the next time no players are online, and immediately applies it as soon as the download finishes. Any other value counts as never. Applying an update disables and re-enables EternalTD, so running levels end. /etd applypluginupdate applies 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/ and NPCs/ 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 setup that 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 Models package. 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.