fix: glue for forge, automatic loader kind recognition and no split sources on forge unfortunately
ci/woodpecker/push/gradle Pipeline failed Details
ci/woodpecker/push/pages Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2024-03-21 12:57:11 +01:00
parent c6dd891468
commit 568f032753
Signed by: Johannes
GPG Key ID: E76429612C2929F4
6 changed files with 45 additions and 22 deletions

View File

@ -23,8 +23,9 @@ interface JfModExtension: LomExtension {
} }
fun isMod(proj: Project) = proj.extensions.findByName("jfModule") != null fun isMod(proj: Project) = proj.extensions.findByName("jfModule") != null
fun isFabric(proj: Project) = (proj.extensions.findByName("lom") as? LomExtension)?.isFabric ?: false fun isFabric(proj: Project) = if (proj == this) isFabric else (proj.extensions.findByName("lom") as? LomExtension)?.isFabric ?: false
fun isForge(proj: Project) = (proj.extensions.findByName("lom") as? LomExtension)?.isForge ?: 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<CurseForge>) = closure.execute(curseforge) fun curseforge(closure: Action<CurseForge>) = closure.execute(curseforge)
fun modrinth(closure: Action<Modrinth>) = closure.execute(modrinth) fun modrinth(closure: Action<Modrinth>) = closure.execute(modrinth)

View File

@ -20,7 +20,7 @@ insertEarlyAfterEvaluate {
if (!isRoot) versionS = rootProject.versionS 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 // Platform is set manually. User will need to configure lom themselves too
lom { lom {
copyFrom(rootArgs) copyFrom(rootArgs)

View File

@ -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()))
}
}

View File

@ -22,5 +22,6 @@ val TaskContainer.sourcesJar get() = named<Jar>("sourcesJar")
fun DependencyHandler.devProject(path: String): Dependency = project(path, "dev") fun DependencyHandler.devProject(path: String): Dependency = project(path, "dev")
val LomExtension.isFabric: Boolean get() = fabricLoaderVersion.isPresent val LomExtension.isFabric: Boolean get() = loaderKind.get() == LoaderKind.FABRIC
val LomExtension.isForge: Boolean get() = neoforgeVersion.isPresent val LomExtension.isForge: Boolean get() = loaderKind.get() == LoaderKind.FORGE
val LomExtension.isNeoForge: Boolean get() = loaderKind.get() == LoaderKind.NEOFORGE

View File

@ -5,6 +5,9 @@ import org.gradle.api.provider.Property
import java.util.* import java.util.*
interface LomExtension { interface LomExtension {
val loaderKind: Property<LoaderKind>
val minecraftVersion: Property<String>
val loaderVersion: Property<String>
val yarnBuild: Property<String> val yarnBuild: Property<String>
fun yarn(yarnBuild: String) { fun yarn(yarnBuild: String) {
@ -15,23 +18,19 @@ interface LomExtension {
yarnBuild.set(null) yarnBuild.set(null)
} }
val minecraftVersion: Property<String>
val fabricLoaderVersion: Property<String>
val neoforgeVersion: Property<String>
fun check(proj: Project) { fun check(proj: Project) {
yarnBuild.finalizeValue() yarnBuild.finalizeValue()
minecraftVersion.finalizeValue() minecraftVersion.finalizeValue()
fabricLoaderVersion.finalizeValue() loaderVersion.finalizeValue()
neoforgeVersion.finalizeValue() loaderKind.finalizeValue()
require(!(fabricLoaderVersion.isPresent && neoforgeVersion.isPresent)) { "fabricLoaderVersion and forgeVersion are mutually exclusive" }
require(fabricLoaderVersion.isPresent || neoforgeVersion.isPresent) { "fabricLoaderVersion or forgeVersion must be set" }
} }
fun copyFrom(ext: LomExtension) { fun copyFrom(ext: LomExtension) {
if (loaderKind != ext.loaderKind) {
throw IllegalArgumentException("Cannot copy from a config meant for a different loader")
}
yarnBuild.set(ext.yarnBuild) yarnBuild.set(ext.yarnBuild)
minecraftVersion.set(ext.minecraftVersion) minecraftVersion.set(ext.minecraftVersion)
fabricLoaderVersion.set(ext.fabricLoaderVersion) loaderVersion.set(ext.loaderVersion)
neoforgeVersion.set(ext.neoforgeVersion)
} }
} }

View File

@ -13,10 +13,16 @@ plugins {
val devlibs = project.layout.buildDirectory.dir("devlibs").get().asFile val devlibs = project.layout.buildDirectory.dir("devlibs").get().asFile
// Register lom extension with recognised loom platform
val args = extensions.create<LomExtension>("lom")
args.loaderKind = LoaderKind.fromString(prop("loom.platform", "fabric"))
args.loaderKind.finalizeValue()
// Configure loom for stricter dev env // Configure loom for stricter dev env
loom { loom {
runtimeOnlyLog4j.set(true) runtimeOnlyLog4j.set(true)
splitEnvironmentSourceSets() // Other loaders unfortunately don't support this yet
if (args.isFabric) splitEnvironmentSourceSets()
silentMojangMappingsLicense() silentMojangMappingsLicense()
} }
@ -78,18 +84,23 @@ repositories {
} }
// Register common dependencies // Register common dependencies
val args = extensions.create<LomExtension>("lom")
earlyAfterEvaluate { earlyAfterEvaluate {
args.check(this) args.check(this)
dependencies { dependencies {
minecraft("com.mojang:minecraft:${args.minecraftVersion.get()}") minecraft("com.mojang:minecraft:${args.minecraftVersion.get()}")
if (args.yarnBuild.isPresent) mappings("net.fabricmc:yarn:${args.minecraftVersion.get()}+${args.yarnBuild.get()}:v2") if (args.yarnBuild.isPresent) mappings("net.fabricmc:yarn:${args.minecraftVersion.get()}+${args.yarnBuild.get()}:v2")
else loom.officialMojangMappings() else loom.officialMojangMappings()
if (!hasProperty("loom.platform") || property("loom.platform") == "fabric") { when (args.loaderKind.get()) {
modImplementation("net.fabricmc:fabric-loader:${args.fabricLoaderVersion.get()}") LoaderKind.NEOFORGE -> {
testImplementation("net.fabricmc:fabric-loader-junit:${args.fabricLoaderVersion.get()}") "neoForge"("net.neoforged:neoforge:${args.loaderVersion.get()}")
} else if (property("loom.platform") == "neoforge") { }
"neoForge"("net.minecraftforge:forge:${args.minecraftVersion.get()}-${args.neoforgeVersion.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) testmodImplementation(sourceSets.main.get().output)