Wave Defense

A versatile PvE and PvP engine featuring wave defense, customizable shops, and three competitive game modes for Minecraft

File Details

wavedefense-0.2.45.1.jar

  • R
  • May 23, 2026
  • 908.09 KB
  • 14
  • 1.20.1
  • Forge

File Name

wavedefense-0.2.45.1.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:wave-defense-1492909:8132524")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

[0.2.45.1] - 2026-05-23

Fixed — GuiTheme migration: all screens uniformly themed

The remaining 14 GUI screens still using this.renderBackground() (vanilla stone dirt panel) were migrated to GuiTheme.renderBackground(). Main title colors changed from hardcoded 0xFFFFFF to GuiTheme.TEXT (0xFFE7F5FF). Every ScissorHelper.disable() call is now preceded by g.flush() to prevent Minecraft's batched text renderer from bleeding deferred glyphs across scissor boundaries.

Migrated screens: WaveSpawnEditorScreenWaveMobEditScreenRewardsConfigScreenPvpScoreboardScreen (+flush), StartingItemsScreen (+flush), WaveImportScreenWaveImportTargetScreenWaveExportScreenShopImportScreenShopImportTargetScreenShopPointSelectExportScreenWaveMobSettingsScreenPvpTeamSelectScreenLocationInfoScreen.

Combined with the 11 screens migrated in 0.2.45, GuiTheme.renderBackground is now used consistently across all ~25 screens in the mod.


Fixed — Timer and death loot/wave triggers never fired

LootSpawn.Trigger.TIMER_60 / TIMER_120 / TIMER_300 and WaveTrigger.TIMER_60 / TIMER_120 / TIMER_300 had no dispatch points — the timers in LocationSession were serialized but never incremented.

Added in LocationSession.tick() (fires once the lobby countdown ends, startTimerMs == 0):

Threshold Loot trigger dispatched Wave trigger dispatched
1 200 ticks (60 s) TIMER_60 TIMER_60
2 400 ticks (120 s) TIMER_120 TIMER_120
6 000 ticks (300 s) TIMER_300 TIMER_300

TriggerEvaluator.tickTimerCustomForLocation() was already implemented (per-wave-index counters under waveTriggerWaveCounters with "tc_N" keys) but was never called. Now called every tick from LocationSession.tick().

LootSpawn.Trigger.PLAYER_DEATH was only dispatched on PvP death. Added dispatch in WaveManager.onPvePlayerDeath() before playerData.remove().


Fixed — Trigger-wave mob off-by-one in WaveManager.onMobKilled

onMobKilled resolved the trigger wave config with waveIndex > 0 and get(waveIndex - 1), which skipped index 0 (the most common case) and applied a 1-based offset to a 0-based list. Corrected to waveIndex >= 0 && waveIndex < waves.size() and get(waveIndex). The erroneous fireWaveTriggerForLocation call (which starts a new location, not spawns mobs) was replaced with a debug log to avoid an infinite mob-spawn loop.


Removed — docs/archive/

Deleted 18 stale files (markdown summaries and prototype Java files) left by previous agent sessions. Translation audit confirmed: all 151 wavedefense.auto.* keys in source code have matching entries in every language file; 6 orphaned keys remain in the JSON files (harmless).