Skip to main content

EternalTD Models and Resource Pack

EternalTD's current model flow is built around FreeMinecraftModels, and its current resource-pack flow is driven by /etd install.

FreeMinecraftModels​

FreeMinecraftModels is a soft dependency.

  • EternalTD still loads without it.
  • When it is present, EternalTD can replace vanilla tower bodies with FMM static models. A missing model logs a warning and leaves the vanilla body in place.
  • When it is absent, EternalTD uses its vanilla tower bodies instead of blocking startup. The integration flag checks plugin presence, so a disabled or incompatible FMM installation is not equivalent to an absent one.

The current shared model package is:

  • EternalTD Custom Models

That package is downloaded through EternalTD's content flow and is described in code as content that imports into FreeMinecraftModels when FMM is available.

EternalTD's package tracker also accepts either of these non-empty FMM folders as installed content:

plugins/FreeMinecraftModels/models/EternalTD default towers/
plugins/FreeMinecraftModels/Models/EternalTD default towers/

The capitalised spelling is the legacy FMM folder name. Detecting either non-empty folder makes the content count as installed and attempts to write plugins/EternalTD/content_markers/eternaltd_custom_models.marker; a failed marker write is logged. An existing marker also counts even if the model files were later removed. Neither check validates model contents or proves they loaded successfully.

What /etd reload Does for Models​

/etd reload restarts EternalTD in place and processes pending imports. When the shared importer installs models or other files into FMM's folders (such as scripts) and FMM is enabled, its model-installation notification calls FMM's imported-content reload. This is conditional, not an unconditional FMM reload on every /etd reload. EternalTD's own separate forwarding method has no caller.

If you edit or copy files directly into FMM's folders, use FMM's own reload command to load those changes. Check its logs and an actual model in game; a package marker alone is insufficient.

/etd install​

/etd install does not download a model package. It applies the official EternalTD resource-pack distribution settings.

The current official resource-pack URL is:

https://www.magmaguy.com/downloads/eternaltd_resource_pack.zip

If ResourcePackManager is installed​

If ResourcePackManager is enabled, EternalTD registers the official pack and asks it to reload its pack state.

In that mode:

  • EternalTD does not write the pack URL into server.properties
  • ResourcePackManager handles distribution to players
  • EternalTD registers /etd reload as the follow-up reload command

The registration message confirms the API calls, not successful delivery to a client. Startup alone only treats an enabled ResourcePackManager as an active pack setup; it does not perform this registration. Run /etd install to request registration and verify the pack on a connected player.

If ResourcePackManager is unavailable or registration fails​

EternalTD falls back to editing server.properties directly if ResourcePackManager is disabled, absent, or its API registration throws an error.

It writes:

  • resource-pack
  • resource-pack-sha1

Before changing either property, EternalTD downloads the pack and calculates its SHA1 as the bytes arrive, without saving the pack to disk. The download uses a 10-second connect timeout and a 30-second read timeout. If the download or hash fails, server.properties is left unchanged. On success, both values are written together through a temporary file and atomic replacement where the operating system supports it. If both values already match, the file is not rewritten.

In this fallback mode, the command tells you to restart the server for the new pack settings to apply.

SHA1 Update Check​

If EternalTD is using the server.properties path instead of ResourcePackManager, startup (and /etd reload) also checks whether the official resource pack's SHA1 has changed.

The check only runs when resource-pack is exactly the official EternalTD URL above; a pack from any other URL is left alone. If the hash changed, EternalTD writes the new resource-pack-sha1, after confirming that resource-pack still holds the official URL. It does not announce the change; the server sends the new hash to players after its next restart. If the write is skipped or fails, the console logs that the checksum was not updated. ResourcePackManager avoids this startup branch when it is enabled.

Operator Warning Behavior​

When all of these are true:

  • FreeMinecraftModels is installed
  • the joining player is op
  • EternalTD does not detect an active resource-pack setup

EternalTD schedules a warning five seconds later, provided the player is still valid. It points the operator to:

  • /etd install
  • /etd initialize (opens the first-time setup menu; requires eternaltd.*)
  • /etd setup

Detection means either ResourcePackManager is enabled or server.properties has any non-empty resource-pack value. It does not check client acceptance or whether the pack contains EternalTD's assets. The warning describes the server.properties route, but /etd install still tries ResourcePackManager first.

Cleanup Notes​

The custom models package is treated as shared resource content, not as a normal toggleable pack.

If you want to remove it:

  1. Remove the imported model files you intend to remove, checking both current and legacy FMM folders.
  2. Remove plugins/EternalTD/content_markers/eternaltd_custom_models.marker if you want the package to stop counting as installed. A remaining non-empty fallback folder will recreate that state on the next check.
  3. Reload FMM to apply direct file removals, then run /etd reload. Review /fmm setup as needed. These steps do not remove resource-pack registration or settings from server.properties.