diff --git a/surf-api-gradle-plugin/build.gradle.kts b/surf-api-gradle-plugin/build.gradle.kts index 0ff5c355..d5b61133 100644 --- a/surf-api-gradle-plugin/build.gradle.kts +++ b/surf-api-gradle-plugin/build.gradle.kts @@ -20,7 +20,7 @@ plugins { group = groupId version = buildString { - append("2.1.1") + append("2.1.2") if (snapshot) append("-SNAPSHOT") } @@ -86,6 +86,12 @@ gradlePlugin { id = "dev.slne.surf.api.gradle.minestom" implementationClass = "dev.slne.surf.api.gradle.platform.minestom.MinestomSurfPlugin" } + + create("minestom-relocations") { + id = "dev.slne.surf.api.gradle.minestom-relocations" + implementationClass = + "dev.slne.surf.api.gradle.platform.minestom.MinestomRelocationsPlugin" + } } publishing { diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/api/gradle/platform/minestom/MinestomRelocationsPlugin.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/api/gradle/platform/minestom/MinestomRelocationsPlugin.kt new file mode 100644 index 00000000..3f0815e1 --- /dev/null +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/api/gradle/platform/minestom/MinestomRelocationsPlugin.kt @@ -0,0 +1,30 @@ +package dev.slne.surf.api.gradle.platform.minestom + +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import dev.slne.surf.api.gradle.generated.Constants +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.withType + +/** + * Applies the Minestom runtime relocations to an existing Shadow JAR without configuring a + * complete Surf/Kotlin project. This is intended for final application assemblers that merge + * multiple Surf Minestom plugins into one executable JAR. + */ +internal class MinestomRelocationsPlugin : Plugin { + override fun apply(target: Project) = with(target) { + pluginManager.withPlugin("com.gradleup.shadow") { + tasks.withType().configureEach { + val prefix = Constants.RELOCATION_PREFIX + + relocate("org.spongepowered.configurate", "$prefix.configurate") + relocate("com.mojang.serialization", "$prefix.mojang.serialization") + relocate("com.mojang.datafixers", "$prefix.mojang.datafixers") + relocate("net.kyori.adventure.nbt", "$prefix.kyori.nbt") { + exclude("net.kyori.adventure.nbt.api.**") + } + relocate("it.unimi.dsi.fastutil", "$prefix.fastutil") + } + } + } +}