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 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<CurseForge>) = closure.execute(curseforge)
fun modrinth(closure: Action<Modrinth>) = closure.execute(modrinth)

View File

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

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")
val LomExtension.isFabric: Boolean get() = fabricLoaderVersion.isPresent
val LomExtension.isForge: Boolean get() = neoforgeVersion.isPresent
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

View File

@ -5,6 +5,9 @@ import org.gradle.api.provider.Property
import java.util.*
interface LomExtension {
val loaderKind: Property<LoaderKind>
val minecraftVersion: Property<String>
val loaderVersion: Property<String>
val yarnBuild: Property<String>
fun yarn(yarnBuild: String) {
@ -15,23 +18,19 @@ interface LomExtension {
yarnBuild.set(null)
}
val minecraftVersion: Property<String>
val fabricLoaderVersion: Property<String>
val neoforgeVersion: Property<String>
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)
}
}

View File

@ -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<LomExtension>("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<LomExtension>("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)