diff --git a/build-logic/loom-adapter/build.gradle.kts b/build-logic/loom-adapter/build.gradle.kts deleted file mode 100644 index 4f4616f47..000000000 --- a/build-logic/loom-adapter/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -plugins { - `kotlin-dsl` - `java-gradle-plugin` -} - -dependencies { - implementation(libs.plugins.stonecutter.coords) - implementation(libs.plugins.fabric.loom.coords) - implementation(libs.plugins.fabric.loom.remap.coords) -} - -gradlePlugin { - plugins { - create("loom-adapter") { - id = "freecam.loom-adapter" - implementationClass = "net.xolt.freecam.gradle.LoomAdapterPlugin" - } - } -} diff --git a/build-logic/loom-adapter/src/main/kotlin/net/xolt/freecam/gradle/LoomAdapterExtension.kt b/build-logic/loom-adapter/src/main/kotlin/net/xolt/freecam/gradle/LoomAdapterExtension.kt deleted file mode 100644 index 0d3cb6cd6..000000000 --- a/build-logic/loom-adapter/src/main/kotlin/net/xolt/freecam/gradle/LoomAdapterExtension.kt +++ /dev/null @@ -1,59 +0,0 @@ -package net.xolt.freecam.gradle - -import net.fabricmc.loom.api.LoomGradleExtensionAPI -import org.gradle.api.Project -import org.gradle.api.artifacts.Dependency -import org.gradle.api.plugins.JavaPlugin -import org.gradle.api.tasks.TaskProvider -import org.gradle.jvm.tasks.Jar -import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.named -import net.fabricmc.loom.util.Constants.Configurations as LoomConfigurations - -interface LoomAdapterExtension { - val hasMappings: Boolean - val modJar: TaskProvider - val modSourcesJar: TaskProvider - - /** - * Apply Mojang's official mappings to the `mappings` configuration, - * if this loom version does remapping. - */ - fun applyMojangMappings(): Dependency? -} - -@JvmInline -internal value class RemapLoomAdapterExtension(val project: Project) : LoomAdapterExtension { - - private val loom: LoomGradleExtensionAPI - get() = project.extensions.getByType() - - override val hasMappings: Boolean - get() = true - - override val modJar: TaskProvider - get() = project.tasks.named("remapJar") - - override val modSourcesJar: TaskProvider - get() = project.tasks.named("remapSourcesJar") - - override fun applyMojangMappings() = project.dependencies.add( - LoomConfigurations.MAPPINGS, - loom.officialMojangMappings(), - ) -} - -@JvmInline -internal value class NoRemapLoomAdapterExtension(val project: Project) : LoomAdapterExtension { - - override val hasMappings: Boolean - get() = false - - override val modJar: TaskProvider - get() = project.tasks.named(JavaPlugin.JAR_TASK_NAME) - - override val modSourcesJar: TaskProvider - get() = project.tasks.named("sourcesJar") - - override fun applyMojangMappings() = null -} diff --git a/build-logic/loom-adapter/src/main/kotlin/net/xolt/freecam/gradle/LoomAdapterPlugin.kt b/build-logic/loom-adapter/src/main/kotlin/net/xolt/freecam/gradle/LoomAdapterPlugin.kt deleted file mode 100644 index 47be49509..000000000 --- a/build-logic/loom-adapter/src/main/kotlin/net/xolt/freecam/gradle/LoomAdapterPlugin.kt +++ /dev/null @@ -1,75 +0,0 @@ -package net.xolt.freecam.gradle - -import dev.kikugie.stonecutter.build.StonecutterBuildExtension -import net.fabricmc.loom.LoomNoRemapGradlePlugin -import net.fabricmc.loom.LoomRemapGradlePlugin -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.artifacts.Configuration -import org.gradle.api.plugins.JavaPlugin -import org.gradle.api.provider.Provider -import org.gradle.kotlin.dsl.add -import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.support.uppercaseFirstChar -import net.fabricmc.loom.util.Constants.Configurations as LoomConfigurations - -/** - * Abstract the differences between the old [LoomRemapGradlePlugin] and the new [LoomNoRemapGradlePlugin], - * which removed obfuscation remapping features because Minecraft is no longer obfuscated, as of `26.1-snapshot-1`. - * - * @author KikuGie - * @author Matt Sturgeon - * @see original implementation - */ -abstract class LoomAdapterPlugin : Plugin { - - companion object { - const val EXTENSION_NAME = "loomAdapter" - } - - override fun apply(target: Project): Unit = with(target) { - val extension: LoomAdapterExtension - val sc = extensions.getByType() - if (sc.current.parsed < "26.0") { - setupRemappingLoom() - extension = RemapLoomAdapterExtension(project) - } else { - setupLoomFacade() - extension = NoRemapLoomAdapterExtension(project) - } - extensions.add(EXTENSION_NAME, extension) - } - - private fun Project.setupRemappingLoom() { - plugins.apply(LoomRemapGradlePlugin.NAME) - } - - private fun Project.setupLoomFacade() { - plugins.apply(LoomNoRemapGradlePlugin.NAME) - - // Create `mod` passthrough configurations - sequenceOf( - JavaPlugin.API_CONFIGURATION_NAME, - JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, - JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, - JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, - LoomConfigurations.LOCAL_RUNTIME, - ).forEach { name -> - val modConfiguration: Provider = configurations.register("mod" + name.uppercaseFirstChar()) - configurations.named(name) { extendsFrom(modConfiguration) } - } - - // Create `mappings` stub configuration - configurations.register(LoomConfigurations.MAPPINGS) { - isCanBeResolved = false - isCanBeConsumed = false - } - - // Create `namedElements` passthrough configuration - configurations.register(LoomConfigurations.NAMED_ELEMENTS) { - extendsFrom(configurations.named(JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME)); - isCanBeResolved = false - isCanBeConsumed = true - } - } -} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index e81376e34..04ad17b87 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -29,7 +29,6 @@ include( "api:plugin", "conventions", "i18n-plugin", - "loom-adapter", "metadata", "release-metadata", "settings", diff --git a/build-logic/settings/build.gradle.kts b/build-logic/settings/build.gradle.kts index e0639c91e..cf27c0eee 100644 --- a/build-logic/settings/build.gradle.kts +++ b/build-logic/settings/build.gradle.kts @@ -4,5 +4,6 @@ plugins { dependencies { implementation(libs.plugins.stonecutter.coords) + implementation(libs.plugins.loomx.coords) implementation(libs.plugins.foojay.resolver.coords) } diff --git a/build-logic/settings/src/main/kotlin/freecam.settings.settings.gradle.kts b/build-logic/settings/src/main/kotlin/freecam.settings.settings.gradle.kts index d593403cf..3f41ff2c8 100644 --- a/build-logic/settings/src/main/kotlin/freecam.settings.settings.gradle.kts +++ b/build-logic/settings/src/main/kotlin/freecam.settings.settings.gradle.kts @@ -1,4 +1,5 @@ plugins { id("dev.kikugie.stonecutter") + id("dev.kikugie.loom-back-compat") id("org.gradle.toolchains.foojay-resolver-convention") } diff --git a/cloth-config/build.gradle.kts b/cloth-config/build.gradle.kts index 11e997eb2..faccbe98c 100644 --- a/cloth-config/build.gradle.kts +++ b/cloth-config/build.gradle.kts @@ -1,12 +1,12 @@ plugins { alias(libs.plugins.fletchingtable.fabric) - id("freecam.loom-adapter") + id("dev.kikugie.loom-back-compat") id("freecam.common") } dependencies { minecraft("com.mojang:minecraft:${meta.mc}") - loomAdapter.applyMojangMappings() + loomx.applyMojangMappings() modCompileOnly(libs.fabric.loader) // Loader project should provide their own :common and cloth-config dependencies diff --git a/common/build.gradle.kts b/common/build.gradle.kts index fae37ff86..71fb75d86 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -2,7 +2,7 @@ import dev.kikugie.stonecutter.StonecutterExperimentalAPI plugins { alias(libs.plugins.fletchingtable.fabric) - id("freecam.loom-adapter") + id("dev.kikugie.loom-back-compat") id("freecam.common") } @@ -41,7 +41,7 @@ val i18nResources by configurations.registering { dependencies { minecraft("com.mojang:minecraft:${meta.mc}") - loomAdapter.applyMojangMappings() + loomx.applyMojangMappings() modCompileOnly(libs.fabric.loader) i18nResources(project(":i18n")) } diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 2226a91a7..d6c5aad1e 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -3,7 +3,7 @@ import net.fabricmc.loom.task.FabricModJsonV1Task plugins { alias(libs.plugins.fletchingtable.fabric) - id("freecam.loom-adapter") + id("dev.kikugie.loom-back-compat") id("freecam.loaders") } @@ -17,7 +17,7 @@ stonecutter replacements { dependencies { minecraft("com.mojang:minecraft:${meta.mc}") - loomAdapter.applyMojangMappings() + loomx.applyMojangMappings() modImplementation(libs.fabric.loader) sequenceOf( @@ -82,7 +82,7 @@ loom { tasks.register("buildAndCollect") { group = "build" - from(loomAdapter.modJar.map { it.archiveFile }) + from(loomx.modJar.map { it.archiveFile }) into(rootProject.layout.buildDirectory.file("libs/${meta.version}")) dependsOn(tasks.build) } @@ -149,6 +149,6 @@ tasks { } generateReleaseMetadata { - artifactFileName = loomAdapter.modJar.flatMap { it.archiveFileName } + artifactFileName = loomx.modJar.flatMap { it.archiveFileName } } } diff --git a/gradle.properties b/gradle.properties index c0388a62a..8894b825e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,3 @@ org.gradle.jvmargs=-Xmx4G +loomx.loom_version=1.16-SNAPSHOT fabric.loom.multiProjectOptimisation=true diff --git a/libs.versions.toml b/libs.versions.toml index 6fcda0072..53998c0c8 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlin = "2.3.0" stonecutter = "0.9.1-beta.5" -fabric-loom = "1.16-SNAPSHOT" +loom-back-compat = "0.2" fabric-loader = "0.18.6" mapping-io = "0.8.0" mixin = "0.8.5" @@ -42,8 +42,7 @@ mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" } [plugins] kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } stonecutter = { id = "dev.kikugie.stonecutter", version.ref = "stonecutter" } -fabric-loom = { id = "net.fabricmc.fabric-loom", version.ref = "fabric-loom" } -fabric-loom-remap = { id = "net.fabricmc.fabric-loom-remap", version.ref = "fabric-loom" } +loomx = { id = "dev.kikugie.loom-back-compat", version.ref = "loom-back-compat" } moddev = { id = "net.neoforged.moddev", version.ref = "moddev" } moddev-legacy = {id = "net.neoforged.moddev.legacyforge", version.ref = "moddev"} fletchingtable = { id = "dev.kikugie.fletching-table", version.ref = "fletchingtable" }