Feature: JiJ dependencies on modded platforms (#4502)

* Use JiJ inclusion for Fabric/NeoForge to prevent mod conflicts. Further: Don't publish shadow jars to maven.

* Shade and relocate dependencies that don't conform to SemVer on Fabric

* Shade/Relocate dependencies on Fabric to avoid version warnings

* Use relocate function from the build-logic plugin
This commit is contained in:
chris 2024-03-19 23:05:30 +01:00 committed by GitHub
parent b03818a0c4
commit 867cf6da05
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 117 additions and 60 deletions

View file

@ -1,7 +1,7 @@
dependencies {
api(projects.core)
implementation(libs.adventure.text.serializer.bungeecord)
compileOnlyApi(libs.bungeecord.proxy)
}
platformRelocate("net.md_5.bungee.jni")

View file

@ -7,6 +7,8 @@ architectury {
fabric()
}
val includeTransitive: Configuration = configurations.getByName("includeTransitive")
dependencies {
modImplementation(libs.fabric.loader)
modApi(libs.fabric.api)
@ -15,14 +17,29 @@ dependencies {
shadow(project(path = ":mod", configuration = "transformProductionFabric")) {
isTransitive = false
}
shadow(projects.core) {
exclude(group = "com.google.guava", module = "guava")
exclude(group = "com.google.code.gson", module = "gson")
exclude(group = "org.slf4j")
exclude(group = "com.nukkitx.fastutil")
exclude(group = "io.netty.incubator")
}
shadow(projects.core) { isTransitive = false }
includeTransitive(projects.core)
// These are NOT transitively included, and instead shadowed + relocated.
// Avoids fabric complaining about non-SemVer versioning
// TODO: re-evaluate after loom 1.6 (https://github.com/FabricMC/fabric-loom/pull/1075)
shadow(libs.protocol.connection) { isTransitive = false }
shadow(libs.protocol.common) { isTransitive = false }
shadow(libs.protocol.codec) { isTransitive = false }
shadow(libs.mcauthlib) { isTransitive = false }
shadow(libs.raknet) { isTransitive = false }
shadow(libs.netty.codec.haproxy) { isTransitive = false }
shadow("org.cloudburstmc:nbt:3.0.2.Final") { isTransitive = false }
shadow("io.netty:netty-codec-dns:4.1.103.Final") { isTransitive = false }
shadow("io.netty:netty-resolver-dns-classes-macos:4.1.103.Final") { isTransitive = false }
// Consequences of shading + relocating mcauthlib: shadow/relocate mcpl!
shadow(libs.mcprotocollib) { isTransitive = false }
// Since we also relocate cloudburst protocol: shade erosion common
shadow(libs.erosion.common) { isTransitive = false }
// Permissions
modImplementation(libs.fabric.permissions)
include(libs.fabric.permissions)
}
@ -31,6 +48,16 @@ application {
mainClass.set("org.geysermc.geyser.platform.fabric.GeyserFabricMain")
}
relocate("org.cloudburstmc.nbt")
relocate("org.cloudburstmc.netty")
relocate("org.cloudburstmc.protocol")
relocate("io.netty.handler.codec.dns")
relocate("io.netty.handler.codec.haproxy")
relocate("io.netty.resolver.dns.macos")
relocate("com.github.steveice10.mc.protocol")
relocate("com.github.steveice10.mc.auth")
relocate("com.github.steveice10.packetlib")
tasks {
remapJar {
archiveBaseName.set("Geyser-Fabric")

View file

@ -2,11 +2,17 @@ plugins {
application
}
// This is provided by "org.cloudburstmc.math.mutable" too, so yeet.
// NeoForge's class loader is *really* annoying.
provided("org.cloudburstmc.math", "api")
architectury {
platformSetupLoomIde()
neoForge()
}
val includeTransitive: Configuration = configurations.getByName("includeTransitive")
dependencies {
// See https://github.com/google/guava/issues/6618
modules {
@ -21,12 +27,9 @@ dependencies {
shadow(project(path = ":mod", configuration = "transformProductionNeoForge")) {
isTransitive = false
}
shadow(projects.core) {
exclude(group = "com.google.guava", module = "guava")
exclude(group = "com.google.code.gson", module = "gson")
exclude(group = "org.slf4j")
exclude(group = "io.netty.incubator")
}
shadow(project(path = ":core")) { isTransitive = false }
includeTransitive(projects.core)
}
application {
@ -34,10 +37,6 @@ application {
}
tasks {
shadowJar {
relocate("it.unimi.dsi.fastutil", "org.geysermc.relocate.fastutil")
}
remapJar {
archiveBaseName.set("Geyser-NeoForge")
}

View file

@ -11,18 +11,11 @@ dependencies {
implementation(libs.commodore)
implementation(libs.adventure.text.serializer.bungeecord)
// Both folia-api and paper-mojangapi only provide Java 17 versions for 1.19
compileOnly(libs.folia.api) {
attributes {
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 17)
}
}
compileOnly(libs.paper.mojangapi) {
attributes {
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 17)
}
}
compileOnly(libs.folia.api)
compileOnly(libs.paper.mojangapi)
compileOnlyApi(libs.viaversion)
}
platformRelocate("it.unimi.dsi.fastutil")

View file

@ -1,6 +1,8 @@
dependencies {
annotationProcessor(libs.velocity.api)
api(projects.core)
compileOnlyApi(libs.velocity.api)
}
platformRelocate("com.fasterxml.jackson")

View file

@ -1,5 +1,7 @@
dependencies {
api(projects.core)
compileOnlyApi(libs.viaproxy)
}
platformRelocate("net.kyori")