Bug fixes:
• Anti-ESP no longer rewrites every spawner in a chunk packet to stone; palette masking only runs for chunks that contain a PerfSpawners-tracked spawner, avoiding ghost blocks and wrong ESP highlights on vanilla or third-party spawners
• Admin worlds panel uses stable slot ordering, warns in the server log when two entries share the same slot, and prevents opening the spawner list when the configured world is not loaded
Improvements:
• Unloaded worlds in the admin panel show a barrier icon and an extra tooltip line explaining the world is not loaded
Config and files to merge when updating:
• messages.yml — addadmin-panel-world-unloaded-loreif you use a custom messages file (default is in the jar / repomessages.yml)
• gui/admin-worlds.yml — ensure each world button has a uniqueslotand thatworld:matches the exact Bukkit world folder name; copy the updated header comment from the default file if you maintain yours by hand
Bug fixes:
• Admin spawner panel (/perfspawners panelworld list) no longer shows “ghost” entries where the database row still exists but there is no spawner block at that location
Bug fixes:
• Anti-ESP chunk faking no longer runs on the global region scheduler on Folia, sogetChunkAtno longer throws “Thread failed main thread check / Async chunk retrieval” when MAP_CHUNK packets are processed
Bug fixes:
• Anti-ESP no longer schedules chunk tile scans on the Folia region scheduler; MAP_CHUNK follow-up fakes and batched fake passes use the global scheduler so chunk access no longer throws on Canvas/Folia
Bug fixes:
• Spawner overview, storage, sell confirmation, and shop menus no longer treat clicks in your player inventory as GUI buttons (fixes wrong actions and odd cursor behavior when slot numbers match the menu)
• Dragging items across spawner admin and player menus is blocked so the client stays in sync with the GUI
Bug fixes:
• Spawner storage “Drop page” no longer closes and reopens the GUI, so the mouse cursor stays where you had it instead of jumping to a fixed slot
Bug fixes:
• Multiple configured mob drops now fill storage correctly: total item capacity is shared across all drop types instead of each type behaving like it had the full cap alone
• Production uses the live spawner state from cache (items, XP, boosters, timer) so GUI or other updates during the tick no longer fight a stale snapshot
Bug fixes:
• Disabling the plugin or stopping the server on Folia no longer throws “Plugin attempted to register task while disabled” during shutdown
