From 568f032753e66f782fe7b64094e8fb7bbae275c8 Mon Sep 17 00:00:00 2001 From: JFronny Date: Thu, 21 Mar 2024 12:57:11 +0100 Subject: [PATCH] fix: glue for forge, automatic loader kind recognition and no split sources on forge unfortunately --- .../gitlab/jfronny/scripts/JfModExtension.kt | 5 ++-- jfmod/src/main/kotlin/jfmod.module.gradle.kts | 2 +- .../io/gitlab/jfronny/scripts/LoaderKind.kt | 11 ++++++++ .../io/gitlab/jfronny/scripts/LomExt.kt | 5 ++-- .../io/gitlab/jfronny/scripts/LomExtension.kt | 19 +++++++------- lom/src/main/kotlin/lom.gradle.kts | 25 +++++++++++++------ 6 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoaderKind.kt diff --git a/jfmod/src/main/kotlin/io/gitlab/jfronny/scripts/JfModExtension.kt b/jfmod/src/main/kotlin/io/gitlab/jfronny/scripts/JfModExtension.kt index a5e1211..01ecfc0 100644 --- a/jfmod/src/main/kotlin/io/gitlab/jfronny/scripts/JfModExtension.kt +++ b/jfmod/src/main/kotlin/io/gitlab/jfronny/scripts/JfModExtension.kt @@ -23,8 +23,9 @@ interface JfModExtension: LomExtension { } fun isMod(proj: Project) = proj.extensions.findByName("jfModule") != null - fun isFabric(proj: Project) = (proj.extensions.findByName("lom") as? LomExtension)?.isFabric ?: false - fun isForge(proj: Project) = (proj.extensions.findByName("lom") as? LomExtension)?.isForge ?: false + fun isFabric(proj: Project) = if (proj == this) isFabric else (proj.extensions.findByName("lom") as? LomExtension)?.isFabric ?: false + fun isForge(proj: Project) = if (proj == this) isForge else (proj.extensions.findByName("lom") as? LomExtension)?.isNeoForge ?: false + fun isNeoForge(proj: Project) = if (proj == this) isNeoForge else (proj.extensions.findByName("lom") as? LomExtension)?.isNeoForge ?: false fun curseforge(closure: Action) = closure.execute(curseforge) fun modrinth(closure: Action) = closure.execute(modrinth) diff --git a/jfmod/src/main/kotlin/jfmod.module.gradle.kts b/jfmod/src/main/kotlin/jfmod.module.gradle.kts index 2c1d0ad..6548ca7 100644 --- a/jfmod/src/main/kotlin/jfmod.module.gradle.kts +++ b/jfmod/src/main/kotlin/jfmod.module.gradle.kts @@ -20,7 +20,7 @@ insertEarlyAfterEvaluate { if (!isRoot) versionS = rootProject.versionS - if (!hasProperty("loom.platform")) { + if (rootArgs.loaderKind.get() == lomArgs.loaderKind.get()) { // Platform is set manually. User will need to configure lom themselves too lom { copyFrom(rootArgs) diff --git a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoaderKind.kt b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoaderKind.kt new file mode 100644 index 0000000..fb835ec --- /dev/null +++ b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoaderKind.kt @@ -0,0 +1,11 @@ +package io.gitlab.jfronny.scripts + +import java.util.* + +enum class LoaderKind { + NEOFORGE, FORGE, FABRIC; + + companion object { + fun fromString(str: String) = valueOf(str.uppercase(Locale.getDefault())) + } +} diff --git a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExt.kt b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExt.kt index d424f9c..a4e755a 100644 --- a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExt.kt +++ b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExt.kt @@ -22,5 +22,6 @@ val TaskContainer.sourcesJar get() = named("sourcesJar") fun DependencyHandler.devProject(path: String): Dependency = project(path, "dev") -val LomExtension.isFabric: Boolean get() = fabricLoaderVersion.isPresent -val LomExtension.isForge: Boolean get() = neoforgeVersion.isPresent \ No newline at end of file +val LomExtension.isFabric: Boolean get() = loaderKind.get() == LoaderKind.FABRIC +val LomExtension.isForge: Boolean get() = loaderKind.get() == LoaderKind.FORGE +val LomExtension.isNeoForge: Boolean get() = loaderKind.get() == LoaderKind.NEOFORGE \ No newline at end of file diff --git a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExtension.kt b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExtension.kt index f8d3c76..453002e 100644 --- a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExtension.kt +++ b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LomExtension.kt @@ -5,6 +5,9 @@ import org.gradle.api.provider.Property import java.util.* interface LomExtension { + val loaderKind: Property + val minecraftVersion: Property + val loaderVersion: Property val yarnBuild: Property fun yarn(yarnBuild: String) { @@ -15,23 +18,19 @@ interface LomExtension { yarnBuild.set(null) } - val minecraftVersion: Property - val fabricLoaderVersion: Property - val neoforgeVersion: Property - fun check(proj: Project) { yarnBuild.finalizeValue() minecraftVersion.finalizeValue() - fabricLoaderVersion.finalizeValue() - neoforgeVersion.finalizeValue() - require(!(fabricLoaderVersion.isPresent && neoforgeVersion.isPresent)) { "fabricLoaderVersion and forgeVersion are mutually exclusive" } - require(fabricLoaderVersion.isPresent || neoforgeVersion.isPresent) { "fabricLoaderVersion or forgeVersion must be set" } + loaderVersion.finalizeValue() + loaderKind.finalizeValue() } fun copyFrom(ext: LomExtension) { + if (loaderKind != ext.loaderKind) { + throw IllegalArgumentException("Cannot copy from a config meant for a different loader") + } yarnBuild.set(ext.yarnBuild) minecraftVersion.set(ext.minecraftVersion) - fabricLoaderVersion.set(ext.fabricLoaderVersion) - neoforgeVersion.set(ext.neoforgeVersion) + loaderVersion.set(ext.loaderVersion) } } \ No newline at end of file diff --git a/lom/src/main/kotlin/lom.gradle.kts b/lom/src/main/kotlin/lom.gradle.kts index 7958078..058f75f 100644 --- a/lom/src/main/kotlin/lom.gradle.kts +++ b/lom/src/main/kotlin/lom.gradle.kts @@ -13,10 +13,16 @@ plugins { val devlibs = project.layout.buildDirectory.dir("devlibs").get().asFile +// Register lom extension with recognised loom platform +val args = extensions.create("lom") +args.loaderKind = LoaderKind.fromString(prop("loom.platform", "fabric")) +args.loaderKind.finalizeValue() + // Configure loom for stricter dev env loom { runtimeOnlyLog4j.set(true) - splitEnvironmentSourceSets() + // Other loaders unfortunately don't support this yet + if (args.isFabric) splitEnvironmentSourceSets() silentMojangMappingsLicense() } @@ -78,18 +84,23 @@ repositories { } // Register common dependencies -val args = extensions.create("lom") earlyAfterEvaluate { args.check(this) dependencies { minecraft("com.mojang:minecraft:${args.minecraftVersion.get()}") if (args.yarnBuild.isPresent) mappings("net.fabricmc:yarn:${args.minecraftVersion.get()}+${args.yarnBuild.get()}:v2") else loom.officialMojangMappings() - if (!hasProperty("loom.platform") || property("loom.platform") == "fabric") { - modImplementation("net.fabricmc:fabric-loader:${args.fabricLoaderVersion.get()}") - testImplementation("net.fabricmc:fabric-loader-junit:${args.fabricLoaderVersion.get()}") - } else if (property("loom.platform") == "neoforge") { - "neoForge"("net.minecraftforge:forge:${args.minecraftVersion.get()}-${args.neoforgeVersion.get()}") + when (args.loaderKind.get()) { + LoaderKind.NEOFORGE -> { + "neoForge"("net.neoforged:neoforge:${args.loaderVersion.get()}") + } + LoaderKind.FORGE -> { + "forge"("net.minecraftforge:forge:${args.minecraftVersion.get()}-${args.loaderVersion.get()}") + } + LoaderKind.FABRIC -> { + modImplementation("net.fabricmc:fabric-loader:${args.loaderVersion.get()}") + testImplementation("net.fabricmc:fabric-loader-junit:${args.loaderVersion.get()}") + } } testmodImplementation(sourceSets.main.get().output)