Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions src/main/kotlin/dev/isxander/modstitch/base/BaseCommonImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import dev.isxander.modstitch.*
import dev.isxander.modstitch.base.extensions.*
import dev.isxander.modstitch.util.Platform
import dev.isxander.modstitch.util.afterSuccessfulEvaluate
import dev.isxander.modstitch.util.assignIfNotNull
import dev.isxander.modstitch.util.deepGradleProperty
import dev.isxander.modstitch.util.gradleProperty
import dev.isxander.modstitch.util.mainSourceSet
import dev.isxander.modstitch.util.platform
import dev.isxander.modstitch.util.printVersion
Expand Down Expand Up @@ -36,9 +39,6 @@ abstract class BaseCommonImpl<T : Any>(
// Set the property for use elsewhere
target.platform = platform

// Apply the necessary plugins
applyPlugins(target)

// Create our plugin extension
val msExt = target.extensions.create(
ModstitchExtension::class.java,
Expand All @@ -47,6 +47,11 @@ abstract class BaseCommonImpl<T : Any>(
this
)

applyGradleProperties(target)

// Apply the necessary plugins
applyPlugins(target)

// Ensure the archivesBaseName is our mod-id
target.pluginManager.withPlugin("base") {
target.extensions.configure<BasePluginExtension> {
Expand Down Expand Up @@ -154,6 +159,35 @@ abstract class BaseCommonImpl<T : Any>(
}
}

/**
* Applies from gradle.properties to a bunch of extension defaults.
* Executed before the user can touch the extensions so they can safely change all of this.
*/
protected open fun applyGradleProperties(target: Project) {
val modstitch = target.modstitch
modstitch.modLoaderVersion assignIfNotNull target.deepGradleProperty("modstitch.modLoaderVersion")
modstitch.minecraftVersion assignIfNotNull target.deepGradleProperty("modstitch.minecraftVersion")
modstitch.javaVersion assignIfNotNull target.deepGradleProperty("modstitch.javaVersion")?.toIntOrNull()
modstitch.parchment.minecraftVersion assignIfNotNull target.deepGradleProperty("modstitch.parchment.minecraftVersion")
modstitch.parchment.mappingsVersion assignIfNotNull target.deepGradleProperty("modstitch.parchment.mappingsVersion")
modstitch.parchment.parchmentArtifact assignIfNotNull target.deepGradleProperty("modstitch.parchment.parchmentArtifact")
modstitch.parchment.enabled assignIfNotNull target.deepGradleProperty("modstitch.parchment.enabled")?.toBooleanStrictOrNull()
modstitch.metadata.modId assignIfNotNull target.deepGradleProperty("modstitch.metadata.modId")
modstitch.metadata.modName assignIfNotNull target.deepGradleProperty("modstitch.metadata.modName")
modstitch.metadata.modVersion assignIfNotNull target.deepGradleProperty("modstitch.metadata.modVersion")
modstitch.metadata.modDescription assignIfNotNull target.deepGradleProperty("modstitch.metadata.modDescription")
modstitch.metadata.modLicense assignIfNotNull target.deepGradleProperty("modstitch.metadata.modLicense")
modstitch.metadata.modGroup assignIfNotNull target.deepGradleProperty("modstitch.metadata.modGroup")
modstitch.metadata.modAuthor assignIfNotNull target.deepGradleProperty("modstitch.metadata.modAuthor")
modstitch.metadata.modCredits assignIfNotNull target.deepGradleProperty("modstitch.metadata.modCredits")
modstitch.metadata.overwriteProjectVersionAndGroup assignIfNotNull target.deepGradleProperty("modstitch.metadata.overwriteProjectVersionAndGroup")?.toBooleanStrictOrNull()
modstitch.mixin.addMixinsToModManifest assignIfNotNull target.deepGradleProperty("modstitch.mixin.addMixinsToModManifest")?.toBooleanStrictOrNull()
modstitch.accessWidener assignIfNotNull target.deepGradleProperty("modstitch.accessWidener") { v, p -> p.file(v) }
modstitch.accessWidenerName assignIfNotNull target.deepGradleProperty("modstitch.accessWidenerName")
modstitch.validateAccessWidener assignIfNotNull target.deepGradleProperty("modstitch.validateAccessWidener")?.toBooleanStrictOrNull()
modstitch.modLoaderManifest assignIfNotNull target.deepGradleProperty("modstitch.modLoaderManifest")
}

/**
* Ensures templates in files like fabric.mod.json are replaced.
* e.g. ${mod_id} -> my_mod
Expand Down
11 changes: 9 additions & 2 deletions src/main/kotlin/dev/isxander/modstitch/base/loom/BaseLoomImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ class BaseLoomImpl : BaseCommonImpl<BaseLoomExtension>(
)

override fun apply(target: Project) {
super.apply(target)

val fabricExt = createRealPlatformExtension(target)!!

super.apply(target)

target.dependencies {
"minecraft"(target.modstitch.minecraftVersion.map { "com.mojang:minecraft:$it" })

Expand Down Expand Up @@ -123,6 +123,13 @@ class BaseLoomImpl : BaseCommonImpl<BaseLoomExtension>(
repositories.maven("https://maven.fabricmc.net") { name = "FabricMC" }
}

override fun applyGradleProperties(target: Project) {
super.applyGradleProperties(target)
target.modstitch.loom {
fabricLoaderVersion assignIfNotNull target.deepGradleProperty("modstitch.loom.fabricLoaderVersion")
}
}

override fun applyMetadataStringReplacements(target: Project): TaskProvider<ProcessResources> {
val generateModMetadata = super.applyMetadataStringReplacements(target)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import dev.isxander.modstitch.util.Platform
import dev.isxander.modstitch.util.PlatformExtensionInfo
import dev.isxander.modstitch.util.addCamelCasePrefix
import dev.isxander.modstitch.util.afterSuccessfulEvaluate
import dev.isxander.modstitch.util.assignIfNotNull
import dev.isxander.modstitch.util.deepGradleProperty
import dev.isxander.modstitch.util.mainSourceSet
import net.neoforged.moddevgradle.dsl.ModDevExtension
import net.neoforged.moddevgradle.dsl.NeoForgeExtension
Expand Down Expand Up @@ -44,6 +46,7 @@ class BaseModDevGradleImpl(

override fun apply(target: Project) {
val ext = createRealPlatformExtension(target, type)!!

super.apply(target)

val modstitch = target.modstitch
Expand Down Expand Up @@ -184,6 +187,16 @@ class BaseModDevGradleImpl(
})
}

override fun applyGradleProperties(target: Project) {
super.applyGradleProperties(target)
target.modstitch.moddevgradle {
neoForgeVersion assignIfNotNull target.deepGradleProperty("modstitch.moddevgradle.neoForgeVersion")
forgeVersion assignIfNotNull target.deepGradleProperty("modstitch.moddevgradle.forgeVersion")
neoFormVersion assignIfNotNull target.deepGradleProperty("modstitch.moddevgradle.neoFormVersion")
mcpVersion assignIfNotNull target.deepGradleProperty("modstitch.moddevgradle.mcpVersion")
}
}

override fun applyMetadataStringReplacements(target: Project): TaskProvider<ProcessResources> {
val generateModMetadata = super.applyMetadataStringReplacements(target)

Expand Down
26 changes: 26 additions & 0 deletions src/main/kotlin/dev/isxander/modstitch/util/ProjectUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ package dev.isxander.modstitch.util

import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.file.FileSystemLocation
import org.gradle.api.file.FileSystemLocationProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer
import java.io.File

/**
* Gets the [SourceSetContainer] from the project's extensions, if available.
Expand Down Expand Up @@ -33,3 +37,25 @@ internal fun Project.afterSuccessfulEvaluate(action: Action<Project>) = project.
action.execute(this)
}
}

internal fun Project.gradleProperty(key: String): String? =
project.findProperty(key) as String?

/**
* Searches for a gradle property deeply through the project tree
*/
internal fun <T> Project.deepGradleProperty(key: String, map: (String, Project) -> T): T? {
var project: Project? = project
while (project != null) {
project.gradleProperty(key)?.let { return map(it, project!!) }
Comment thread
isXander marked this conversation as resolved.
project = project.parent
}
return null
}
internal fun Project.deepGradleProperty(key: String): String? =
deepGradleProperty(key) { str, p -> str }

internal infix fun <T> Property<T>.assignIfNotNull(value: T?) =
value?.let { set(it) }
internal infix fun <T : FileSystemLocation> FileSystemLocationProperty<T>.assignIfNotNull(value: File?) =
value?.let { set(it) }
25 changes: 0 additions & 25 deletions test-project/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,38 +1,13 @@
modstitch {
minecraftVersion = findProperty("minecraftVersion") as String?
javaVersion = 17

loom {
fabricLoaderVersion = findProperty("fabricLoaderVersion") as String?
}

moddevgradle {
neoForgeVersion = findProperty("neoForgeVersion") as String?
forgeVersion = findProperty("forgeVersion") as String?
mcpVersion = findProperty("mcpVersion") as String?
neoFormVersion = findProperty("neoFormVersion") as String?
}

println(modLoaderManifest.getOrElse("'modLoaderManifest' is not set."))
println(javaVersion.map { "Java version: $it" }.getOrElse("'javaVersion' is not set."))

metadata {
modId = "test_project"
modGroup = "dev.isxander"
modVersion = "1.0.0"
modLicense = "ARR"
modName = "Test Project"
modDescription = "A test project for ModStitch"
}

moddevgradle {
defaultRuns()
}

mixin {
configs.create("test")

addMixinsToModManifest = true
}
}

Expand Down
4 changes: 2 additions & 2 deletions test-project/fabric/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
modstitch.platform=loom

minecraftVersion=1.21.4
fabricLoaderVersion=0.16.10
modstitch.minecraftVersion=1.21.4
modstitch.modLoaderVersion=0.16.10
4 changes: 2 additions & 2 deletions test-project/forge/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
modstitch.platform=moddevgradle-legacy

minecraftVersion=1.20.1
forgeVersion=1.20.1-47.3.0
modstitch.minecraftVersion=1.20.1
modstitch.modLoaderVersion=1.20.1-47.3.0
6 changes: 5 additions & 1 deletion test-project/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
org.gradle.configuration-cache=true

modstitch.platform=parent
modstitch.platform=parent
modstitch.metadata.modId=test_mod
modstitch.metadata.modName=Test Mod
modstitch.metadata.modVersion=1.2.3
modstitch.mixin.addMixinsToModManifest=true
4 changes: 2 additions & 2 deletions test-project/neoforge/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
modstitch.platform=moddevgradle

minecraftVersion=1.20.4
neoForgeVersion=20.4.239
modstitch.minecraftVersion=1.20.4
modstitch.modLoaderVersion=20.4.239