Changelog
v1.5.0 — QoL & Polish
- Hex color support in ward names and entry messages (&#FF5500 syntax)
- Custom entry messages per ward — visitors see a configurable message when entering; placeholders: %ward% %owner% %tier% %radius%
- Ward compass — /ward compass [id|name] points your compass at a ward (nearest owned by default)
- Ownership transfer — /ward transfer [id] <player>, notifies the new owner
- Ward pickup — Sneak+right-click the ward block to pick it up (with a configurable confirmation window, default 5s)
- Config hot-reload — /ward reload reloads config.yml and re-registers crafting recipes
- Tab completion for all commands
v1.5.1 — Performance
- Shape cache avoids reading config on every block/move event
- Persistent SQLite connection + WAL journal mode + async writes
- Spatial chunk index — containment checks are now O(1) instead of O(N)
v1.5.2 — Scale (10k+ wards)
- Batch DB loading — startup uses 4 queries total regardless of ward count (was 2N+1)
- Owner index — /ward list, ward limits, and member counts are O(1)
- Name/short-ID indexes — /ward tp, /ward info, and similar lookups are O(1)
- Particle task rewritten to iterate loaded chunks instead of all wards
v1.6.0 — MySQL Support
- Optional MySQL/MariaDB backend — set database.type: mysql in config.yml and fill in credentials; SQLite remains the default
- MySQL driver auto-downloaded via Paper's library system (no manual install)
- /ward admin migrate mysql — copies all ward data from SQLite to MySQL in the background
v1.7.0 — Protection Gaps + Admin Tools
- Piston protection — pistons can't push/pull blocks across ward boundaries
- Entity grief protection — blocks Endermen, silverfish, Wither, Ravagers, etc. from changing blocks inside wards
- Fluid flow protection — lava and water can't flow into a ward
- Hanging entity protection — non-members can't break item frames or paintings inside wards
- /ward info [id|name] — shows tier, radius, owner, member count, and your role
- EntryListener rewritten to use chunk index (O(1) per player move tick)
- All new protections are toggleable in config.yml
v1.8.0 — PVP & Mob Protection + Per-Ward Flags
- PVP protection — outsiders can't attack players inside wards
- Entity damage protection — outsiders can't damage animals/mobs inside wards
- Crop trample protection — non-members can't trample farmland inside wards
- Per-ward flags (toggled in the ward GUI):
- Allow PVP — enable PVP inside a specific ward
- Allow Mob Damage — enable mob damage inside a specific ward
- /ward admin stats — shows total wards, per-world breakdown, total members, and owner count
v1.9.0 — Nearby Search + Sounds + Block Index
- /ward nearby [radius] — lists wards within radius blocks (default 100, max 500), sorted by distance with owner and tier info
- /ward admin tp <id|name> — teleport to any ward (admin only), with tab completion
- Sound effects — configurable sounds on ward place, break, pickup, and when a visitor enters (config.yml → sounds

- Ward block break/interact now uses an O(1) block position index instead of scanning all wards in the world