
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.0] - 2026-03-12 - Update Checker + Version Bump
✨ New Features
- Modrinth Update Checker — The plugin now checks for new versions on Modrinth during server startup.
- Runs fully async; won't lag the main thread even if the network is slow.
- If an update is available: Prints a clear console notification showing current vs. latest version.
- Admins with the
zapoc.adminpermission receive a chat notification upon joining (delayed by 2 seconds to avoid being buried by other login messages). - Can be completely disabled via
update-checker: falseinconfig.yml. - Class:
UpdateChecker.java— implementsListenerto hook intoPlayerJoinEvent.
🐛 Bug Fixes
-
Messages never loaded (Critical) —
loadConfig()calledsaveResource("messages_vi.yml"), but the file is located atlanguage/messages_vi.ymlinside the JAR.saveResourcethrew a startup exception, leavingmessagesConfigempty—resulting in everygetMessage()call returning§cMissing key: .... Fixed by using the correct sub-path and ensuring parent directories are created if missing. -
/zapoc panicspawned vanilla zombies — The command calledZombieSpawnService.transformZombie(z, "random"), but"random"is not a valid key in thezombieTypesmap. This causeddata == null, making the method return immediately without applying stats, AI, or types. All 15 panic zombies were plain vanilla. Fixed by callingZombieSpawnService.randomizeZombie(z). -
Supply drop interval ignored config —
WorldEventTask.calculateNextDrop()attempted to readplugin.getPluginConfig().getLong("supply-drop.interval")fromconfig.yml, but the key is actually defined inevents.yml. The interval always defaulted to the hardcoded 18,000 ticks. Fixed by reading fromplugin.getEventsConfig(). -
Sun effect settings ignored config —
ZombieBehaviorTask.handleSunEffect()attempted to readsun-effect.mode,sun-effect.light-threshold, and related keys fromplugin.getPluginConfig()(config.yml), but those keys reside insun-effect.yml. Sun slow/burn modes always used hardcoded defaults. Fixed by reading fromplugin.getSunEffectConfig().
⚠️ Minor Fixes
-
Bleeding tick check unreliable —
PlayerStatusTaskusedBukkit.getCurrentTick() % 40 == 0to throttle bleeding damage to every 2 seconds. Because the server tick counter and task invocation aren't perfectly aligned, the check fired inconsistently. Replaced with a localtickCountfield incremented on each run. -
canSpawnMutated()allowed 2 Mutated per chunk — The method returnedcount < 2despite a comment explicitly stating the design cap is 1 per chunk. Adjusted tocount < 1. -
ZombieApocRefactored.javaremoved — Cleaned up a dead-code class from a previous refactor attempt. It was never used as the main class and contained inverted command logic. Deleted entirely.
