Bug-fix and polish release, from an adversarial audit of v1.0.0.
Fixes
/notes purge olderthanrejectsdays < 1(a 0/negative value wiped the whole notes table) and now requires an explicitconfirmtoken, because it hard-deletes active notes by age.- Per-player cache no longer leaks or serves stale data: an async load completing after the player quit is dropped instead of re-inserting a permanent entry (which also made PlaceholderAPI report counts for offline players).
/notes add <player> <severity>with no note body is rejected instead of silently saving an INFO note named after the severity word.- PlaceholderAPI placeholders fall back to neutral values if the join-time cache load fails, instead of staying blank forever.
Polish
notify.ingamenow only governs routine change announcements; the watchlist join alert is controlled solely bynotify.watchlist-join.- Added
%betternotes_count_info%and%betternotes_count_warn%(only_alertexisted before). - Tab-completion now suggests offline players (the headline use-case) and watchlist durations.
Retested on Paper 1.21.4 (build 232) and Folia 1.21.4 (build 6). Requires Java 21.