26.1.2.8
Compatibility
Changes
š ļø Fixes Implemented
- Core Fix ā savePlayer() Completely Rewritten
The database save logic was redesigned to ensure safe and reliable SQLite operations under concurrent access.
ā Introduced a ReentrantLock to guarantee serialized database access, allowing only one thread to interact with the connection at a time. ā Added an ensureConnection() method to automatically verify and re-establish the SQLite connection if it becomes invalid. ā Implemented getAutoCommit() checks before starting a new transaction to prevent nested transaction attempts. ā Added safe rollback() handling that only executes when autoCommit is disabled. ā Protected the restoration of the autoCommit state, including forced reconnection when critical failures occur. ā Configured PRAGMA busy_timeout = 5000 to reduce failures when the database is temporarily locked. 2. GUI-Related Fixes
Several compilation issues across GUI classes were resolved.
ā Replaced ArrayList<Object> with ArrayList<Component> for item lore handling. ā Removed unnecessary (Object) casts from PersistentDataContainer.set() calls. 3. Clean Build Verification
The project was successfully rebuilt and validated.
ā Compiled successfully against Paper 1.21.4. ā No compilation errors or warnings related to the reported issues. ā All required dependencies were correctly shaded and packaged, including SQLite and SLF4J. ā Result
The plugin now handles SQLite operations safely in multi-threaded environments, preventing transaction conflicts, improving connection resilience, and ensuring stable player data persistence without runtime transaction errors.
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:pQPXU7sj:7tAd0kWD"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:pQPXU7sj:7tAd0kWD"
}

