- New hooks: config block — disable any integration (Vault, WorldGuard, Dynmap, Lands, Nexo, etc.) with a single flag
- New bedrock.force-java-menus option — Bedrock players see the Java chest GUIs (translated by Geyser) instead of native forms
- Bedrock menus are now fully customizable via bedrock-guis/.yml (one yml per menu, matching the Java guis/.yml system)
- All 16 Bedrock menu titles, static buttons and icons can be skinned without touching the jar
- menu_flags.yml / menu_permissions.yml accept per-flag and per-permission text overrides
- gui-title in menu yml now accepts raw MiniMessage (embed Nexo/Oraxen glyphs directly to position GUI backgrounds)
- Nexo integration now exposes the <shift:N> tag for pixel offsets (alongside <glyph:name>)
- Faster interact events: material dispatch replaces the linear predicate scan in SettingsListener
- Web dashboard now validates claim names and descriptions with the same regex as commands
- Hook retry timers are cancelled on /reload and plugin disable (no more stale probes)
- Squaremap overlays are now cleared on reload, matching the other map hooks
- Added an explicit index on scs_members.claim_id for better query planning on SQLite
- Chunk-load particles now batch + dedupe per claim (fixes ClaimCache executor saturation on heavy chunk streaming)
- New /scs player <player> manage-claim <claim> syntax to avoid argument conflicts
- Admin commands to create, delete and assign custom roles
- Tab completion now lists claims of offline players
- /scs player addmember/promote/demote now updates bossbar, Discord and events
- Player cache now shares the same thread pool config as the claim cache
- /scs metrics:claims shows cached/total claim count
- Fixed async error on favorite claim toggle
- Nexo, Oraxen and ItemsAdder glyphs work in menus (titles, names, lores)
- Big Redis rework, no more timeouts with many chunks
- Race fix when two players claim the same chunk at once
- UUID change now follows claims, members, bans and templates
- Configurable cache thread pool (automatic or manual)
- Progress message when /claim radius takes a while
- Fixed concurrency issue: Claim.customRoles now uses CopyOnWriteArrayList (previous ArrayList could cause concurrent modification errors)
- /cc <msg> = one-time message to claim chat
- /claim chat = toggle normal chat into claim chat
- /claim favorite and /claim favorites to bookmark and list claims
- /claim stats [name] shows chunks, members, banned players, and top audit actions
- /claim list <filter> = search by name via chat, click result to teleport
- Hover now shows name, owner, chunk count, and description
- Added 1-hour warning before expiration for the invitations (skipped if invite <1h, silent if player offline)
- Warning on join if claims are near deletion for the auto purge (config: claims.auto-purge.warn-days-before, default 7, 0 = disabled)
- Added %chunk_count%, %member_count%, %banned_count%, %role_member_count%, %role_moderator_count%, %role_visitor_count%, %custom_role_count%, %world%, %spawn_x/y/z%, %for_sale%, %is_parea%, %claim_id%, %owner_uuid% for maps
- Updated dashboard backend : rate limit: 120 requests/min/IP (returns 429 if exceeded) + tokens now have TTL (config: web-dashboard.token-ttl-hours, default 24, 0 = disabled)
- Claim names validated before command dispatch (prevents unsafe input)
- GUI CommandAction sanitizes %player% input
- Claim DB loading now runs in parallel (chunks/members/banned)
- Explosion handling uses EnumMap (faster and deterministic)
- ClaimCache executor no longer drops tasks (logs + fallback execution instead)
- Expired member cleanup runs in batches (avoids long locks)
- PlayerDAO.findAllAsync now supports pagination (old method unchanged for compatibility)
- Bossbar no longer crashes with custom roles (fallback applied)
New player features
/claim create <name>— name your claim straight away, no moreclaim-%n/claim back— teleport to the last claim you entered this session/claim preview [radius]— see which chunks/claimwould take before paying (yellow = free, red = taken)/claim respawn— make a claim your respawn point on death/claim template save | apply | list | delete— save a claim's perms + flags as a template, slap it on every other claim/claim invite <player> <duration>— temporary invites (e.g.7d) with auto-kick, persist across restarts- Default claim radius — a bare
/claimcan now claim a whole area per player setting
New admin tools
/scs exportAuditLogs <claimId|*>— dump the audit log to CSV/scs resetrole <role>— reset one role's permissions across every claim in a single call- Daily tax / rent system — optional per-chunk daily charge, auto-unclaim after a grace period (beta)
Bedrock parity
- Bedrock players can now teleport from
/claim list- New admin player GUI + online-player picker for invites and bans
- Remaining time on temp invites shown in the member GUI
Security & performance
- Web dashboard: editable CORS whitelist + rate-limited
/authendpoint- Particle engine rewritten — ~80% fewer spawn calls on busy servers
- SQLite tuned (WAL mode) — "database is locked" errors gone
- Atomic claim creation — no more half-created orphans
- Redis/Caffeine coherence fixes
Beta notice
A few new systems are shipping in beta: the daily tax / rent, claim templates and temporary invites. They work end-to-end, but please report any edge case on this Discord so we can polish them quickly.
