- Wired the per-role TELEPORT permission into a PlayerTeleportEvent listener: visitors can no longer teleport into claims that deny TELEPORT (covers /spawn, /tp, ender pearls, chorus fruit, the /claims GUI button, and plugin teleports)
- Cost multiplier now applies from the 2nd chunk instead of the 3rd (chunk-cost x multiplier^(N-1))
- Declared every scs.* permission node in plugin.yml (scs.bypass., scs.admin., scs.claim., scs.permission., scs.flag., scs.limit.) for proper LuckPerms autocompletion and documentation
- Fixed UnsupportedOperationException due to new API
- Fixed empty slot issue when clicking
- Fixed some minor issues in bedrock GUIs
- Added unclaim button into home bedrock menu
- Auto-naming with %n now picks the lowest free number per player (claim-1, claim-2, ...) — gaps from deleted claims are reused, no more huge numbers from the database id
- Most claim events are now cancellable: other plugins can veto a create / delete / chunk-add / member-kick / ban / rename / sale and more
- Claim getters (getMembers, getFlags, getPermissions, ...) now return read-only views, mutate through claim.addMember(), setFlag(), or the SCS_API methods
- Web dashboard tokens are now stored hashed on disk (existing tokens auto-migrate on first load)
- Web dashboard: every admin action is logged to the audit log with UUID + IP; boot-time warning when cors-origins contains '*'
- Audit log flush is now every 5s (was 30s) and configurable: audit-logs.flush-interval-seconds, audit-logs.batch-size
- Folia: fixed teleport-packet handler that was reading player state from the wrong thread
- Hardened auto-commands: auto-claim / auto-merge / auto-delchunk now reject claim and parea names with unsafe characters
- Database connection leak detection on by default (5s, tweak via database.hikari.leak-detection-ms)
- Background task drops cached data for offline players every 10 minutes, keeps memory bounded on long-running servers
- Fixed rare race when two players saved a template with the same name at the same instant
- Fixed PlayerInteract firing twice on right-click (off-hand pass now ignored)
- New scs_schema_version table prepares for future schema migrations (no behavior change yet)
- Schema migrations refuse table names outside the plugin's whitelist (defense-in-depth)
- Cleanup: replaced ObjectInputStream with DataInputStream in GriefPrevention import; removed obsolete dependency-reduced-pom.xml
- Fixed server crash on PlayerQuit when a player owned a very large claim (per-chunk Caffeine refresh saturated the cache executor and pinned the main thread)
- Split INTERACT_LECTERN into INTERACT_LECTERN_READ (read books on a lectern) and INTERACT_LECTERN_TAKE (place / take books) so a public reading lectern can stay safe from visitors
- Startup migration now removes obsolete permission and flag keys from saved claims and templates, not just adding the new ones
- Custom roles inherit the claim's MEMBER row when new permission keys are added at startup
- Per-subcommand permissions added to every /scs subcommand (importFromV1, web-token, update, transferLocal/Distant, resetPermissions/Flags*, resetpermission, resetflag, resetrole, ...) so admins can hand out granular access without scs.admin.*
- Fixed /scs reload checking the wrong permission node (scs.claim.reload instead of scs.admin.reload)
