Skip to main content

EternalTD Content Packages

EternalTD now tracks official content through a content_packages config set and exposes those packages through /etd setup.

Package Categories

The current code uses three package categories:

  • FREE
  • PREMIUM
  • RESOURCES

The setup menu currently exposes those as:

  • Free Content
  • Premium Packs
  • Resources

Verified Premade Packages

These are the premade packages currently defined in the repo:

PackageCategoryToggleable in /etd setupTracked assets
EternalTD Hub WorldFreeNoServer world-container folder etd_spawn
EternalTD TutorialFreeYestutorial.yml, tutorial_waves.yml, tutorial_npc.yml, etd_tutorial
Towers of the Grassy LandsFreeYes5 level files, 1 waves file, 1 NPC file, 5 worlds
Towers from the DepthsPremiumYes5 level files, 1 waves file, 1 NPC file, 5 worlds
Towers of the Rising SunPremiumYes5 level files, 1 waves file, 1 NPC file, 5 worlds
EternalTD Custom ModelsResourcesNoMarker file only, plus imported FreeMinecraftModels content when present

Package Lifecycle

The package browser currently distinguishes between:

  • not downloaded
  • not installed
  • installed
  • partially installed
  • out of date and updatable
  • out of date but inaccessible
  • needs access

That state is computed from tracked assets on disk, isEnabled flags inside tracked config files, and Nightbreak access/update checks.

Toggleable vs Shared Packages

Toggleable packages work by flipping isEnabled inside tracked config files under:

plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/

Shared packages do not behave like normal toggles:

  • The hub world is treated as shared installed content.
  • The custom model pack is treated as shared resource content.

For those packages, the setup menu tells you to remove files manually and then run /etd reload.

Bulk Operations

Two bulk operations are currently implemented:

  • /etd downloadall
  • /etd updatecontent

Both commands:

  • require a linked Nightbreak token
  • download into plugins/EternalTD/imports
  • skip packages that are inaccessible or already current
  • reload EternalTD automatically after successful downloads

Practical Notes

  • Package checks deduplicate by Nightbreak slug before bulk download/update.
  • The setup UI refreshes content and access info on a cooldown instead of hitting Nightbreak on every open.
  • The custom models package writes a marker under plugins/EternalTD/content_markers/ so EternalTD can track that the shared resource package was downloaded.