EternalTD (Eternal Tower Defense Game) icon

EternalTD (Eternal Tower Defense Game) -----

Tower defense game in Minecraft!




EternalTD 1.6.1:
- [New] Added support for Minecraft 26.2
- [Tweak] Rebuilt with the latest shared startup, update-check, and packet compatibility improvements
----------, Today at 5:33 AM

EternalTD 1.6.0:
- [New] Check for and one-click download EternalTD updates in-game from the setup menu (auto-checks on boot; restart to apply)
- [New] Automatic Updates toggle (off by default), also exposed as autoDownloadPluginUpdates in config.yml
- [New] Recommended Plugins view in the setup menu (plus a recommendedplugins command) and a /nightbreak plugins catalog to browse MagmaGuy's other plugins
- [Tweak] Reworked the setup and first-time setup menus with clearer, clickable actions; downloadall now checks for plugin updates alongside content
----------, Jun 21, 2026

EternalTD 1.5.1:
- [New] /etd hub command (alias /etd lobby) returns players to the hub from anywhere — ends the active run cleanly if used mid-level
- [Fix] NPCs whose maps aren't installed are no longer loaded
----------, Jun 7, 2026

EternalTD 1.5.0:
- [New] Now updated to run in Minecraft 1.21.4-21.1.2
- [New] Placement highlight — per-session BlockDisplay slab tracks the player's look ray and recolors by grid state (lime buildable, red occupied, light-blue path, hidden off-grid); started in LevelSession, lives in PlacementHighlight.
- [New] Nightbreak setup flow — EternalTDSetupMenu and EternalTDFirstTimeSetupMenu wired via NightbreakPluginSpec / NightbreakFirstTimeSetupSpec, with /etd setup, /etd downloadall, /etd updatecontent and the ETDPackage content pipeline (ContentPackageConfig, ETDPackageRefresher).
- [New] World protection — LevelSession registers each instanced world with MagmaCore InstanceProtector using WorldProtectionRules (no explosions, no liquid flow, no elytra, no fly toggle, no friendly fire, no vanilla mob spawning).
- [New] Phased init — onEnable now drives NightbreakPluginBootstrap with separate asyncInitialization / syncInitialization steps and proper shutdown / reload via reloadImportedContent.
- [Fix] Tower-fired projectiles and FMM-modeled mobs no longer face random directions while travelling — the ItemDisplay fake-arrow path in BasicDamageTower was reading the skeleton's body yaw on spawn / teleport, which is random when setAI(false) is set. ItemDisplay now spawns and teleports with yaw=0, pitch=0 so only the transformation Quaternionf controls visual orientation. Air WaveEntity movement now also sets the teleport Location direction to the movement vector so non-Mob flyers face their travel direction (Mob path was already handled by NMS forcedMove).
- [Fix] Tutorial "upgrade these towers" red arrows now actually appear above the towers — the reddownarrow indicator armor stand was spawning 4 blocks above the grid square, which placed it inside the tower structure. Now spawned 7 blocks up.
- [Fix] Tower lore stats no longer display long IEEE-754 floating-point tails (`123.4500000000007`) — BasicDamageTower, SpyglassSupportTower, and ExplosionFactoryTower now wrap baseDamage, baselineBonusRange, baselineAoeRange, and other double lore fields with Round.twoDecimalPlaces, matching the formatting DamageTower.updateBonusDisplays already uses for bonus stats.
- [Fix] Items dragged into an NPC's interaction menu are no longer lost on close — NPCEntity now unconditionally cancels InventoryClickEvent for clicks inside the menu (selection on left-click of the green pane still works), and a new dragInMenuEvent cancels InventoryDragEvent. NPC menus are now strictly read-only.
- [Fix] Spigot 26.1 spawn-world quirk — LevelSession rebuilds the spawn Location against the explicit world before teleport, since getSpawnLocation() could return the main world.
- [Fix] Paper 26.1+ world layout — WorldContainer uses MagmaCore TemporaryWorldManager.loadVoidTemporaryWorld and WorldFolderResolver to scan and delete both legacy and modern world folders, preventing index collisions and stale-data bleed-through.
- [Fix] BasicDamageTower projectile — replaced real Arrow entities (invalidated within ticks on 26.1) with an ItemDisplay fake arrow oriented via a Quaternionf transform, with manual damage on proximity.
- [Fix] Legacy data migration — onEnable renames legacy Levels / NPCs folders to lowercase levels / npcs.
- [Tweak] Air wave balance — air mobs now spawn at 50% HP and 50% speed (was 75% each). The +4 Y offset effectively shrinks every damage tower's horizontal reach against air targets (`sqrt(R² − 16)`), and the old 75% multipliers didn't compensate enough for that range loss. FAST + AIR also no longer compounds to faster-than-ground speed (`0.3 × 1.5 × 0.5 = 0.225` is now slower than a normal ground mob's `0.3`).
- [Tweak] World-folder-copy logging downgraded from WARN to debug — WorldContainer's per-file `File:` / `Target path:` lines for every region / data file during instance world setup no longer scream at WARN level (~30 lines per tutorial instance). Genuine "Failed to copy" / "Failed to create" failures remain at WARN.
- [Tweak] Build — Minecraft 1.21.11 API, Java 21 toolchain, FMM 2.5.0+, MagmaCore 2.2.0-SNAPSHOT, com.gradleup.shadow 9.0.0-beta12, LibsDisguises pinned at 10.0.18, EasyMinecraftGoals dependency dropped (now shaded via MagmaCore and relocated to com.magmaguy.eternaltd.easyminecraftgoals), ProtocolLib removed, /logify command and permission dropped.
- [Tweak] Requires latest FreeMinecraftModels (2.5.0+) and the matching MagmaCore build; softdepends on Floodgate and ResourcePackManager.
- [Tweak] Various MagmaCore library improvements (Lua scripting engine + zones moved to MagmaCore, EasyMinecraftGoals absorbed, NMS v26 / Paper 26.1 support, WorldFolderResolver + Paper-migration debris quarantine, TemporaryBlockManager and createTemporaryWorldWithGenerator / loadTemporaryWorldWithGenerator, SetupMenuBuilder + InfoButtonFactory + NightbreakSetupIcons shared UI, ContainerAllowlist / WorldProtectionRules instance protection, MagmaCore.exportSharedAssets / enableWorldProtections / isShutdownRequested, AdvancedCommand optional-argument support, LocationAPI with WorldGuard + GriefPrevention providers, Nightbreak token-change subscribers, ClientboundEntityPositionSyncPacket adoption on 1.21.2+ with Bedrock ClientboundBundlePacket skip, ArmorStand HeadPose force-send every tick for Bedrock attachable rebind, DAMAGE_INDICATOR particle count clamp, per-plugin Netty handler name in PacketInteractionListener, lazy Lua field support, ZipFile STORED-with-EXT-descriptor fix, dedup / rate-limited Nightbreak auth-failure logs).
----------, May 28, 2026

EternalTD 1.3.0:
- [New] Updated for Minecraft 1.21.5 and FreeMinecraftModels 2.0
----------, May 16, 2025

EternalTD 1.3.0:
- [New] Improved commands
- [New] Added /logify command to allow admins to easily upload their latest log to maclo.gs
----------, Feb 7, 2025

EternalTD 1.2.0:
- [New] Updated for Minecraft 1.21.4
----------, Dec 14, 2024

EternalTD 1.1.0:
- [New] Updated for Minecraft 1.21
- [New] Added MagmaCore
- All commands were rewritten
- All configuration file systems were redone
- Many classes moved to the core library
- [New] Added optional synchronization with ResourcePackManager, which automatically merges and hosts the resource packs when FMM modifies them, even if the modification is done while the server is live (due to importing new content), and automatically distributes up-to-date packs. Use of ResourcePackManager is VERY HIGHLY RECOMMENDED.
----------, Aug 2, 2024

1.1.0 changelog:
- Updated the default resource pack to work correctly
- Updated the plugin for Minecraft 1.20.4 compatibility!
----------, Jan 18, 2024

EternalTD 1.0.1 changelog:

- Updated to use the latest FreeMinecraftModels version
- Updated to use the public EasyMinecraftGoals version
----------, Dec 10, 2023

Resource Information
Author:
----------
Total Downloads: 2,562
First Release: Aug 1, 2023
Last Update: Jun 8, 2026
Category: ---------------
All-Time Rating:
6 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings