Skip to content
Open
Show file tree
Hide file tree
Changes from 8 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
13 changes: 10 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,21 @@ plugins {
idea
}

group = "dev.isxander.modstitch"
group = "dev.isxander.modstitchh"
version = "0.8.4"

repositories {
mavenCentral()
gradlePluginPortal()
maven("https://maven.fabricmc.net/")
maven("https://maven.neoforged.net/releases/")
maven{
url = uri("https://nexus.gtnewhorizons.com/repository/public/")
mavenContent {
includeGroupByRegex("com\\.gtnewhorizons\\..+")
includeGroup("com.gtnewhorizons")
}
}
}

fun String.capitalize(): String {
Expand Down Expand Up @@ -54,12 +61,12 @@ dependencies {
implementation(plugin("net.neoforged.moddev", prop = "deps.moddevgradle"))
implementation(plugin("net.neoforged.moddev.legacyforge", prop = "deps.moddevgradle"))
implementation(plugin("me.modmuss50.mod-publish-plugin", prop = "deps.mpp"))
implementation(plugin("com.gradleup.shadow", prop = "deps.shadow"))

implementation(plugin("com.gtnewhorizons.retrofuturagradle", prop = "deps.retrofuturagradle"))
// Libraries used within the plugin
implementation("com.google.code.gson:gson:2.11.0")
implementation("com.electronwill.night-config:toml:3.8.1")
implementation("org.semver4j:semver4j:5.5.0")
implementation("net.neoforged:srgutils:1.0.11")


// Libraries used for testing
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx4G
deps.loom=1.14.9
deps.moddevgradle=2.0.137
deps.mpp=0.8.4
deps.shadow=8.3.6
deps.retrofuturagradle=2.0.2
50 changes: 27 additions & 23 deletions src/main/kotlin/dev/isxander/modstitch/base/BaseCommonImpl.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package dev.isxander.modstitch.base

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.mainSourceSet
import dev.isxander.modstitch.util.platform
import dev.isxander.modstitch.util.printVersion
import dev.isxander.modstitch.PlatformPlugin
import dev.isxander.modstitch.base.extensions.ModstitchExtension
import dev.isxander.modstitch.base.extensions.ModstitchExtensionImpl
import dev.isxander.modstitch.base.extensions.modstitch
import dev.isxander.modstitch.util.*
import org.gradle.api.Action
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.dsl.RepositoryHandler
Expand All @@ -20,6 +17,7 @@ import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.kotlin.dsl.*
import org.gradle.language.jvm.tasks.ProcessResources
import org.gradle.plugins.ide.idea.model.IdeaModel
Expand Down Expand Up @@ -75,7 +73,10 @@ abstract class BaseCommonImpl<T : Any>(
applyMetadataStringReplacements(target)

// Create modstitch remap configurations
createProxyConfigurations(target, target.extensions.getByType<SourceSetContainer>().getByName(SourceSet.MAIN_SOURCE_SET_NAME))
createProxyConfigurations(
target,
target.extensions.getByType<SourceSetContainer>().getByName(SourceSet.MAIN_SOURCE_SET_NAME)
)

// Jar-in-jar support
target.configurations.create("modstitchJiJ") {
Expand All @@ -89,8 +90,10 @@ abstract class BaseCommonImpl<T : Any>(
group = "modstitch/internal"
dependsOn("processResources")

source(msExt.modLoaderManifest.map { listOf(project.mainSourceSet!!.output.resourcesDir!!.resolve(it)) }.orElse(listOf()))
mixins.value(target.provider { msExt.mixin.configs.map { it.resolved() } }.zip(msExt.mixin.addMixinsToModManifest) { configs, addToManifest -> if (!addToManifest) emptyList() else configs })
source(msExt.modLoaderManifest.map { listOf(project.mainSourceSet!!.output.resourcesDir!!.resolve(it)) }
.orElse(listOf()))
mixins.value(target.provider { msExt.mixin.configs.map { it.resolved() } }
.zip(msExt.mixin.addMixinsToModManifest) { configs, addToManifest -> if (!addToManifest) emptyList() else configs })
classTweakers.value(msExt.classTweakerName.zip(msExt.classTweaker) { n, _ -> listOf(n) }.orElse(listOf()))
}.also { target.tasks["processResources"].finalizedBy(it) }
}
Expand Down Expand Up @@ -147,17 +150,13 @@ abstract class BaseCommonImpl<T : Any>(
}

target.extensions.configure<JavaPluginExtension> {
target.afterSuccessfulEvaluate {
val requestedJavaVersion = target.modstitch.javaVersion.orNull

if (requestedJavaVersion != null) {
JavaVersion.toVersion(requestedJavaVersion).let {
targetCompatibility = it
sourceCompatibility = it
}
} else {
target.logger.warn("No Java version specified in modstitch configuration. Not applying any Java version settings.")
}
toolchain.languageVersion.set(
target.modstitch.javaVersion.map { JavaLanguageVersion.of(it) }
)
}
target.afterSuccessfulEvaluate {
if (!target.modstitch.javaVersion.isPresent) {
target.logger.warn("No Java version specified in modstitch configuration. Not applying any Java version settings.")
}
}
}
Expand Down Expand Up @@ -244,7 +243,12 @@ abstract class BaseCommonImpl<T : Any>(
createProxyConfigurations(target, FutureNamedDomainObjectProvider.from(target.configurations, it))
}
}
abstract fun createProxyConfigurations(target: Project, configuration: FutureNamedDomainObjectProvider<Configuration>, defer: Boolean = false)

abstract fun createProxyConfigurations(
target: Project,
configuration: FutureNamedDomainObjectProvider<Configuration>,
defer: Boolean = false,
)

abstract fun configureJiJConfiguration(target: Project, configuration: Configuration)

Expand Down
2 changes: 2 additions & 0 deletions src/main/kotlin/dev/isxander/modstitch/base/BasePlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import dev.isxander.modstitch.base.loom.BaseLoomImpl
import dev.isxander.modstitch.base.loom.LoomType
import dev.isxander.modstitch.base.moddevgradle.BaseModDevGradleImpl
import dev.isxander.modstitch.base.moddevgradle.MDGType
import dev.isxander.modstitch.base.retrofuturagradle.BaseRetroFuturaGradleImpl
import dev.isxander.modstitch.util.RegisteredGradlePlugin

@RegisteredGradlePlugin
Expand All @@ -17,6 +18,7 @@ class BasePlugin : ModstitchExtensionPlugin("base", platforms) {
Platform.LoomRemap to BaseLoomImpl(LoomType.Remap),
Platform.MDG to BaseModDevGradleImpl(MDGType.Regular),
Platform.MDGLegacy to BaseModDevGradleImpl(MDGType.Legacy),
Platform.RFG to BaseRetroFuturaGradleImpl()
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package dev.isxander.modstitch.base.extensions
import dev.isxander.modstitch.base.*
import dev.isxander.modstitch.base.loom.BaseLoomExtension
import dev.isxander.modstitch.base.moddevgradle.BaseModDevGradleExtension
import dev.isxander.modstitch.base.retrofuturagradle.BaseRetroFuturaGradleExtension
import dev.isxander.modstitch.util.*
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer
Expand All @@ -28,6 +29,10 @@ interface ModstitchExtension {
* - When target platform is `loom`, this property is equivalent to `loom.fabricLoaderVersion`.
* - When target platform is `moddevgradle`, this property is equivalent to `moddevgradle.neoForgeVersion`.
* - When target platform is `moddevgradle-legacy`, this property is equivalent to `moddevgradle.forgeVersion`.
* - When target platform is `retrofuturagradle`, this property is equivalent to `retrofuturagradle.forgeVersion`.
*
* On retrofuturagradle, the property only serves as a check, because retrofuturagradle forces specific forge
* versions
*/
val modLoaderVersion: Property<String>

Expand Down Expand Up @@ -213,6 +218,12 @@ interface ModstitchExtension {
*/
fun moddevgradle(action: Action<BaseModDevGradleExtension>) {}

/**
* Configures the RetroFuturaGradle extension
* The action is only executed if the active platform is RetroFuturaGradle
*/
fun retrofuturagradle(action: Action<BaseRetroFuturaGradleExtension>) {}

val templatesSourceDirectorySet: SourceDirectorySet

/**
Expand All @@ -232,6 +243,7 @@ open class ModstitchExtensionImpl @Inject constructor(
Platform.Loom, Platform.LoomRemap -> project.extensions.getByType<BaseLoomExtension>().fabricLoaderVersion
Platform.MDG -> project.extensions.getByType<BaseModDevGradleExtension>().neoForgeVersion
Platform.MDGLegacy -> project.extensions.getByType<BaseModDevGradleExtension>().forgeVersion
Platform.RFG -> project.extensions.getByType<BaseRetroFuturaGradleExtension>().forgeVersion
}

override val minecraftVersion = objects.property<String>()
Expand Down Expand Up @@ -301,6 +313,7 @@ open class ModstitchExtensionImpl @Inject constructor(

override fun loom(action: Action<BaseLoomExtension>) = platformExtension(action)
override fun moddevgradle(action: Action<BaseModDevGradleExtension>) = platformExtension(action)
override fun retrofuturagradle(action: Action<BaseRetroFuturaGradleExtension>) = platformExtension(action)

private inline fun <reified T : Any> platformExtension(action: Action<T>) {
val platformExtension = plugin.platformExtension
Expand All @@ -312,14 +325,12 @@ open class ModstitchExtensionImpl @Inject constructor(
internal var _finalJarTaskName: String? = null
set(value) {
field = value
println("Final jar task set to $value")
}
override val finalJarTask: TaskProvider<out Jar>
get() = _finalJarTaskName?.let { project.tasks.named<Jar>(it) } ?: error("Final jar task not set")
internal var _namedJarTaskName: String? = null
set(value) {
field = value
println("Named jar task set to $value")
}
override val namedJarTask: TaskProvider<out Jar>
get() = _namedJarTaskName?.let { project.tasks.named<Jar>(it) } ?: error("Named jar task not set")
Expand Down
44 changes: 33 additions & 11 deletions src/main/kotlin/dev/isxander/modstitch/base/loom/BaseLoomImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.Test
import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions
import org.gradle.kotlin.dsl.*
import org.gradle.kotlin.dsl.assign
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.accessors.runtime.maybeRegister
import org.gradle.language.jvm.tasks.ProcessResources

class BaseLoomImpl(
Expand Down Expand Up @@ -162,10 +161,15 @@ class BaseLoomImpl(

// loom run configs does not support gradle lazy evaluation
target.afterSuccessfulEvaluate {
target.extensions.getByType<LoomGradleExtensionAPI>().runs.register(modstitch.name) loom@{
val loomExt = target.extensions.getByType<LoomGradleExtensionAPI>()
maybeRegister(loomExt.runs, modstitch.name) loom@{
val loom = this@loom

modstitch.gameDirectory.orNull?.let { loom.runDir = it.asFile.absolutePath }
// loom uses a relative path from the project directory
modstitch.gameDirectory.orNull?.let {
loom.runDir = it
.asFile.relativeTo(target.projectDir).path
}
modstitch.mainClass.orNull?.let { loom.mainClass = it }
modstitch.jvmArgs.orNull?.let { loom.vmArgs.addAll(it) }
modstitch.programArgs.orNull?.let { loom.programArgs.addAll(it) }
Expand Down Expand Up @@ -231,13 +235,20 @@ class BaseLoomImpl(
target.loom.createRemapConfigurations(sourceSet)
}
} else {
createProxyConfigurations(target, FutureNamedDomainObjectProvider.from(target.configurations, Constants.Configurations.LOCAL_RUNTIME))
createProxyConfigurations(
target,
FutureNamedDomainObjectProvider.from(target.configurations, Constants.Configurations.LOCAL_RUNTIME)
)
}

super.createProxyConfigurations(target, sourceSet)
}

override fun createProxyConfigurations(target: Project, configuration: FutureNamedDomainObjectProvider<Configuration>, defer: Boolean) {
override fun createProxyConfigurations(
target: Project,
configuration: FutureNamedDomainObjectProvider<Configuration>,
defer: Boolean,
) {
if (defer) error("Cannot defer proxy configuration creation in Loom")

// for no-remap, this "remap configuration" is just the regular configuration
Expand All @@ -247,19 +258,30 @@ class BaseLoomImpl(
.find { it.targetConfigurationName.get() == configuration.name }
?.name
?: error("Loom has not created a remap configuration for ${configuration.name}, modstitch cannot proxy it.")

LoomType.NoRemap -> configuration.name
}

val proxyModConfigurationName = configuration.name.addCamelCasePrefix("modstitchMod")
val proxyRegularConfigurationName = configuration.name.addCamelCasePrefix("modstitch")

target.configurations.create(proxyModConfigurationName) proxy@{
target.configurations.named(remapConfigurationName) {
extendsFrom(this@proxy)
}

val proxyModConf = target.configurations.register(proxyModConfigurationName) proxy@{
isCanBeResolved = false
isCanBeConsumed = false
isCanBeDeclared = true
}
target.configurations.create(proxyRegularConfigurationName) proxy@{

target.configurations.named(remapConfigurationName) {
extendsFrom(proxyModConf.get())
}

target.configurations.register(proxyRegularConfigurationName) proxy@{
configuration.get().extendsFrom(this@proxy)
isCanBeResolved = false
isCanBeConsumed = false
isCanBeDeclared = true

}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,10 +287,13 @@ class BaseModDevGradleImpl(
return target.afterSuccessfulEvaluate { action(configuration.get()) }
}

target.configurations.create(proxyModConfigurationName) proxy@{
target.configurations.register(proxyModConfigurationName) proxy@{
deferred {
it.extendsFrom(this@proxy)
}
isCanBeResolved = false
isCanBeConsumed = false
isCanBeDeclared = true

target.afterSuccessfulEvaluate {
if (type == MDGType.Legacy) {
Expand All @@ -299,10 +302,13 @@ class BaseModDevGradleImpl(
}
}

target.configurations.create(proxyRegularConfigurationName) proxy@{
target.configurations.register(proxyRegularConfigurationName) proxy@{
deferred {
it.extendsFrom(this@proxy)
}
isCanBeResolved = false
isCanBeConsumed = false
isCanBeDeclared = true

target.afterSuccessfulEvaluate {
target.configurations.named("additionalRuntimeClasspath") {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.isxander.modstitch.base.retrofuturagradle

import dev.isxander.modstitch.base.AppendModMetadataTask
import java.io.File

abstract class AppendRFGMetadataTask : AppendModMetadataTask() {
override fun appendModMetadata(file: File) {
}
}
Loading