Tags
Creators
Details
1.13
Compatibility
Changes
Migrated primary API from Paper to Spigot for broader compatibility. The plugin remains fully compatible with Paper, Purpur and Folia through runtime detection and conditional code paths.
Build system:
- Replaced ktor fatJar with Shadow plugin (with HikariCP relocation)
- Replaced local JARs (PlaceholderAPI, Dynmap) with Maven dependencies
- Centralized all dependency versions in libs.versions.toml
- Updated CI workflow to gradle/actions/setup-gradle@v4
- Cleaned up unused plugins (application, paperweight)
- Updated Shadow plugin to 8.3.5 for Java 22 support
Bug fixes (GitHub issues):
- #90: Fixed BlueMap/Dynmap/Pl3xMap claims disappearing after reload/restart
- #86: Fixed NPE on /claim setname (null claim check)
- #85: Fixed Pl3xMap setLiveUpdate NoSuchMethodError (wrapped in try/catch)
- #77: Fixed elytra/piston bypass of enter protection (cancel event + disable gliding)
- #75: Fixed Folia PlayerPostRespawnEvent crash (use player scheduler directly)
- #74: Fixed HikariCP classpath conflict with LibertyBans (shadow relocation)
- #73: Added configurable opacity for Pl3xMap/Dynmap/BlueMap claim layers
- #67: Fixed wrong error message for unknown commands (show help instead)
- #58: Fixed mob spawning not blocked for Ghast, MagmaCube, Hoglin, etc.
- #57: Fixed wrong error message for ProtectedArea invalid characters
- #55: Fixed fly persisting after teleportation out of claim
- #48: Fixed player head names missing for Bedrock players (profile name fix)
- #47: Fixed MySQL TEXT column DEFAULT error
- #79: Added %description% placeholder to enter/leave messages
Performance & thread safety:
- Replaced all HashMap fields with ConcurrentHashMap where shared across threads
- Replaced 5 blocking .join() calls in event handlers with sync method
- Replaced 40+ stream().forEach() with direct forEach()
- Replaced parallelStream() on small collections with forEach()
- Fixed race condition in clearDataForPlayer (atomic remove pattern)
- Fixed resource leaks (HTTP connections, PreparedStatements)
- Added null checks on critical paths (CPlayer, Claim, API)
- Cached defaultValues lookups in claim loading loops
- Replaced Bukkit.getOfflinePlayer(name) with cached UUID lookups
API:
- Expanded SimpleClaimSystemAPI with 18 new methods
- Added async variants (CompletableFuture) for all blocking operations
- Added query methods: getPlayerClaimsCount, isClaimMember, isClaimBanned, etc.
- Added claim info methods: getClaimOwnerAt, getClaimNameAt, getAllChunksFromOwner
- Added validation methods: isAreaClaimFree, areChunksConnected, checkClaimPermission
Code quality:
- Added contextual logging to all catch blocks (no more bare printStackTrace)
- Removed all decorative comment blocks across 71 files
- Fixed incorrect javadocs (wrong param names, missing annotations)
- Updated .gitignore with IDE and OS file patterns
- Cleaned up Dockerfile (proper Adoptium URL, Ubuntu 24.04, temp cleanup)
- Modernized console startup banner with dynamic padding
- Updated LICENSE to standard MIT format
Config:
- Added dynmap-settings.claim-opacity (0.0-1.0)
- Added bluemap-settings.claim-opacity (hex alpha 00-FF)
- Added pl3xmap-settings.claim-opacity (0-255)
- Fixed explicit commit on claim insertion for DB safety
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:80Ke0mYG:JPSRbcr3"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:80Ke0mYG:JPSRbcr3"
}

