/
| # | Severity | File | Description |
|---|---|---|---|
| 33 | 🔴 | ZombieSpawnService | Zombie names encoded as §c§lSCREAMER → fixed to §c§lSCREAMER. Affected: SCREAMER, Stalker, Crawler, Feign Death, Boss. Names were rendering as garbage text on all servers. |
| 34 | 🔴 | ZombieApoc (onEnable) | registerRecipes() was never called — comment RECIPES REMOVED was accidentally left after feature re-enable. All 6 vanilla crafting recipes (bandage, antivirus, adrenaline, zombie camo, radio, turret) were silently unavailable. |
| 35 | 🔴 | BandageItem | create() read custom-model-data from getPluginConfig() (config.yml) instead of getItemsConfig() (items.yml). Bandages would always spawn without CustomModelData, breaking resource packs. |
| 36 | 🔴 | SurvivalGuideListener | SurvivalGuideHolder.getInventory() returned null — violates InventoryHolder contract. Fixed: holder stores and returns its own Inventory reference. |
| 37 | 🔴 | MilitaryCheckpoint | spawnTowerSniper() re-rolled random offset/height instead of using the cached towerBase/towerHeight computed in cacheTowerPosition(). Tower snipers could spawn anywhere except the actual tower. |
| 38 | 🟠 | AdrenalineItem | onInteract() lacked RIGHT_CLICK_AIR / RIGHT_CLICK_BLOCK guard. Item could trigger on LEFT_CLICK_BLOCK in edge cases. |
| 39 | 🟠 | ZombieApoc (TabComplete) | /zapoc give camo was listed in tab-complete but the switch-case expected "zombie-camo". Fixed to "zombie-camo" in both places. |
| 40 | 🟠 | CrashedSupplyPlane | setMaxHealth() deprecated since Bukkit 1.16. All mob health now uses Attribute.GENERIC_MAX_HEALTH.setBaseValue(). Affected: pilot, supply guard, medic, soldier zombies. |
| 41 | 🟠 | MilitaryCheckpoint | Same setMaxHealth() deprecation fix for heavy soldiers, commanders, and tower snipers. |
| 42 | 🟠 | AbandonedHospital | WHITE_BED placement ignored required BlockData facing direction — bed failed silently. Replaced with WHITE_WOOL as visual equivalent. |
| 43 | 🟠 | RadioItem | Lore cooldown update only scanned main hand + off hand. If player moved radio to any other slot the cooldown label stayed stale forever. Fixed to scan full inventory. |
| 44 | 🟡 | Structure types (×5) | isReplaceable() and isValidMobSpawn() copy-pasted in 5 classes. Extracted to new StructureHelper utility class. |
| 45 | 🟡 | AbandonedHospital, AbandonedOutpostPro, SurvivorCamp | Structure zombies used vanilla world.spawnEntity() — bypassing custom AI, tier evolution, sun effects, and tracking. Now use ZombieSpawnService.spawnCustomZombie(). |
StructureHelper (structure/StructureHelper.java)
isReplaceable(Material) — shared replaceable-block checkisValidMobSpawn(World, Location) — 3-block column spawn validationsetBlockSafe(World/Location, Material) — convenience block-place wrapper§c§lSCREAMER) on all servers due to source-file encoding corruption. All names now render correctly.registerRecipes() is now correctly called in onEnable.BandageItem.create() read CMD from the wrong config file (config.yml instead of items.yml). Bandages now respect resource-pack model overrides.SurvivalGuideHolder.getInventory() returned null, violating the InventoryHolder contract. The holder now stores and returns a proper Inventory reference.MilitaryCheckpoint snipers re-randomised their spawn offset on every call instead of using the cached tower position from cacheTowerPosition(). Snipers now always spawn on the tower platform they are supposed to guard.RIGHT_CLICK_AIR / RIGHT_CLICK_BLOCK guard; item could fire on left-click in edge cases./zapoc give zombie-camo — tab-completion listed "camo" but execution expected "zombie-camo". Both are now consistent.setMaxHealth() deprecation — replaced all deprecated LivingEntity.setMaxHealth() calls in CrashedSupplyPlane and MilitaryCheckpoint with Attribute.GENERIC_MAX_HEALTH.setBaseValue().WHITE_BED placement requires directional BlockData not set during procedural generation, causing silent failures. Replaced with WHITE_WOOL as a visual equivalent.AbandonedHospital, AbandonedOutpostPro, and SurvivorCamp spawned plain vanilla zombies that bypassed custom AI, tier evolution, sun effects, and the tracking map. They now call ZombieSpawnService.spawnCustomZombie(), so all structure zombies scale with server difficulty like any other custom zombie. Thematic equipment (hospital gown, outpost guard gear, survivor leather) is applied on top of the custom zombie.StructureHelper utility class — isReplaceable(Material), isValidMobSpawn(World, Location), and setBlockSafe() were copy-pasted identically across 5 structure classes. This shared utility eliminates the duplication. All structure implementations now delegate to StructureHelper.data.yml, campfires.yml, and turrets_data.yml are fully compatible.
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