Tags
Creators
Details
3.0.1
Compatibility
Changes
[3.0.1] - 2026-04-18
🐛 Bug Fixes
Critical
-
Unjail Teleport nicht funktioniert: Spieler wurden beim Release aus dem Jail nicht an ihren ursprünglichen Ort zurückteleportiert
- Ursache: JailListener hat den Release-Teleport gecancelt, weil der Spieler noch im Jail-Cache war
- Fix: Cache-Entfernung erfolgt jetzt VOR dem Teleport in
JailManager.releasePlayer() - Gilt sowohl für
/unjailBefehl als auch automatischen Ablauf
-
SimpleDateFormat nicht thread-safe:
BanHammerCommandnutzte statischesSimpleDateFormataus async CompletableFuture-Callbacks- Fix: Ersetzt durch thread-sicheren
DateTimeFormatter
- Fix: Ersetzt durch thread-sicheren
-
loadActiveMutes() doppelte DB-Queries:
CompletableFuture.allOf()wurde aufgerufen und ignoriert, dann die gleichen 2 Queries nochmal einzeln- Fix: Sinnlosen allOf-Block entfernt (4 Queries → 2)
-
Discord Shutdown Hook Leak: Bei jedem
/bh reloadwurde ein neuerRuntime.addShutdownHook()registriert ohne den alten zu entfernen- Fix: Hook-Referenz wird gespeichert und bei
shutdown()entfernt
- Fix: Hook-Referenz wird gespeichert und bei
High Priority
-
getDatabase() NullPointerException:
handleAppeals()undreviewAppeal()riefenplugin.getDatabase()ohne Null-Check auf- Fix: Null-Checks vor allen direkten
getDatabase()-Aufrufen in BanHammerCommand
- Fix: Null-Checks vor allen direkten
-
unbanPlayer() findet nur BAN-Typ: Temp-Bans und IP-Bans konnten per
/bh unbannicht entfernt werden- Fix: Sucht jetzt nach allen Ban-Typen (BAN, TEMP_BAN, IP_BAN) und entfernt auch IP-Bans aus der IP-Banliste
-
unmutePlayer() findet nur MUTE-Typ: Temp-Mutes konnten per
/unmutenicht entfernt werden- Fix: Sucht jetzt nach allen Mute-Typen (MUTE, TEMP_MUTE)
-
IPv6-Validation immer true:
isValidIP()in UnbanScheduler gab für jede IPv6-Adresse true zurück, auch gehashte IPs- Fix: Gehashte IPs werden erkannt (kein
./:→ sofort false)
- Fix: Gehashte IPs werden erkannt (kein
-
HttpURLConnection Leak: ModrinthUpdateChecker hat
connection.disconnect()nie aufgerufen- Fix:
disconnect()im finally-Block; zusätzlich Null-Checks für JSON-Response-Felder
- Fix:
Medium Priority
-
PunishmentManager Race Condition: Manager wurde mit null-Database erstellt und bei DB-Init komplett neu erstellt — Listener behielten alte Referenz
- Fix: DB/Discord-Referenzen sind jetzt
volatileund updatebar viaupdateDatabase()/updateDiscord()
- Fix: DB/Discord-Referenzen sind jetzt
-
Cooldown Maps Memory Leak:
cooldowns,switchCooldowns,switchKickJailCooldownsin HammerListener wuchsen unbegrenzt- Fix: Cleanup bei
PlayerQuitEvent
- Fix: Cleanup bei
-
Auto-Unjail ohne Teleport: UnbanScheduler nutzte
releasePlayerByUUID()für abgelaufene Jails, was keinen Teleport zurück auslöst- Fix: Online-Spieler werden jetzt per
releasePlayer()(mit Teleport) auf dem Main-Thread freigelassen
- Fix: Online-Spieler werden jetzt per
-
Essentials Jail Release ohne Rück-Teleport: Bei Essentials-Release wurde der Spieler nicht zum Original-Ort zurückteleportiert
- Fix: Return-Location wird auch bei Essentials-Release verwendet
🔧 Improvements
- Modrinth API Response: Robustere JSON-Parsing mit Null-Checks für
version_number,urlundfiles - Doppelter
releasePlayer()-Aufruf inunjailPlayer()entfernt (Caller ist verantwortlich)
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:odcCYmcd:FnNX2Eyk"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:odcCYmcd:FnNX2Eyk"
}

