Hard FOV gate (extreme out-of-view hits trigger definite alert).
Adaptive edge tolerance for “borderline” hits: If the player’s aim is very good (high dot / low angle), the check allows a larger miss tolerance on the eye→reach segment distance. This significantly reduces false positives for legit near-edge hits.
Main-thread safe entity resolution (via Bukkit.getScheduler().runTask inside USE_ENTITY handler). Fixes the Paper error: “Asynchronous Chunk getEntities call”.
Packet look cache: captures yaw/pitch from LOOK/POSITION_LOOK packets for more accurate angles, with low overhead.
ProtocolLib fallback: if entity use action can’t be read, the system gracefully falls back to EntityDamageByEntityEvent.
Async alert flow (modeled after NoFall): Off-thread alert broadcast + logging, then main-thread actionbar + warning addition + player message.
Zero debug noise by default; clean console.
Performance-first design: no heavy allocations, minimal math helpers, tiny configuration cache with periodic refresh.
New / adjusted config keys (in checks.yml > KillAura):
enabled — turn the check on/off.
min_look_dot — higher = stricter.
max_look_angle — lower = stricter.
max_yaw_diff — lower = stricter.
close_distance_always_allow — allow very close melee scrums.
hard_reach — ray length. Slightly increased default to reduce FPs on edges.
hard_fov_deg — immediate fail if exceeded.
aabb_expand — expands target hitbox slightly to reduce edge FPs.
ray_miss_tolerance — base tolerance for the ray “miss distance”. Now combined with adaptive tolerance (better aim → more tolerance).
cooldown_ms — per-player alert cooldown.
warning_amount — points added per alert.
(We also provided English descriptions for all keys so you can tune strictness safely.)
Movement — Speed (quality updates)
Added safeguards to avoid speed alerts during legitimate teleports/warps (small grace when server forcibly sets position).
Powder Snow handling improved to avoid false positives when walking/falling through it (slow descent / friction cases).
Cleaned and optimized the check loop (fewer config lookups, minor math/logic tweaks) without changing your original logic.
Movement — NoFall
Introduced grace periods for legit scenarios: login, respawn, teleport, and other forced position changes. Prevents accidental NoFall alerts when the server resets the player’s position or flags.
Kept your original logic, refactoring for lower overhead and safer async/main-thread boundaries:
Packet-level fall tracking separated from Bukkit event path.
Asynchronous alert dispatch + main-thread UI/warning commit (consistent with KillAura).
Periodic cleanup of in-memory maps to prevent leaks.
Commands & Messages
Toggle messages: corrected formatting and color application behavior so the prefix and state color display properly at the start of the message.
MessageManager now translates color codes early and safely returns prefixed strings with color preserved (even at the beginning).
Stability & Performance
Eliminated unsafe async calls into Bukkit/Spigot/Paper API. (e.g., entity/world access strictly on the main thread.)
Reduced allocations (no temporary objects where not necessary) and limited config reads using lightweight parameter caching with periodic refresh (~1.5s).
Clear separation of lightweight math (main thread) and background tasks (logging/alert broadcasting).
Migration tips
Replace the JAR with the new build.
Delete the plugin data folder to let the plugin re-generate configs and internal structures.
If you had custom changes, copy your previous edits into the newly generated configs (keys and defaults changed/expanded in places).
Adjust KillAura thresholds gradually if needed:
Too many false positives → increase aabb_expand (e.g., 0.08–0.10), raise ray_miss_tolerance (e.g., 0.24–0.30), raise max_look_angle, or lower min_look_dot.
Too lenient → reduce ray_miss_tolerance, aabb_expand, hard_fov_deg, or increase min_look_dot.