### Features
- Added `/zcleanup` to remove loaded zombie leftovers and reset apocalypse event state.
- Added `/zcleanup uninstall` for safe temporary removal. It also disables custom spawning, hordes, blood moons, scaling, and attribute tuning for the current server session.
- Added GitHub wiki documentation for commands, config basics, safe uninstall, and release notes.
### Fixes and Improvements
- Improved server-side-only metadata for the NeoForge build.
- Updated documentation so the cleanup commands are listed with the rest of the admin tools.
- Updated the Modrinth page to match the current features and server-side install behavior.
### Features
- Added `/zcleanup` to remove loaded zombie leftovers and reset apocalypse event state.
- Added `/zcleanup uninstall` for safe temporary removal. It also disables custom spawning, hordes, blood moons, scaling, and attribute tuning for the current server session.
- Added GitHub wiki documentation for commands, config basics, safe uninstall, and release notes.
### Fixes and Improvements
- Improved server-side-only metadata for the NeoForge build.
- Updated documentation so the cleanup commands are listed with the rest of the admin tools.
- Updated the Modrinth page to match the current features and server-side install behavior.
**Changelog**
- Fixed custom zombie spawns being too picky about terrain, which made mobs cluster around cleared village/light areas.
- Custom spawns now use safer vanilla-style spawn placement checks while still allowing daylight apocalypse spawning.
- Light sources no longer look like they “attract” spawns.
- Added clearer debug logging showing block light and max block light for successful custom spawns.
- Updated config wording to explain that light can only block spawns, not increase them.
- Updated versions: NeoForge `2.2.22`, Forge `1.5.16`.
**Changelog**
- Fixed custom zombie spawns being too picky about terrain, which made mobs cluster around cleared village/light areas.
- Custom spawns now use safer vanilla-style spawn placement checks while still allowing daylight apocalypse spawning.
- Light sources no longer look like they “attract” spawns.
- Added clearer debug logging showing block light and max block light for successful custom spawns.
- Updated config wording to explain that light can only block spawns, not increase them.
- Updated versions: NeoForge `2.2.22`, Forge `1.5.16`.
- Added torch/light protection for custom zombie spawns.
- New `/zdayspawn maxlight <level>` command.
- New `maxBlockLightForSpawning` config option.
- Torches, lanterns, glowstone, and other block light sources can now stop custom zombie waves from spawning in bases.
- `-1` ignores block light, `0` allows only total darkness, and `7` works like vanilla hostile mob lighting.
### Bug Fixes
- Fixed daylight burn protection blocking real fire damage in some cases.
- Zombies should now still take damage from lava, campfires, fire blocks, and other fire sources.
- Fixed Forge 1.20.1 packaging so it only includes the correct Forge advancement files.
- Added torch/light protection for custom zombie spawns.
- New `/zdayspawn maxlight <level>` command.
- New `maxBlockLightForSpawning` config option.
- Torches, lanterns, glowstone, and other block light sources can now stop custom zombie waves from spawning in bases.
- `-1` ignores block light, `0` allows only total darkness, and `7` works like vanilla hostile mob lighting.
### Bug Fixes
- Fixed daylight burn protection blocking real fire damage in some cases.
- Zombies should now still take damage from lava, campfires, fire blocks, and other fire sources.
- Fixed Forge 1.20.1 packaging so it only includes the correct Forge advancement files.
Added
- Added /zdayspawn babychance <0.0-1.0>
- Added a hard config option to disable new baby zombie-class spawns with babyZombieChance = 0.0
Changed
- Made the generated config easier to read with clear section dividers
- Improved config descriptions and beginner/performance guidance
- Updated versions to NeoForge 2.2.18 and Forge 1.5.11
Fixed
- Fixed baby zombie disabling so vanilla spawn finalization cannot turn custom spawns into babies afterward
- Fixed baby chicken jockey edge cases when baby zombies are disabled
- Fixed /zstats clear so milestone advancements can be re-earned
- Fixed /zday set so horde/blood moon schedule state resets correctly
- Fixed inconsistent zombie attribute application
- Ensured the metadata reflected the requirement of being server only.
Added
- Added /zdayspawn babychance <0.0-1.0>
- Added a hard config option to disable new baby zombie-class spawns with babyZombieChance = 0.0
Changed
- Made the generated config easier to read with clear section dividers
- Improved config descriptions and beginner/performance guidance
- Updated versions to NeoForge 2.2.18 and Forge 1.5.11
Fixed
- Fixed baby zombie disabling so vanilla spawn finalization cannot turn custom spawns into babies afterward
- Fixed baby chicken jockey edge cases when baby zombies are disabled
- Fixed /zstats clear so milestone advancements can be re-earned
- Fixed /zday set so horde/blood moon schedule state resets correctly
- Fixed inconsistent zombie attribute application
- Ensured the metadata reflected the requirement of being server only.
Forge now gets the speed improvements too. Before, NeoForge had the faster spawn code, but the Forge 1.20.1 version was still using the older slower code. Now both versions are caught up.
Less lag during zombie spawning. The mod now reads spawn settings once per tick instead of checking the config over and over for every player and every zombie spawn attempt. That saves server work, especially with multiple players online.
Less tiny object spam in memory. The spawn loop now reuses position objects instead of constantly creating new ones. That helps reduce garbage collection stutters.
Horde and blood moon commands are more reliable. If an admin runs /zhorde start or /zbloodmoon while standing in the Nether or End, the mod now still uses the Overworld clock. That matters because the apocalypse day/night system is based on the Overworld.
One spawn setting edge case is fixed. If minSpawnDistance was equal to spawnRange, the mod used to think spawning was impossible. That was too strict. Now it only blocks spawning when the settings truly make spawning impossible.
Servers with no players do almost no spawn work. The mod now exits faster when no players are in a dimension.
Forge now gets the speed improvements too. Before, NeoForge had the faster spawn code, but the Forge 1.20.1 version was still using the older slower code. Now both versions are caught up.
Less lag during zombie spawning. The mod now reads spawn settings once per tick instead of checking the config over and over for every player and every zombie spawn attempt. That saves server work, especially with multiple players online.
Less tiny object spam in memory. The spawn loop now reuses position objects instead of constantly creating new ones. That helps reduce garbage collection stutters.
Horde and blood moon commands are more reliable. If an admin runs /zhorde start or /zbloodmoon while standing in the Nether or End, the mod now still uses the Overworld clock. That matters because the apocalypse day/night system is based on the Overworld.
One spawn setting edge case is fixed. If minSpawnDistance was equal to spawnRange, the mod used to think spawning was impossible. That was too strict. Now it only blocks spawning when the settings truly make spawning impossible.
Servers with no players do almost no spawn work. The mod now exits faster when no players are in a dimension.
`v2.2.7`
- Fixed `/zstats clear` so it now fully resets zombie kill milestone progress, including the 250, 1000, and 3000 zombie advancements.
- Fixed `/zday set <day>` so changing the day counter also resets horde and blood moon scheduling state. This prevents stale events, skipped rolls, or carried-over event flags after changing the world day.
- Added regression tests for advancement reset handling and apocalypse event state reset.
- Updated mod version to `2.2.7`.
**Commands Added**
These were already in the current feature set and are now working correctly:
**What They Do**
- `/zday set 10` sets the apocalypse/world day counter to day 10.
- `/zdayspawn daylightstart 10` disables custom daytime zombie spawning until day 10.
- `/zdayspawn daylightstart 0` allows daytime custom spawning immediately.
Fixed a ConcurrentModificationException crash risk in /zkill when many zombies are loaded. Entities are now collected before removal.
Fixed blood moon deactivation calling setDirty() on every daytime tick (~14,000 times per in-game day). Now only triggers once at dawn when the blood moon actually ends.
Fixed world save data being marked dirty on every setter call even when the value did not change. Persistent state is now only written when a value actually changes.
Performance
onEntityTick (fires every tick for every entity) now checks the preventSunBurn config toggle as its very first operation, cutting out unnecessary work when the feature is disabled.
onLivingIncomingDamage now checks the config toggle before the instanceof check.
Horde/blood moon state is now fetched once per spawn tick via a consolidated EventState snapshot instead of 4–6 separate lookups.
Robustness
Added a warning log when minSpawnDistance is configured equal to or greater than spawnRange, which would silently prevent all spawns.
Nether spawning now scans downward from a random Y to find a valid air pocket instead of picking a fully random Y that usually lands inside netherrack. Falls back to random Y if no pocket is found.
Code Quality
Armor tier selection in difficulty scaling replaced string-based dispatch with a type-safe ArmorTier enum and EquipmentSlot parameter.
Added pack.mcmeta with correct pack_format 34 for MC 1.21.1 resource pack compatibility.
This release is a **backport** of the newer ZombieApocalypseAddon branch to **Minecraft Forge 1.20.1**, so 1.20.1 servers/players can use the same core apocalypse gameplay systems.
### Added / Included in Backport
- Custom zombie spawning during day and night near players.
- Configurable horde events with interval, chance, duration, multiplier, and wave size controls.
- Blood moon system with random chance and admin-forced activation.
- Day-based difficulty scaling for zombie speed, health, armor, and weapons.
- Biome-aware zombie variants (husk/drowned/zombie villager weighting).
- Post-death cooldown system to temporarily reduce spawn pressure.
- Persistent kill/cooldown statistics.
- Full admin command suite with help command:
- `/zhelp`, `/zburn`, `/zkill`, `/zhorde`, `/zbloodmoon`, `/zstats`, `/zscaling`, `/zdayspawn`
### Improvements
- This is a backport from the new 2.0 version of this mod so this means the old version with items etc will no longer be supported as this is the scope im going for with the project leaning towards functionality over actual in game items.
### Notes
- This is the **Forge 1.20.1 compatibility line**.
- Mainline development remains on the newer version branch.
This update is a major stability/quality pass focused on spawn logic, event reliability, command usability, and server performance.
### Added
- New `/zhelp` command with a full admin command overview.
- New configurable horde trigger chance (`hordeStartChance`).
- New spawn tuning option (`spawnAttemptsPerZombie`) for better wave fill control.
- New overworld spawn rule option (`requireOpenSkyForOverworldSpawns`).
### Changed
- Improved in-game command output/messages and status formatting.
- Reworked horde + blood moon scheduling/state handling to be deterministic and safer.
### Fixed
- Horde scheduling no longer rolls once per dimension (was unintentionally increasing odds).
- Forced blood moons no longer double-trigger or double-announce in the same night.
- `enableZombieVariants=false` is now a hard off switch (biome bonuses no longer bypass it).
- Nether spawning now works correctly when enabled (no accidental sky-check blocking).
- Death cooldown data now persists correctly across restarts.
### Performance
- Reduced spawn-time entity scan cost around players.
- Improved spawn attempt logic and config normalization paths.
### Command updates
- `/zdayspawn` now supports more live tuning controls, including:
`eventinterval`, `attempts`, `hordechance`, `sky`, `nether`, `end`.
### Compatibility
- Target platform: NeoForge `1.21.1`
- Existing worlds are supported.
- If you heavily customized configs, review new options in `zombieapocalypseaddon-common.toml`.
New Features
Blood Moon zombie boost: Blood moons now spawn 4 zombies per attempt (configurable)
Player notifications: Title messages appear when horde/blood moon starts and ends
Zombie Villager variant: 5% chance to spawn (configurable, can be cured!)
Configurable event spawn interval: Now uses eventSpawnInterval config (default 20 ticks)
/zstats clear command: Resets all kill stats and death cooldowns
This major update transforms the mod from a simple "zombies don't burn in sunlight" tweak into a **full zombie apocalypse experience**. Expect massive hordes, terrifying blood moons, progressive difficulty, biome-aware chaos, and tons of customization!
**NOTE YOU CAN CUSTOMIZE NEARLY 100% OF THIS MOD.
## ✨ New Features
### 🌊 Horde Events
- Random massive zombie waves every few in-game days
- Configurable interval, duration, and spawn multiplier
- Manual control commands:
/zhorde start
/zhorde stop
/zhorde status
🔴 Blood Moon Nights
- Random chance each night for **extreme** zombie spawns
- Stacks with other multipliers for truly terrifying nights
- Force one tonight:
/zbloodmoon
📈 Difficulty Scaling
- Zombies grow progressively stronger over time
- Affected stats: movement speed, health, armor penetration, weapon damage
- Configurable start day and max scaling day
- Check your progress:
/zscaling status
🌙 Night Boost
- Optional increased spawn rates during nighttime
- Stacks with blood moons for ultimate chaos
### 🌿 Biome Modifiers
- **Desert/Badlands** → more Husks
- **Ocean/River/Swamp** → more Drowned
- **Mushroom Islands** → safe zone (no zombie spawns!)
- Optional spawning in **Nether** and **End**
### 👶 Zombie Variants
- Husks and Drowned can now spawn naturally
- Configurable baby zombie spawn chance
- All variant chances are fully customizable
### 💀 Death Cooldown (Mercy Period)
- Reduced spawns for a short time after death
- Prevents frustrating respawn-death loops
- Configurable duration and spawn reduction amount
### ✨ Spawn Effects
- Atmospheric sound and particle effects on zombie spawns
- Helps you notice (and fear) new threats instantly
### 📊 Statistics System
- Tracks zombie kills per player
- Persists across server restarts
- View stats:
/zstats
/zstats <player>
text## 🎮 New & Updated Commands
| Command | Description |
|--------------------------|------------------------------------------|
| `/zhorde start` | Manually start a horde event |
| `/zhorde stop` | Stop the current horde |
| `/zhorde status` | View horde and blood moon status |
| `/zbloodmoon` | Force a blood moon tonight |
| `/zstats [player]` | View kill statistics |
| `/zscaling status` | View difficulty scaling progress |
| `/zdayspawn status` | View all spawn-related settings |
New subcommands under `/zdayspawn`:
- `nightboost`
- `horde`
- `bloodmoon`
- `scaling`
- `biomes`
- `cooldown`
- `effects`
## ⚙️ Configuration
- **40+ new config options** — everything is toggleable and customizable!
- Sensible drop-in defaults so you can install and play immediately:
- Spawns every 2 seconds at 50% chance
- Max 50 zombies per player
- Hordes every 5 days, lasting 5 minutes
- Blood moon 15% chance per night
- Difficulty scales from day 3 to day 50
- 30-second death cooldown
- Every setting includes detailed comments explaining exactly what it does
## 🔧 Technical Improvements
- Uses Minecraft's `RandomSource` for thread-safe random generation
- Optional debug logging for easier troubleshooting
- Statistics persist using `SavedData`
- Surface-only spawning (no more annoying underground spawns)
- Biome-aware spawn positioning logic
## 📋 Full Feature List (Now Including Original Features)
- ✅ Zombies don't burn in sunlight
- ✅ Continuous daytime spawning
- ✅ Horde events
- ✅ Blood moon nights
- ✅ Difficulty scaling over time
- ✅ Night spawn boost
- ✅ Biome-specific spawning
- ✅ Zombie variants (Husk, Drowned, Baby)
- ✅ Death cooldown mercy period
- ✅ Spawn sound/particle effects
- ✅ Kill statistics tracking
- ✅ Extra mob drops (bones, string, ender pearls, phantom membrane, etc.)
- ✅ 40+ config options
- ✅ **Server-side only** (no client mod required!)
Enjoy the apocalypse! 🧟♂️☠️
Feedback, bug reports, and suggestions always welcome.