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.
This commit is contained in:
TDSTOS
2026-04-04 23:58:35 +02:00
parent 6141cde0b5
commit 2be7272f06
3 changed files with 25 additions and 7 deletions

View File

@@ -1,9 +1,10 @@
plugins { plugins {
id("java") id("java")
id("maven-publish") 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("jvm") version "2.2.0"
kotlin("kapt") version "2.2.0" kotlin("kapt") version "2.2.0"
kotlin("plugin.serialization") version "2.2.0"
} }
group = "club.mcscrims" group = "club.mcscrims"
@@ -47,6 +48,9 @@ tasks {
archiveBaseName.set("GameModes-SpeedHG") archiveBaseName.set("GameModes-SpeedHG")
archiveClassifier.set("") archiveClassifier.set("")
archiveVersion.set(project.version.toString()) archiveVersion.set(project.version.toString())
relocate("fr.mrmicky.fastboard", "club.mcscrims.speedhg.libs.fastboard")
relocate("com.zaxxer.hikari", "club.mcscrims.speedhg.libs.hikari")
} }
build { build {

View File

@@ -92,6 +92,9 @@ class SpeedHG : JavaPlugin() {
lateinit var disasterManager: DisasterManager lateinit var disasterManager: DisasterManager
private set private set
lateinit var dataPackManager: DataPackManager
private set
override fun onLoad() override fun onLoad()
{ {
instance = this instance = this
@@ -105,7 +108,7 @@ class SpeedHG : JavaPlugin() {
val worldManager = WorldManager( this ) val worldManager = WorldManager( this )
worldManager.prepareRandomWorld() worldManager.prepareRandomWorld()
val dataPackManager = DataPackManager( this ) dataPackManager = DataPackManager( this )
dataPackManager.install() dataPackManager.install()
} }
@@ -167,6 +170,7 @@ class SpeedHG : JavaPlugin() {
if ( ::perkManager.isInitialized ) perkManager.shutdown() if ( ::perkManager.isInitialized ) perkManager.shutdown()
if ( ::statsManager.isInitialized ) statsManager.shutdown() if ( ::statsManager.isInitialized ) statsManager.shutdown()
if ( ::databaseManager.isInitialized ) databaseManager.disconnect() if ( ::databaseManager.isInitialized ) databaseManager.disconnect()
if ( ::dataPackManager.isInitialized ) dataPackManager.uninstall()
kitManager.clearAll() kitManager.clearAll()
super.onDisable() super.onDisable()
} }

View File

@@ -13,7 +13,7 @@ import java.util.logging.Logger
* - Mob-Spawntabellen: Welche Mobs in welcher Häufigkeit spawnen * - Mob-Spawntabellen: Welche Mobs in welcher Häufigkeit spawnen
* - Biom-Klimawerte: Temperatur, Niederschlag * - 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, * - Surface-Blöcke (Gras → Sand → Stein): TG ignoriert noise_settings/overworld.json,
* da TG die Block-Platzierung komplett in eigenem Java-Code erledigt. * da TG die Block-Platzierung komplett in eigenem Java-Code erledigt.
* → Für Surface-Block-Overrides: [SurfaceBlockPopulator] verwenden. * → Für Surface-Block-Overrides: [SurfaceBlockPopulator] verwenden.
@@ -86,10 +86,9 @@ class DataPackManager(private val plugin: SpeedHG) {
writeBiomeOverrides(packRoot) writeBiomeOverrides(packRoot)
// ─ Vanilla-Gen only ───────────────────────────────────────────── // ─ Vanilla-Gen only ─────────────────────────────────────────────
// Bei TerraformGenerator-Welten ist dieser Block wirkungslos, // LÖSCHEN ODER AUSKOMMENTIEREN!
// da TG noise_settings komplett ignoriert. Für Dokumentations- // Diese vereinfachte Datei bringt Minecraft 1.21 zum Abstürzen.
// zwecke (und zukünftige Vanilla-Gen-Setups) trotzdem erstellt. // writeNoiseSettingOverride(packRoot)
writeNoiseSettingOverride(packRoot)
// ──────────────────────────────────────────────────────────────── // ────────────────────────────────────────────────────────────────
log.info("[DataPackManager] '$DATAPACK_NAME' installiert in: ${packRoot.absolutePath}") 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. * Entfernt den DataPack aus dem Weltordner.
* Kann z.B. in onDisable() aufgerufen werden, wenn der nächste * Kann z.B. in onDisable() aufgerufen werden, wenn der nächste