
ZombieApocalypseSSS
ZombieApocalypseSSS is a comprehensive Minecraft plugin that transforms your server into a thrilling zombie survival apocalypse. Featuring advanced zombie AI, evolving variants, player infection mechanics, psychological horror elements, and dynamic events
4.3.1
Compatibility
Changes
ZombieApocalypseSSS – Bug Fix Report (v4.3 → v4.3.1)
Custom Items Retained
- Bandage – stops bleeding
- Antivirus – cures infection
- Adrenaline – speed/strength boost (now with 60s cooldown)
- ZombieCamo – zombies ignore you for 60s
- Radio – detect next supply drop location
Removed Items
Gun system (commented out), Ammo, Landmine, Grenade, Flashbang, MedKit — stubs removed from ZombieUtils.
Bug Fixes
| # | Severity | File | Description |
|---|---|---|---|
| 1 | 🔴 | WorldEventTask | Blood Moon now rolls once per night, not every 5 s (was ~99% effective chance) |
| 2 | 🔴 | ZombieApoc | /zapoc infect & /zapoc cure now use infectionPointsKey (new system) |
| 3 | 🟠 | PlayerStatusTask | Removed legacy infectKey migration block that caused same-tick inconsistency |
| 4 | 🟠 | WorldEventTask | Supply drop location uses getHighestBlockYAt on main thread safely |
| 5 | 🟠 | WorldEventTask | Loot chance uses nextDouble()*100 (was nextInt(100) >= double) |
| 6 | 🟡 | PlayerStatusTask | tickCount changed to long (no overflow) |
| 7 | 🟡 | ZombieApoc | isPlayerInfected() now checks infectionPointsKey |
| 8 | 🟡 | WorldEventTask | Blood Moon messages routed through i18n system |
| 9 | 🔴 | ZombieCleanupListener | Zombie tracking restored on chunk reload (ChunkLoadEvent) |
| 10 | 🔴 | ZombieApoc | /zapoc reload unregisters old StructureManager listener (was multiplying on each reload) |
| 11 | 🟠 | StructureManager | Structures skip ocean/river biomes |
| 12 | 🟠 | ZombieBehaviorTask | Screamer config now reads from correct file (zombies.yml) and correct path |
| 13 | 🟡 | WorldEventTask | Supply drop rotates among random online player (not always first in list) |
| 14 | 🟡 | PlayerStatusTask | Bleeding uses System.currentTimeMillis() for stable 2 s interval under lag |
| 15 | 🔴 | AntivirusItem | Now clears infectionPointsKey — previously never worked |
| 16 | 🔴 | ZombieUtils | All getItemByKey calls are null-safe with log warnings |
| 17 | 🟠 | AdrenalineItem | 60-second cooldown added (was infinite-spam) |
| 18 | 🟠 | ItemListener | EquipmentSlot.HAND guard prevents items firing twice per click |
| 19 | 🟡 | PsychologicalHorrorTask | Hallucination zombie spawned as PLUGIN reason, not intercepted by SpawnListener |
| 20 | 🟡 | RadioItem | Cooldown lore update checks both main hand and offhand |
| 21 | 🟡 | SpecialZombieListener | NamespacedKey for ability cooldown cached (not created per-hit) |
| 22 | 🔴 | ZombieCamoItem | Now writes to plugin.getCamoKey() ("apoc-camo") — previously never worked |
| 23 | 🔴 | BandageItem | Checks PersistentDataType.INTEGER (was BYTE) — previously never worked |
| 24 | 🔴 | ZombieBehaviorService | onPlayerDeath uses correct key names — bleeding/infect now cleared on death |
| 25 | 🟠 | ZombieUtils | Removed dead stubs for unregistered item keys (gun, ammo, landmine, etc.) |
| 26 | 🟠 | ZombieBehaviorService | Bleeding config reads from zombiesConfig (was pluginConfig) |
| 27 | 🔴 | ZombieApoc | /zapoc give <gun> no longer NPE-crashes; shows friendly message |
| 28 | 🟠 | ZombieBehaviorTask | moans, mutation, zombie-breaking now read from zombiesConfig |
| 29 | 🟠 | ItemProtectionListener | CMD validation uses getItemsConfig() (was getConfig()) |
| 30 | 🟠 | ZombieApoc | /zapoc stats shows actual infection points (was always "NO") |
| 31 | 🟠 | ZombieBehaviorTask | Screamer config path fixed: zombies.types.screamer.* |
| 32 | 🟡 | SurvivalGuideListener | GuidePage.valueOf() wrapped in try/catch |
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:pSQD27Eo:Qu0WHUt6"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:pSQD27Eo:Qu0WHUt6"
}
