NoFarmlandTrample 2.2.0
Thread safety, performance, and quality of life
✦ Fixes
• Race condition fix — async stats save no longer risks ConcurrentModificationException. Internal HashMap replaced with ConcurrentHashMap and AtomicLong counters.
• Missing permission node nofarmtrample.use is now properly declared in plugin.yml (was referenced in code but undeclared, causing tab-complete issues with some perm plugins).
• Sound resolution — version-specific sound names (NOTE_BASS / BLOCK_NOTE_BASS / BLOCK_NOTE_BLOCK_BASS) are now resolved once at startup and cached, instead of try/catch on every notification.
✦ Performance
• ActionBar reflection cached at plugin startup — class lookups, methods, constructors are resolved once. Per-message cost reduced from full reflection scan to direct method invocation.
• Removed ~80 lines of hardcoded language strings in code — language files are now loaded purely from jar resources with proper UTF-8 handling.
• Lang file extraction uses try-with-resources and a 4KB buffer instead of 1KB.
✦ Compatibility
Spigot/Bukkit/Paper 1.8 - 1.21+. Auto-detects farmland and crop materials across versions.
✦ Upgrade
1. Stop server
2. Replace the jar in plugins folder
3. Start server (your config.yml is fully compatible — no changes needed)
Author: hiteex