From 2be7272f060ca2ed887c9ca37acd95a3e7831dc0 Mon Sep 17 00:00:00 2001 From: TDSTOS Date: Sat, 4 Apr 2026 23:58:35 +0200 Subject: [PATCH] Wire DataPackManager, add uninstall, update build Swap Shadow plugin to com.gradleup.shadow v8.3.5 and add kotlin serialization plugin. Add relocations for bundled libraries (fastboard, Hikari) in the shadowJar. Make DataPackManager a plugin-scoped property: initialize and install it during onLoad and call uninstall during onDisable. Add a convenience uninstall() that reads the target world from config and removes the datapack there. Also comment out writeNoiseSettingOverride with a warning that the simplified file crashes Minecraft 1.21. --- build.gradle.kts | 6 +++++- .../kotlin/club/mcscrims/speedhg/SpeedHG.kt | 6 +++++- .../mcscrims/speedhg/world/DataPackManager.kt | 20 ++++++++++++++----- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index cb890ec..d389978 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,9 +1,10 @@ plugins { id("java") id("maven-publish") - id("com.github.johnrengelman.shadow") version "8.1.1" + id("com.gradleup.shadow") version "8.3.5" kotlin("jvm") version "2.2.0" kotlin("kapt") version "2.2.0" + kotlin("plugin.serialization") version "2.2.0" } group = "club.mcscrims" @@ -47,6 +48,9 @@ tasks { archiveBaseName.set("GameModes-SpeedHG") archiveClassifier.set("") archiveVersion.set(project.version.toString()) + + relocate("fr.mrmicky.fastboard", "club.mcscrims.speedhg.libs.fastboard") + relocate("com.zaxxer.hikari", "club.mcscrims.speedhg.libs.hikari") } build { diff --git a/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt b/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt index 46817c4..440d8a1 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt @@ -92,6 +92,9 @@ class SpeedHG : JavaPlugin() { lateinit var disasterManager: DisasterManager private set + lateinit var dataPackManager: DataPackManager + private set + override fun onLoad() { instance = this @@ -105,7 +108,7 @@ class SpeedHG : JavaPlugin() { val worldManager = WorldManager( this ) worldManager.prepareRandomWorld() - val dataPackManager = DataPackManager( this ) + dataPackManager = DataPackManager( this ) dataPackManager.install() } @@ -167,6 +170,7 @@ class SpeedHG : JavaPlugin() { if ( ::perkManager.isInitialized ) perkManager.shutdown() if ( ::statsManager.isInitialized ) statsManager.shutdown() if ( ::databaseManager.isInitialized ) databaseManager.disconnect() + if ( ::dataPackManager.isInitialized ) dataPackManager.uninstall() kitManager.clearAll() super.onDisable() } diff --git a/src/main/kotlin/club/mcscrims/speedhg/world/DataPackManager.kt b/src/main/kotlin/club/mcscrims/speedhg/world/DataPackManager.kt index 92cd3ba..acadfdb 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/world/DataPackManager.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/world/DataPackManager.kt @@ -13,7 +13,7 @@ import java.util.logging.Logger * - Mob-Spawntabellen: Welche Mobs in welcher Häufigkeit spawnen * - Biom-Klimawerte: Temperatur, Niederschlag * - * ## Was dieser DataPack NICHT kann (mit TerraformGenerator) + * ## Was dieses DataPack NICHT kann (mit TerraformGenerator) * - Surface-Blöcke (Gras → Sand → Stein): TG ignoriert noise_settings/overworld.json, * da TG die Block-Platzierung komplett in eigenem Java-Code erledigt. * → Für Surface-Block-Overrides: [SurfaceBlockPopulator] verwenden. @@ -86,10 +86,9 @@ class DataPackManager(private val plugin: SpeedHG) { writeBiomeOverrides(packRoot) // ─ Vanilla-Gen only ───────────────────────────────────────────── - // Bei TerraformGenerator-Welten ist dieser Block wirkungslos, - // da TG noise_settings komplett ignoriert. Für Dokumentations- - // zwecke (und zukünftige Vanilla-Gen-Setups) trotzdem erstellt. - writeNoiseSettingOverride(packRoot) + // LÖSCHEN ODER AUSKOMMENTIEREN! + // Diese vereinfachte Datei bringt Minecraft 1.21 zum Abstürzen. + // writeNoiseSettingOverride(packRoot) // ──────────────────────────────────────────────────────────────── log.info("[DataPackManager] '$DATAPACK_NAME' installiert in: ${packRoot.absolutePath}") @@ -100,6 +99,17 @@ class DataPackManager(private val plugin: SpeedHG) { } } + /** + * Convenience-Methode: liest den Weltordner aus der config.yml und + * deinstalliert den DataPack dort. Für den Normalfall gedacht. + */ + fun uninstall() { + val worldName = plugin.config.getString("map-system.target-world-name", "world")!! + val serverRoot = plugin.dataFolder.parentFile.parentFile + val worldFolder = File(serverRoot, worldName) + uninstall(worldFolder) + } + /** * Entfernt den DataPack aus dem Weltordner. * Kann z.B. in onDisable() aufgerufen werden, wenn der nächste