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:
FREEPREMIUMRESOURCES
The setup menu currently exposes those as:
Free ContentPremium PacksResources
Verified Premade Packages
These are the premade packages currently defined in the repo:
| Package | Category | Toggleable in /etd setup | Tracked assets |
|---|---|---|---|
EternalTD Hub World | Free | No | Server world-container folder etd_spawn |
EternalTD Tutorial | Free | Yes | tutorial.yml, tutorial_waves.yml, tutorial_npc.yml, etd_tutorial |
Towers of the Grassy Lands | Free | Yes | 5 level files, 1 waves file, 1 NPC file, 5 worlds |
Towers from the Depths | Premium | Yes | 5 level files, 1 waves file, 1 NPC file, 5 worlds |
Towers of the Rising Sun | Premium | Yes | 5 level files, 1 waves file, 1 NPC file, 5 worlds |
EternalTD Custom Models | Resources | No | Marker 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.