All versions
4.4-alpha
Alpha
Completly Optimized!8 months ago 15
Compatibility
Minecraft: Java Edition
1.21.x
1.20.x
1.19.x
1.18.x
1.17.x
1.16.x
1.15.x
1.14.x
1.13.x
1.12.x
1.11.x
1.10.x
1.9.x
1.8.x
Platforms
Bukkit
Folia
Paper
Purpur
Spigot
Changes
Added
- Added comprehensive thread-safe locking mechanism using ReentrantLock for player data
- Added support for Folia server software with unified scheduling API
- Added debug mode with detailed logging for troubleshooting
- Added maximum mappings limit (10,000) to prevent memory leaks
- Added delayed save system (20 ticks) to batch disk writes
- Added batch processing commands:
/gamemode -all,-online,-offline - Added server version detection for spectator mode compatibility
- Added configuration auto-merge to keep config.yml up-to-date
- Added proper error handling with stack traces in debug mode
- Added player quit event handling to clean up locks
Changed
- Complete architecture rewrite with modular design
- Migrated from coarse synchronized blocks to fine-grained ReentrantLock
- Improved thread management: replaced scattered async calls with centralized 4-thread pool
- Enhanced name-to-UUID mapping with bidirectional cache (uuidToName + nameToUUIDs)
- Optimized data saving: from immediate writes to delayed batch saving
- Unified task scheduling for Bukkit and Folia platforms
- Improved command tab completion with offline player suggestions
- Refactored permission system with granular control (xgamemode.admin, xgamemode.others.*)
- Enhanced logging with color-coded console messages
- Restructured message system with better fallback support
Fixed
- Fixed thread safety issues in name-to-UUID mappings
- Fixed memory leak where player data never got cleaned up
- Fixed data loss risk from frequent uncoordinated saves
- Fixed incorrect console sender usage in logo display
- Fixed spectator mode detection on older server versions
- Fixed race conditions in player join event handling
- Fixed improper synchronization in data file access
- Fixed tab completion showing duplicate entries
- Fixed permission checks for offline player modifications
Removed
- Removed excessive synchronized blocks causing performance bottlenecks
- Removed redundant saveData() calls after every player join
- Removed unsafe HashSet usage in concurrent mappings
- Removed mixed tab/space indentation (now using consistent spaces)
- Removed deprecated scheduler implementations
I won't be sad when the final JAR file is big anymore! Stable > Everything! Screw you, JAR size!
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:J0B80Y0Q:bEdLO8cv"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:J0B80Y0Q:bEdLO8cv"
}

