Tags
Creators
Details
1.0.3
Compatibility
Changes
What's Changed in 1.0.3
Compatibility
- Tested and verified on Paper 26.1 (build 74+), Paper 26.2 (build 129+) and Paper / Folia 26.3 (build 145-beta).
- Requires Java 25 LTS+ with release 25 compiler target.
- 100% automated test suite passing (81/81 tests including multi-threaded stress tests).
Added
Multi-Engine Database Support (MySQL / MariaDB & SQLite)
- Added optional support for external MySQL and MariaDB databases via HikariCP and the official MariaDB JDBC driver (
org.mariadb.jdbc:mariadb-java-client:3.5.2, fully shaded). - Maintained local SQLite (
genscore.db) as the default out-of-the-box storage engine (zero manual setup required). - Implemented dynamic SQL dialect translation (
DatabaseManager.adaptQuery()):- Translates auto-increment definitions (
INTEGER PRIMARY KEY AUTOINCREMENT->INT AUTO_INCREMENT PRIMARY KEY). - Translates timestamp defaults (
TIMESTAMP DEFAULT CURRENT_TIMESTAMP->DATETIME DEFAULT CURRENT_TIMESTAMP). - Translates upsert statements (
ON CONFLICT(...) DO UPDATE SET col = excluded.col->ON DUPLICATE KEY UPDATE col = VALUES(col)).
- Translates auto-increment definitions (
- Implemented multi-engine schema migration and table introspection across
sqlite_masterandinformation_schema.tables. - Added resilient automatic fallback: if an external MySQL/MariaDB server is unreachable, times out, or fails authentication, GensCore automatically falls back to local SQLite and logs an actionable warning without crashing the server.
System Metrics & Monitoring Service (MetricsService.java)
- Real-time telemetry collection including JVM memory (used, free, max), CPU load, Folia tick rate, database connection pool statistics, and module registry status.
- New REST API endpoints:
/api/metricsand/api/admin/metricsexposed via Javalin.
Administration & Diagnostics Commands (GensCommand.java)
/gens status(permission:genscore.admin): Displays live server platform, Folia TPS, Java/JVM memory usage, and active module count./gens db(permission:genscore.admin): Displays current storage engine (SQLite or MySQL/MariaDB), database URL, active/idle connections, and waiting thread metrics.
Paper 26.3 API Modernization & Complete Deprecation Purge
UtilsModule.java: Migrated virtual menus to Paper 26.3MenuType.CRAFTING.builder(),MenuType.ANVIL.builder(), andMenuType.ENCHANTMENT.builder().ShopModule.java: Migrated item detection to modern Data Components API (meta.hasCustomModelDataComponent(),meta.hasCustomName(),meta.hasItemName()).TombListener.java: Migrated player head skin profile to Paper 26.3skull.setProfile(ResolvableProfile.resolvableProfile(profile)).JobsModule.java: Replaced BukkitMetadatableand deprecatedBlock.getBlockKey()with ultra-fast 64-bit coordinate packing (packBlockKey(x, y, z)) and thread-safe set storage (Map<UUID, Set<Long>>).- Removed all
@SuppressWarnings("deprecation")from active Bukkit/Paper plugin source code.
Memory Safety & Resource Leak Elimination
TeleportBackModule.java: ReplacedLocationreferences with immutablerecord BackPosition(String worldName, double x, double y, double z, float yaw, float pitch)to prevent strong reference retention toWorldinstances.StorageManager.java: Purged dead legacy YAML file management code.ItemSerializer.java: Isolated backward-compatibility deserialization fallback for pre-existing legacy Base64 items.
Automated Test Coverage & CI/CD
- Added unit test suite
SqlDialectTestvalidating query rewriting across SQLite and MySQL dialects. - Added integration test suite
DatabaseConfigTestvalidating configuration loading, driver resolution, and pool property initialization. - Test suite expanded to 81 tests passing with 0 errors and 0 failures.
- Updated GitHub Actions CI/CD workflows (
ci.yml,release.yml) with automated shaded package verification and test tracking.
Full Changelog: https://github.com/WilliamBossard/GensCore/blob/main/CHANGELOG.md
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:fSWiyp6P:hZ5MMeor"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:fSWiyp6P:hZ5MMeor"
}

