wave_defence-0.1.0.jar
Curse Maven Snippet
What's new
Wave Defence (1.16.5 port) — CHANGELOG
[0.1.0] - 2026-10-04 — the server runs, and keeps what it holds
The first release of the port. Its server side never ran before this (see "the server never listened" below); it does now, and the reviews of what it did when it first ran are fixed here. It compiles clean on Java 8 against Forge 36.2.42. It has not yet been played in a live game: test it before putting it on a server people use.
Network protocol is now 9. A 0.0.1 build and this one refuse each other at login.
Fixed — the third review (2026-10-04)
- On Windows, every edit after the second save of the session was lost. The location file was written by renaming a temporary file over it, and Java's
File.renameTowill not overwrite on Windows: from the third save on neither the backup nor the new file moved, and the next start loaded the second save. Saves now go through a write that always keeps one good copy and works everywhere. - What a player owns is no longer held in memory only. The backup of a player's things taken at the arena door, their belongings waiting for a respawn, and the PvP kit of a dead player now go into the world's runtime file (
data/wavedefense_runtime.dat) as they change. Quitting a single-player world from the death screen, a crash or a restart used to lose them for good; they come back at the next login or respawn. A single-player world's kits no longer carry into the next world opened. - Leaving an arena that lets you keep your own things (the default) now puts back your place -- position, game mode, effects -- and nothing else. A PvP arena put back the inventory, health, food and experience you had at the door, so whatever was dropped inside came back a second time and whatever was picked up was erased. A PvE arena put back nothing at all: you left in the arena's game mode, with the wave's effect for up to an hour, standing where you were -- and in an auto-activating zone, enrolled again at once.
- A PvP arena with no spawn points refuses you before touching your inventory; it used to wipe it, hand out the kit, and then throw the backup away.
- The PvP death kit: taken at the lowest priority and only for a death no other mod cancelled; an arena's kit no longer follows a player who left the match while dead out into the world (their own things come back from the backup instead).
- A player still on the death screen when a round started was counted alive, came back as a spectator nobody could hit, and their side could never be eliminated: with no time limit the match ran until someone left. They now sit that round out.
- The Battle Royale border ran from the first arrival, whatever the phase: a player waiting for an opponent ended up outside it, held in place by the wait effects, and died over and over. An abandoned match also handed its shrunken border to the next one. The border now starts with the match, runs only while it is fought, and goes with it.
- A team kill pays its author no assist, and always charges the victim's death penalty.
- A player arriving on a side goes to the side's point fewest teammates are using; once someone had left, the next arrival was sent onto a point still taken.
- Trigger-wave mobs outlived the run. Ending a run -- the last defender's death included, which itself fires PLAYER_DEATH waves -- removed only the main wave's mobs. Trigger-wave mobs, and any mob still stamped with the arena's name, are removed too.
- Screens piled their buttons up. In twenty screens a click rebuilt the screen by adding a new set of widgets on top of the old one, so stale buttons kept answering clicks under the new ones. They are cleared first now, as in 1.20.1.
- "Format error:" in place of five lines -- the export status, the PvP scoreboard's buy-phase and round titles and team wins, and the export list.
- The wave trigger editor showed lang keys instead of trigger names, so Ctrl+click to add an AND-trigger never found its trigger; the wave list showed the first seven letters of the key.
- A shop entry available from the location start, a wave start or wave N could never be bought: the server asked a first-phase stub for the current wave, and it always said 0.
- The wave actions screen's hover tips were drawn by a stub that drew nothing.
/wd versionreports the version the jar was built as.
Known limitations
- Not yet played in a live 1.16.5 game since the server handler was registered.
- No lobbies, and none of 1.20.1's shop work (point shops on par, removal everywhere, stable entry ids, match shop rules): each needs code this tree does not have. See
PORT_STATUS.md. keepLootOnExitworks but has no toggle in the editor.- Info panels above spawn points are switched off: their entity type does not exist in 1.16.5.
- Most buttons have no hover tooltip: 1.20.1's
setTooltiphas no counterpart here, and fifteen screens leave it out.
Fixed — the server never listened
EventHandlerwas never registered. Its subscribers are instance methods and nothing registered an instance, so the server tick (every wave and round), deaths, the attack rules and login sync never ran in this port. It is registered in the mod constructor now, as in 1.20.1. Nothing in this tree has been played since: test this first.- Respawn path: the buy phase no longer heals a player still on the death screen (their Respawn click was ignored); the end of a match no longer restores belongings onto a corpse (they are handed back on respawn) and cancels pending delayed respawns; one arena's round start no longer wipes another arena's pending respawns; a Deathmatch death always takes the Deathmatch respawn; a mid-round walk-in to a round-based mode watches as a spectator.
Fixed — what the live server handler showed
With EventHandler registered, code that had never run in this port ran for the first time, and a review of it found:
- The PvE wave loop ran on PvP sessions and ended every match as a "victory" about thirty seconds after the first player joined; an empty session (a portal's) ran on its own to a phantom victory. The loop now skips PvP, and sessions with nobody online.
- A wipe left the live wave in the world for good: the last defender's death dropped the session without despawning its persistent mobs. It ends the run properly now.
- Entering a come-as-you-are arena took a backup anyway, so every PvE death duplicated the inventory (the backup came back on respawn while the originals lay on the floor). A backup is taken only where the arena wipes and kits.
- The backup captured armour and offhand twice and compacted the hotbar, so every restore handed out a second set of worn gear. It copies the 36 main slots by index now, as 1.20.1 does.
- A dead player could be enrolled by a zone, portal or trigger, and later "restored" from a backup of a corpse: empty inventory, no health. Dead players are not enrolled.
- A PvP death dropped the whole kit (the keepInventory toggle was undone before vanilla read it); kept and handed back on respawn now, as in 1.20.1.
- A dead player surrendered by the boundary had the backup restored onto the corpse, which then ignored the Respawn button; a team or self kill left the victim alive; a respawn during the buy phase made a spectator who could scout freely; the Battle Royale border ran twenty times too fast; the PvE HUD never updated after joining; and
/reloadremoved every mod command. - Ninety-odd messages showed their raw template ("%d") -- the lang files now use
%sonly.
Changed — PvP arrivals (ported from 1.20.1)
- Nor on top of somebody (2026-10). A Deathmatch respawn never lands on a point a living enemy stands on while a free one exists (a teammate there is no obstacle); with every other point taken, the point they came from beats landing on someone; at the match start nobody pushed off their own start takes another's, and a walk-in takes Random or Smart; Smart spawning takes the free point farthest from every living enemy; the first arrival of a match keeps the point the arena put the player at unless an enemy stands there.
- Never the same spawn point twice running. Random and Smart Deathmatch spawning, and team spawns, leave out the point a player arrived at last whenever there is another. Team spawns no longer send everyone on a side to its first point: a player starts where they were entered, then rotates through the side's points.
- Spawn protection. Two settings (PvP common rules in the editor; default 5, 0 = off, at most 60):
pvpRespawnProtectionSecafter a respawn or joining a fight under way, andpvpRoundStartProtectionSecat the start of a round or match. An older arena's singlepvpSpawnProtectionSecbecomes both. Other players cannot hurt you meanwhile. Hitting someone ends it. ReplacesinvulnerableTime = 60, which let the first hit through in full. Hits from a player's tamed animals and lit TNT count as theirs. - A match is closed in both directions. Players outside a PvP match can no longer hit the players in it, and the other way round.
- Delayed respawns are chosen when they fire rather than at death, and no longer revive a player into a match that has ended.
- Walking into a running Deathmatch puts you in the fight; you used to wait, frozen, for a next round that a Deathmatch never has. A mid-round walk-in to a round-based mode waits for the next round and is not counted among the living meanwhile.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

