- BUG-1: Added alerts.cooldown_ms (default 5s) to throttle warn() and
sendAlert() in PunishmentManager, preventing chat spam during high-frequency
flags. Verbose output in ViolationManager also respects the cooldown.
Kick/ban punishments always fire immediately regardless of cooldown.
- BUG-2: Fixed FlyCheck false positive with Jump Boost I - condition was
incorrectly flagging players with Jump Boost level 1. Now exempts all
jump boost levels from the sustained-flight flag.
- BUG-3: Optimized SpiderCheck by caching player.getLocation() in a single
variable instead of calling it 3 times.
- SpiderCheck: fixed Location mutation bug - bodyBlock was reading y-1 (same as feetBlock) and headBlock was reading y instead of y+1. Now uses block coordinates directly.
- ConfigManager: decay task no longer reads YamlConfiguration from background thread. decayRate is now volatile and refreshed on reload from main thread only.
- JesusCheck, SpeedCheck, NoFallCheck: loc.subtract() now uses .clone() to prevent silent Location mutation.
- VelocityCheck: decrementVelocityCheckTicks() moved past the minExpected threshold check to avoid consuming a tick on packets that are immediately discarded.
- SpiderCheck: fixed Location mutation bug - bodyBlock was reading y-1 (same as feetBlock) and headBlock was reading y instead of y+1. Now uses block coordinates directly.
- ConfigManager: decay task no longer reads YamlConfiguration from background thread. decayRate is now volatile and refreshed on reload from main thread only.
- JesusCheck, SpeedCheck, NoFallCheck: loc.subtract() now uses .clone() to prevent silent Location mutation.
- VelocityCheck: decrementVelocityCheckTicks() moved past the minExpected threshold check to avoid consuming a tick on packets that are immediately discarded.