Tags
Creators
Details
Licensed Apache-2.0
Published last year
Updated 7 months ago
All versions
1.2.0
Release
Zenith-Mod 1.2.0last year 32
Uploaded by
Compatibility
Minecraft: Java Edition
1.21–1.21.10
1.20.x
1.19.4
Platforms
Paper
Purpur
Changes
Zenith-Mod v1.2.0 Release Notes
Performance & UX Improvements
⚡ Instant Ban Disconnect
- Fixed: Players are now instantly kicked during login without waiting for database queries
- Improved: Disconnect screen shows immediately for banned players
- Changes: Ban checks now happen in
AsyncPlayerPreLoginEventwith instant kick, while history details load asynchronously in background - Result: No more delays when banned players try to join - connection is rejected immediately
⚡ Instant Kick Command
- Fixed:
/kickcommand now executes immediately without any delay - Removed: 20-tick (1 second) delay that was previously added
- Improved: Kick disconnect screen appears instantly for kicked players
- Changes: History entry is now created asynchronously after the kick, not blocking the kick execution
- Result: Staff can instantly kick players without waiting for database operations
🗄️ Full Database Compatibility
- Fixed: SQLite syntax errors in all repository files
- Added: Proper SQL syntax for all database types (SQLite, MySQL, MariaDB, H2)
- Changed: All repository files now use database-specific AUTO_INCREMENT syntax
- Changed: UPSERT operations now use database-specific syntax (
ON DUPLICATE KEY UPDATEfor MySQL/MariaDB,INSERT OR REPLACEfor SQLite/H2) - Result: Plugin now works seamlessly with SQLite, MySQL, MariaDB, and H2 databases
⚙️ Configuration Improvements
- Fixed:
config.ymlis now truly read-only and never overwritten by the system - Changed: Plugin now stops immediately if database connection fails (no automatic fallback)
- Result: User database settings are preserved exactly as configured
What Changed?
Before:
- ❌ Banned players could briefly connect before being kicked
- ❌ Kick command had a 1-second delay
- ❌ Server had to wait for database queries before kicking
- ❌ SQLite databases caused syntax errors
- ❌
config.ymlwas sometimes overwritten by the system - ❌ Plugin tried to fallback to different databases when connection failed
After:
- ✅ Banned players are rejected immediately at login
- ✅ Kick command executes instantly
- ✅ Database operations happen in background without affecting user experience
- ✅ SQLite works perfectly with proper syntax
- ✅
config.ymlis truly read-only - ✅ Plugin stops gracefully on database connection failure (respects user configuration)
Technical Details
- Ban Handler: Optimized
AsyncPlayerPreLoginHandlerto kick players instantly with default message, then load actual ban details asynchronously - Kick Manager: Removed blocking
.join()calls andrunTaskLaterdelay, now kicks immediately - Database Operations: All history entries and Discord logs now happen asynchronously without blocking user operations
- SQLite Support: Fixed AUTO_INCREMENT syntax in all 6 repository files (History, Player, AltLimit, Notes, Warn, RequestLog)
- UPSERT Operations: Database-specific syntax for insert-or-update operations
- Config Protection:
config.ymlis now read-only at save time to prevent system overwrites - Database Failures: Plugin stops gracefully when connection fails instead of automatic fallback
Compatibility
- ✅ Fully backward compatible
- ✅ No configuration changes required
- ✅ All existing bans/kicks continue to work normally
- ✅ Works with all database types (H2, SQLite, MySQL, MariaDB)
Note: This version focuses on performance and user experience improvements, ensuring instant feedback for moderation actions.
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:TY8FR9Ml:cBT5Dqa6"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:TY8FR9Ml:cBT5Dqa6"
}

