From b9b3c2d7a04dfd581f743576255d4ea717579ade Mon Sep 17 00:00:00 2001 From: Anastasia Chrysanthemum Date: Mon, 11 May 2026 05:54:40 +1000 Subject: [PATCH] build: Refactor build scripts. --- block_entities/fabric/build.gradle.kts | 25 +-------- block_entities/neoforge/build.gradle.kts | 25 +-------- block_entities/xplat/build.gradle.kts | 25 ++------- build_logic/build.gradle.kts | 18 ++++++ build_logic/settings.gradle.kts | 17 ++++++ .../main/kotlin/conventions.xplat.gradle.kts | 16 ------ .../{cowponents => }/gradle/ModPlatform.kt | 2 +- .../greenhouse/gradle/base/api.gradle.kts} | 15 +++-- .../greenhouse/gradle/base/java.gradle.kts} | 56 +++---------------- .../greenhouse/gradle/base/merge.gradle.kts} | 44 ++++----------- .../gradle/base/repositories.gradle.kts | 16 ++++++ .../greenhouse/gradle/base/root.gradle.kts | 20 +++++++ .../gradle/module/submodule.gradle.kts} | 8 +-- .../gradle/platform/fabric.gradle.kts | 40 +++++++++++++ .../gradle/platform/loader.gradle.kts} | 8 ++- .../gradle/platform/neoforge.gradle.kts | 50 +++++++++++++++++ .../gradle/platform/xplat.gradle.kts | 41 ++++++++++++++ core/fabric/build.gradle.kts | 27 +-------- core/neoforge/build.gradle.kts | 27 +-------- core/xplat/build.gradle.kts | 22 +------- entities/fabric/build.gradle.kts | 25 +-------- entities/neoforge/build.gradle.kts | 24 +------- entities/xplat/build.gradle.kts | 25 +-------- extensions/fabric/build.gradle.kts | 27 +-------- extensions/neoforge/build.gradle.kts | 25 +-------- extensions/xplat/build.gradle.kts | 28 ++-------- gradle/libs.versions.toml | 2 +- test/fabric/build.gradle.kts | 18 ++---- test/neoforge/build.gradle.kts | 14 ++--- test/xplat/build.gradle.kts | 30 +--------- 30 files changed, 282 insertions(+), 438 deletions(-) delete mode 100644 build_logic/src/main/kotlin/conventions.xplat.gradle.kts rename build_logic/src/main/kotlin/lgbt/greenhouse/{cowponents => }/gradle/ModPlatform.kt (94%) rename build_logic/src/main/kotlin/{conventions.api.gradle.kts => lgbt/greenhouse/gradle/base/api.gradle.kts} (89%) rename build_logic/src/main/kotlin/{conventions.shared.gradle.kts => lgbt/greenhouse/gradle/base/java.gradle.kts} (70%) rename build_logic/src/main/kotlin/{conventions.merge.gradle.kts => lgbt/greenhouse/gradle/base/merge.gradle.kts} (80%) create mode 100644 build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/repositories.gradle.kts create mode 100644 build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/root.gradle.kts rename build_logic/src/main/kotlin/{conventions.submodule.gradle.kts => lgbt/greenhouse/gradle/module/submodule.gradle.kts} (66%) create mode 100644 build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/fabric.gradle.kts rename build_logic/src/main/kotlin/{conventions.loader.gradle.kts => lgbt/greenhouse/gradle/platform/loader.gradle.kts} (72%) create mode 100644 build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/neoforge.gradle.kts create mode 100644 build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/xplat.gradle.kts diff --git a/block_entities/fabric/build.gradle.kts b/block_entities/fabric/build.gradle.kts index 9580ddb..525eff1 100644 --- a/block_entities/fabric/build.gradle.kts +++ b/block_entities/fabric/build.gradle.kts @@ -1,29 +1,8 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - id("conventions.submodule") - alias(libs.plugins.loom) + id("lgbt.greenhouse.gradle.platform.fabric") + id("lgbt.greenhouse.gradle.module.submodule") } -val props = Properties.MODULES["block_entities"]!! - dependencies { - minecraft(libs.minecraft) - - implementation(libs.fabric.loader) - implementation(libs.fabric.api) - "localCompile"(project(":extensions_fabric")) } - -loom { - val aw = file("src/main/resources/${props.modId}.classtweaker") - if (aw.exists()) - accessWidenerPath.set(aw) - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } -} diff --git a/block_entities/neoforge/build.gradle.kts b/block_entities/neoforge/build.gradle.kts index 7675a67..d714271 100644 --- a/block_entities/neoforge/build.gradle.kts +++ b/block_entities/neoforge/build.gradle.kts @@ -1,29 +1,8 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - id("conventions.submodule") - alias(libs.plugins.moddev) + id("lgbt.greenhouse.gradle.platform.neoforge") + id("lgbt.greenhouse.gradle.module.submodule") } -val props = Properties.MODULES["block_entities"]!! - dependencies { "localCompile"(project(":extensions_neoforge")) } - -neoForge { - version = libs.versions.neoforge.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = project(":block_entities_xplat").file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true - - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } -} diff --git a/block_entities/xplat/build.gradle.kts b/block_entities/xplat/build.gradle.kts index 545ad8c..b7e50be 100644 --- a/block_entities/xplat/build.gradle.kts +++ b/block_entities/xplat/build.gradle.kts @@ -1,27 +1,10 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.xplat") - alias(libs.plugins.moddev) - id("conventions.merge") + id("lgbt.greenhouse.gradle.platform.xplat") + id("lgbt.greenhouse.gradle.module.submodule") + id("lgbt.greenhouse.gradle.base.api") + id("lgbt.greenhouse.gradle.base.merge") } -val props = Properties.MODULES["block_entities"]!! - dependencies { - compileOnly(libs.mixin) - compileOnly(libs.mixin.extras) - annotationProcessor(libs.mixin.extras) - "localCompile"(project(":extensions_xplat")) } - -neoForge { - neoFormVersion = libs.versions.neoform.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true -} diff --git a/build_logic/build.gradle.kts b/build_logic/build.gradle.kts index 5b5f135..16ce796 100644 --- a/build_logic/build.gradle.kts +++ b/build_logic/build.gradle.kts @@ -1,12 +1,30 @@ plugins { `kotlin-dsl` + alias(libs.plugins.loom) apply false + alias(libs.plugins.moddev) apply false + alias(libs.plugins.mod.publish) apply false } repositories { + repositories { + maven("https://maven.fabricmc.net/") { + name = "Fabric" + } + } + maven("https://maven.neoforged.net/releases") { + name = "NeoForge" + } mavenCentral() } dependencies { + implementation("net.fabricmc:fabric-loom:${libs.versions.loom.get()}") { + isTransitive = false + } + implementation("net.neoforged:moddev-gradle:${libs.versions.moddev.get()}") { + isTransitive = false + } + // https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) } diff --git a/build_logic/settings.gradle.kts b/build_logic/settings.gradle.kts index 8e6efa3..45b8914 100644 --- a/build_logic/settings.gradle.kts +++ b/build_logic/settings.gradle.kts @@ -5,3 +5,20 @@ dependencyResolutionManagement { } } } + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven("https://maven.neoforged.net/releases") { + name = "NeoForged" + } + maven("https://maven.fabricmc.net/") { + name = "Fabric" + } + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} diff --git a/build_logic/src/main/kotlin/conventions.xplat.gradle.kts b/build_logic/src/main/kotlin/conventions.xplat.gradle.kts deleted file mode 100644 index ee90c27..0000000 --- a/build_logic/src/main/kotlin/conventions.xplat.gradle.kts +++ /dev/null @@ -1,16 +0,0 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - -plugins { - id("conventions.shared") -} - -val props = project.ext["props"] as Properties.ModuleProperties - -configurations { - getByName("apiElements") { - outgoing { - capability("${group}:${base.archivesName.get()}:${version}") - } - } -} - diff --git a/build_logic/src/main/kotlin/lgbt/greenhouse/cowponents/gradle/ModPlatform.kt b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/ModPlatform.kt similarity index 94% rename from build_logic/src/main/kotlin/lgbt/greenhouse/cowponents/gradle/ModPlatform.kt rename to build_logic/src/main/kotlin/lgbt/greenhouse/gradle/ModPlatform.kt index 6b7263c..2bf3672 100644 --- a/build_logic/src/main/kotlin/lgbt/greenhouse/cowponents/gradle/ModPlatform.kt +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/ModPlatform.kt @@ -1,4 +1,4 @@ -package lgbt.greenhouse.cowponents.gradle +package lgbt.greenhouse.gradle enum class ModPlatform(val platformName: String) { XPLAT("xplat"), diff --git a/build_logic/src/main/kotlin/conventions.api.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/api.gradle.kts similarity index 89% rename from build_logic/src/main/kotlin/conventions.api.gradle.kts rename to build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/api.gradle.kts index c50dd3c..1cfc2d1 100644 --- a/build_logic/src/main/kotlin/conventions.api.gradle.kts +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/api.gradle.kts @@ -1,19 +1,24 @@ +package lgbt.greenhouse.gradle.base + import lgbt.greenhouse.cowponents.gradle.Properties import org.gradle.jvm.component.internal.DefaultJvmSoftwareComponent import org.gradle.jvm.component.internal.JvmSoftwareComponentInternal +import org.gradle.jvm.tasks.Jar plugins { - base - `java-library` - idea + id("lgbt.greenhouse.gradle.base.java") `maven-publish` } - val apiComponent = components.create("api") as DefaultJvmSoftwareComponent val props = project.ext["props"] as Properties.ModuleProperties configurations { + getByName("apiElements") { + outgoing { + capability("${group}:${base.archivesName.get()}:${version}") + } + } register("apiCompileElements") { outgoing { capability("${group}:${base.archivesName.get()}-api:${version}") @@ -56,7 +61,7 @@ project.afterEvaluate { } artifacts.add( "apiCompileElements", - tasks.getByName("apiJar") + tasks.getByName("apiJar") ) { classifier = "api" } diff --git a/build_logic/src/main/kotlin/conventions.shared.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/java.gradle.kts similarity index 70% rename from build_logic/src/main/kotlin/conventions.shared.gradle.kts rename to build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/java.gradle.kts index 800dc8f..cb2035d 100644 --- a/build_logic/src/main/kotlin/conventions.shared.gradle.kts +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/java.gradle.kts @@ -1,22 +1,19 @@ +@file:Suppress("AvoidDuplicateDependencies") // IntelliJ, output is not null. + +package lgbt.greenhouse.gradle.base + import lgbt.greenhouse.cowponents.gradle.Properties import org.gradle.accessors.dm.LibrariesForLibs plugins { - base + id("lgbt.greenhouse.gradle.base.root") `java-library` - idea } +val coreProps = Properties.MODULES["core"]!! // https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 val libs = the() - -val coreProps = Properties.MODULES["core"]!! -val props = Properties.MODULES[project.name.replace(Regex("_(xplat|fabric|neoforge)$"), "")]!! -project.ext["props"] = props - -base.archivesName.set("${props.archivesBaseName}-${project.name.split("_")[1]}") -group = Properties.GROUP -version = "${props.version}+${Properties.FRIENDLY_MINECRAFT_VERSION}" +val props = project.ext["props"] as Properties.ModuleProperties configurations { register("mainOutput") { @@ -27,7 +24,6 @@ configurations { isCanBeResolved = false isCanBeConsumed = true } - register("localCompile") { isCanBeResolved = true isCanBeConsumed = false @@ -42,50 +38,12 @@ dependencies { "testOutput"(sourceSets["test"].output) } - java { toolchain.languageVersion.set(JavaLanguageVersion.of(Properties.JAVA_VERSION)) withSourcesJar() withJavadocJar() } -repositories { - // https://docs.gradle.org/current/userguide/declaring_repositories.html#declaring_content_exclusively_found_in_one_repository - exclusiveContent { - forRepository { - maven("https://repo.spongepowered.org/repository/maven-public") { - name = "Sponge" - } - } - filter { - @Suppress("UnstableApiUsage") - includeGroupAndSubgroups("org.spongepowered") - } - } - exclusiveContent { - forRepositories( - maven("https://maven.parchmentmc.org/") { - name = "ParchmentMC" - }, - maven("https://maven.neoforged.net/releases") { - name = "NeoForge" - } - ) - filter { includeGroup("org.parchmentmc.data") } - } - maven("https://maven.fabricmc.net/") { - name = "Fabric" - } - maven("https://maven.terraformersmc.com/") { - name = "TerraformersMC" - } - maven("https://maven.greenhouse.lgbt/releases") { - name = "Greenhouse Modding" - } - mavenCentral() - mavenLocal() -} - tasks { named("sourcesJar").configure { from(rootProject.file("LICENSE")) { diff --git a/build_logic/src/main/kotlin/conventions.merge.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/merge.gradle.kts similarity index 80% rename from build_logic/src/main/kotlin/conventions.merge.gradle.kts rename to build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/merge.gradle.kts index 4f3da41..ff3f064 100644 --- a/build_logic/src/main/kotlin/conventions.merge.gradle.kts +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/merge.gradle.kts @@ -1,15 +1,13 @@ -import gradle.kotlin.dsl.accessors._bb7407e43c252c8005654a0b9f579d81.base -import lgbt.greenhouse.cowponents.gradle.ModPlatform +package lgbt.greenhouse.gradle.base + import lgbt.greenhouse.cowponents.gradle.Properties +import lgbt.greenhouse.gradle.ModPlatform import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.jvm.component.internal.DefaultJvmSoftwareComponent import org.gradle.jvm.component.internal.JvmSoftwareComponentInternal plugins { - base - `java-library` - idea - `maven-publish` + id("lgbt.greenhouse.gradle.base.java") } configurations { @@ -39,6 +37,12 @@ val xplatProject = ":${ModPlatform.convertModuleName(project.name, ModPlatform.X val fabricProject = ":${ModPlatform.convertModuleName(project.name, ModPlatform.FABRIC)}" val neoForgeProject = ":${ModPlatform.convertModuleName(project.name, ModPlatform.NEOFORGE)}" +dependencies { + "xplat"(project(xplatProject, "mainOutput")) + "fabric"(project(fabricProject, "mainOutput")) + "neoForge"(project(neoForgeProject, "mainOutput")) +} + val mergeJar = tasks.register("mergeJar") { archiveBaseName.set(props.archivesBaseName) destinationDirectory.set(project.rootDir.resolve("build/libs")) @@ -77,31 +81,3 @@ val mergeJar = tasks.register("mergeJar") { tasks { get("assemble").dependsOn(mergeJar) } - -dependencies { - "xplat"(project(xplatProject, "mainOutput")) - "fabric"(project(fabricProject, "mainOutput")) - "neoForge"(project(neoForgeProject, "mainOutput")) -} - -publishing { - publications { - create("mavenJava") { - artifactId = base.archivesName.get() - from(components["java"]) - } - } - repositories { - maven { - name = "Greenhouse" - url = uri(Properties.MAVEN_URL) - credentials { - username = System.getenv("MAVEN_USERNAME") - password = System.getenv("MAVEN_PASSWORD") - } - authentication { - create("basic") - } - } - } -} diff --git a/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/repositories.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/repositories.gradle.kts new file mode 100644 index 0000000..d73f363 --- /dev/null +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/repositories.gradle.kts @@ -0,0 +1,16 @@ +package lgbt.greenhouse.gradle.base + +plugins { + id("lgbt.greenhouse.gradle.base.root") +} + +repositories { + maven("https://maven.terraformersmc.com/") { + name = "TerraformersMC" + } + maven("https://maven.greenhouse.lgbt/releases") { + name = "Greenhouse Modding" + } + mavenCentral() + mavenLocal() +} diff --git a/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/root.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/root.gradle.kts new file mode 100644 index 0000000..eba0e87 --- /dev/null +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/base/root.gradle.kts @@ -0,0 +1,20 @@ +package lgbt.greenhouse.gradle.base + +import lgbt.greenhouse.cowponents.gradle.Properties +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + base + idea +} + +// https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 +val libs = the() +project.ext["libs"] = libs + +val props = Properties.MODULES[project.name.replace(Regex("_(xplat|fabric|neoforge)$"), "")]!! +project.ext["props"] = props + +base.archivesName.set("${props.archivesBaseName}-${project.name.split("_")[1]}") +group = Properties.GROUP +version = "${props.version}+${Properties.FRIENDLY_MINECRAFT_VERSION}" diff --git a/build_logic/src/main/kotlin/conventions.submodule.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/module/submodule.gradle.kts similarity index 66% rename from build_logic/src/main/kotlin/conventions.submodule.gradle.kts rename to build_logic/src/main/kotlin/lgbt/greenhouse/gradle/module/submodule.gradle.kts index 9af1ce4..41865a3 100644 --- a/build_logic/src/main/kotlin/conventions.submodule.gradle.kts +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/module/submodule.gradle.kts @@ -1,9 +1,9 @@ -import lgbt.greenhouse.cowponents.gradle.ModPlatform +package lgbt.greenhouse.gradle.module + +import lgbt.greenhouse.gradle.ModPlatform plugins { - base - `java-library` - idea + id("lgbt.greenhouse.gradle.base.java") } val platform = ModPlatform.fromModuleName(project.name) diff --git a/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/fabric.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/fabric.gradle.kts new file mode 100644 index 0000000..9bfbc84 --- /dev/null +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/fabric.gradle.kts @@ -0,0 +1,40 @@ +package lgbt.greenhouse.gradle.platform + +import lgbt.greenhouse.cowponents.gradle.Properties +import net.fabricmc.loom.api.LoomGradleExtensionAPI +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("lgbt.greenhouse.gradle.platform.loader") + id("lgbt.greenhouse.gradle.base.repositories") +} + +val libs = project.ext["libs"] as LibrariesForLibs +val props = project.ext["props"] as Properties.ModuleProperties + +// Cursed but it works! +plugins.apply(libs.plugins.loom.get().pluginId) + +repositories { + maven("https://maven.fabricmc.net/") { + name = "Fabric" + } +} + +dependencies { + "minecraft"(libs.minecraft) + + implementation(libs.fabric.loader) + implementation(libs.fabric.api) +} + +extensions.configure("loom") { + val aw = file("src/main/resources/${props.modId}.accesswidener") + if (aw.exists()) + accessWidenerPath.set(aw) + mods { + register(props.modId) { + sourceSet(sourceSets["main"]) + } + } +} diff --git a/build_logic/src/main/kotlin/conventions.loader.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/loader.gradle.kts similarity index 72% rename from build_logic/src/main/kotlin/conventions.loader.gradle.kts rename to build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/loader.gradle.kts index 4e2358b..d08dc52 100644 --- a/build_logic/src/main/kotlin/conventions.loader.gradle.kts +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/loader.gradle.kts @@ -1,14 +1,18 @@ -import lgbt.greenhouse.cowponents.gradle.ModPlatform +package lgbt.greenhouse.gradle.platform + import lgbt.greenhouse.cowponents.gradle.Properties +import lgbt.greenhouse.gradle.ModPlatform plugins { - id("conventions.shared") + id("lgbt.greenhouse.gradle.base.java") } val xplatProjectName = ":${ModPlatform.convertModuleName(project.name, ModPlatform.XPLAT)}" val xplatProject: Project = project(xplatProjectName) val props = project.ext["props"] as Properties.ModuleProperties +project.ext["xplat_project"] = xplatProject + dependencies { api(project(xplatProjectName)) diff --git a/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/neoforge.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/neoforge.gradle.kts new file mode 100644 index 0000000..88a04d9 --- /dev/null +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/neoforge.gradle.kts @@ -0,0 +1,50 @@ +package lgbt.greenhouse.gradle.platform + +import lgbt.greenhouse.cowponents.gradle.Properties +import net.neoforged.moddevgradle.dsl.NeoForgeExtension +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("lgbt.greenhouse.gradle.platform.loader") + id("lgbt.greenhouse.gradle.base.repositories") +} + +val libs = project.ext["libs"] as LibrariesForLibs +val props = project.ext["props"] as Properties.ModuleProperties + +// Cursed but it works! +plugins.apply(libs.plugins.moddev.get().pluginId) + +val xplatProject = project.ext["xplat_project"] as Project + +configurations { + register("localRuntime") { + isCanBeResolved = true + isCanBeConsumed = false + } + getByName("runtimeClasspath") { + extendsFrom(configurations["localRuntime"]) + } +} + +repositories { + maven("https://maven.neoforged.net/releases") { + name = "NeoForge" + } +} + +extensions.configure("neoForge") { + version = libs.versions.neoforge.get() + addModdingDependenciesTo(sourceSets["test"]) + + val at = xplatProject.file("src/main/resources/${props.modId}.cfg") + if (at.exists()) + setAccessTransformers(at) + validateAccessTransformers = true + + mods { + register(props.modId) { + sourceSet(sourceSets["main"]) + } + } +} diff --git a/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/xplat.gradle.kts b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/xplat.gradle.kts new file mode 100644 index 0000000..360b271 --- /dev/null +++ b/build_logic/src/main/kotlin/lgbt/greenhouse/gradle/platform/xplat.gradle.kts @@ -0,0 +1,41 @@ +package lgbt.greenhouse.gradle.platform + +import lgbt.greenhouse.cowponents.gradle.Properties +import net.neoforged.moddevgradle.dsl.NeoForgeExtension +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("lgbt.greenhouse.gradle.base.java") + id("lgbt.greenhouse.gradle.base.repositories") +} + +val libs = project.ext["libs"] as LibrariesForLibs +val props = project.ext["props"] as Properties.ModuleProperties + +// Cursed but it works! +plugins.apply(libs.plugins.moddev.get().pluginId) + +repositories { + maven("https://repo.spongepowered.org/repository/maven-public") { + name = "Sponge" + } +} + +dependencies { + compileOnly(libs.mixin) + compileOnly(libs.mixin.extras) + annotationProcessor(libs.mixin.extras) + + testCompileOnly(libs.mixin) + testCompileOnly(libs.mixin.extras) +} + +extensions.configure("neoForge") { + neoFormVersion = libs.versions.neoform.get() + addModdingDependenciesTo(sourceSets["test"]) + + val at = file("src/main/resources/${props.modId}.cfg") + if (at.exists()) + setAccessTransformers(at) + validateAccessTransformers = true +} diff --git a/core/fabric/build.gradle.kts b/core/fabric/build.gradle.kts index 8cc7a0e..fdcaa71 100644 --- a/core/fabric/build.gradle.kts +++ b/core/fabric/build.gradle.kts @@ -1,28 +1,5 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - alias(libs.plugins.loom) + id("lgbt.greenhouse.gradle.platform.fabric") } -val props = Properties.MODULES["core"]!! - -dependencies { - minecraft(libs.minecraft) - - implementation(libs.fabric.loader) - implementation(libs.fabric.api) - - api(libs.yumi.mc.foundation) -} - -loom { - val aw = file("src/main/resources/${props.modId}.accesswidener") - if (aw.exists()) - accessWidenerPath.set(aw) - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } -} +loom diff --git a/core/neoforge/build.gradle.kts b/core/neoforge/build.gradle.kts index 25262d4..034bff0 100644 --- a/core/neoforge/build.gradle.kts +++ b/core/neoforge/build.gradle.kts @@ -1,28 +1,3 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - alias(libs.plugins.moddev) -} - -val props = Properties.MODULES["core"]!! - -dependencies { - api(libs.yumi.mc.foundation) -} - -neoForge { - version = libs.versions.neoforge.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = project(":core_xplat").file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true - - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } + id("lgbt.greenhouse.gradle.platform.neoforge") } diff --git a/core/xplat/build.gradle.kts b/core/xplat/build.gradle.kts index ff8f10c..fe7d5e7 100644 --- a/core/xplat/build.gradle.kts +++ b/core/xplat/build.gradle.kts @@ -1,29 +1,13 @@ -import lgbt.greenhouse.cowponents.gradle.Properties plugins { - id("conventions.xplat") - alias(libs.plugins.moddev) + id("lgbt.greenhouse.gradle.platform.xplat") + id("lgbt.greenhouse.gradle.base.merge") alias(libs.plugins.mod.publish) - id("conventions.merge") } -val props = Properties.MODULES["core"]!! - dependencies { - compileOnly(libs.mixin) - compileOnly(libs.mixin.extras) - annotationProcessor(libs.mixin.extras) - api(libs.yumi.mc.foundation) "include"(libs.yumi.mc.foundation) } -neoForge { - neoFormVersion = libs.versions.neoform.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true -} +neoForge diff --git a/entities/fabric/build.gradle.kts b/entities/fabric/build.gradle.kts index 9d98f31..525eff1 100644 --- a/entities/fabric/build.gradle.kts +++ b/entities/fabric/build.gradle.kts @@ -1,29 +1,8 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - id("conventions.submodule") - alias(libs.plugins.loom) + id("lgbt.greenhouse.gradle.platform.fabric") + id("lgbt.greenhouse.gradle.module.submodule") } -val props = Properties.MODULES["entities"]!! - dependencies { - minecraft(libs.minecraft) - - implementation(libs.fabric.loader) - implementation(libs.fabric.api) - "localCompile"(project(":extensions_fabric")) } - -loom { - val aw = file("src/main/resources/${props.modId}.classtweaker") - if (aw.exists()) - accessWidenerPath.set(aw) - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } -} diff --git a/entities/neoforge/build.gradle.kts b/entities/neoforge/build.gradle.kts index 6ccd3c0..cb41b91 100644 --- a/entities/neoforge/build.gradle.kts +++ b/entities/neoforge/build.gradle.kts @@ -1,29 +1,9 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - id("conventions.submodule") - alias(libs.plugins.moddev) + id("lgbt.greenhouse.gradle.platform.neoforge") + id("lgbt.greenhouse.gradle.module.submodule") } -val props = Properties.MODULES["entities"]!! dependencies { "localCompile"(project(":extensions_neoforge")) } - -neoForge { - version = libs.versions.neoforge.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = project(":entities_xplat").file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true - - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } -} diff --git a/entities/xplat/build.gradle.kts b/entities/xplat/build.gradle.kts index e5c5837..2a1bd3f 100644 --- a/entities/xplat/build.gradle.kts +++ b/entities/xplat/build.gradle.kts @@ -1,28 +1,9 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.xplat") - id("conventions.submodule") - alias(libs.plugins.moddev) - id("conventions.merge") + id("lgbt.greenhouse.gradle.platform.xplat") + id("lgbt.greenhouse.gradle.base.api") + id("lgbt.greenhouse.gradle.module.submodule") } -val props = Properties.MODULES["entities"]!! - dependencies { - compileOnly(libs.mixin) - compileOnly(libs.mixin.extras) - annotationProcessor(libs.mixin.extras) - "localCompile"(project(":extensions_xplat")) } - -neoForge { - neoFormVersion = libs.versions.neoform.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true -} diff --git a/extensions/fabric/build.gradle.kts b/extensions/fabric/build.gradle.kts index 68cefd1..72b81be 100644 --- a/extensions/fabric/build.gradle.kts +++ b/extensions/fabric/build.gradle.kts @@ -1,27 +1,4 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - id("conventions.submodule") - alias(libs.plugins.loom) -} - -val props = Properties.MODULES["extensions"]!! - -dependencies { - minecraft(libs.minecraft) - - implementation(libs.fabric.loader) - implementation(libs.fabric.api) -} - -loom { - val aw = file("src/main/resources/${props.modId}.accesswidener") - if (aw.exists()) - accessWidenerPath.set(aw) - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } + id("lgbt.greenhouse.gradle.platform.fabric") + id("lgbt.greenhouse.gradle.module.submodule") } diff --git a/extensions/neoforge/build.gradle.kts b/extensions/neoforge/build.gradle.kts index 7d3e8e6..9a8d082 100644 --- a/extensions/neoforge/build.gradle.kts +++ b/extensions/neoforge/build.gradle.kts @@ -1,25 +1,4 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.loader") - id("conventions.submodule") - alias(libs.plugins.moddev) -} - -val props = Properties.MODULES["extensions"]!! - -neoForge { - version = libs.versions.neoforge.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = project(":extensions_xplat").file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true - - mods { - register(props.modId) { - sourceSet(sourceSets["main"]) - } - } + id("lgbt.greenhouse.gradle.platform.neoforge") + id("lgbt.greenhouse.gradle.module.submodule") } diff --git a/extensions/xplat/build.gradle.kts b/extensions/xplat/build.gradle.kts index a22e9e8..81238bd 100644 --- a/extensions/xplat/build.gradle.kts +++ b/extensions/xplat/build.gradle.kts @@ -1,26 +1,6 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.xplat") - id("conventions.submodule") - alias(libs.plugins.moddev) - id("conventions.merge") -} - -val props = Properties.MODULES["extensions"]!! - -dependencies { - compileOnly(libs.mixin) - compileOnly(libs.mixin.extras) - annotationProcessor(libs.mixin.extras) -} - -neoForge { - neoFormVersion = libs.versions.neoform.get() - addModdingDependenciesTo(sourceSets["test"]) - - val at = file("src/main/resources/${props.modId}.cfg") - if (at.exists()) - setAccessTransformers(at) - validateAccessTransformers = true + id("lgbt.greenhouse.gradle.platform.xplat") + id("lgbt.greenhouse.gradle.module.submodule") + id("lgbt.greenhouse.gradle.base.api") + id("lgbt.greenhouse.gradle.base.merge") } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 20d3967..85d7a19 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ neoforge = "26.1.2.42-beta" yumi-mc-foundation = "1.0.0+26.1" # Gradle -loom = "1.15.+" +loom = "1.16.+" moddev = "2.0.141" mod-publish = "1.1.0" diff --git a/test/fabric/build.gradle.kts b/test/fabric/build.gradle.kts index ec3a30f..9194ce1 100644 --- a/test/fabric/build.gradle.kts +++ b/test/fabric/build.gradle.kts @@ -1,31 +1,23 @@ import lgbt.greenhouse.cowponents.gradle.Properties plugins { - id("conventions.loader") - alias(libs.plugins.loom) + id("lgbt.greenhouse.gradle.platform.fabric") } -val props = Properties.MODULES["test"]!! +val props = project.ext["props"] as Properties.ModuleProperties dependencies { - minecraft(libs.minecraft) - - implementation(libs.fabric.loader) - implementation(libs.fabric.api) - testRuntimeOnly(libs.mod.menu) implementation(project(":core_fabric")) - implementation(project(":extensions_fabric")) + implementation(project(":entities_neoforge")) implementation(project(":entities_fabric")) + implementation(project(":extensions_fabric")) } loom { - val aw = file("src/main/resources/${props.modId}.accesswidener") - if (aw.exists()) - accessWidenerPath.set(aw) mods { - register(props.modId) { + named(props.modId) { sourceSet(sourceSets["test"]) } } diff --git a/test/neoforge/build.gradle.kts b/test/neoforge/build.gradle.kts index 7802b7f..de0746a 100644 --- a/test/neoforge/build.gradle.kts +++ b/test/neoforge/build.gradle.kts @@ -1,32 +1,26 @@ import lgbt.greenhouse.cowponents.gradle.Properties plugins { - id("conventions.loader") - alias(libs.plugins.moddev) + id("lgbt.greenhouse.gradle.platform.neoforge") } -val props = Properties.MODULES["test"]!! +val props = project.ext["props"] as Properties.ModuleProperties dependencies { - implementation(libs.yumi.mc.foundation) - implementation(project(":core_neoforge")) implementation(project(":block_entities_neoforge")) - implementation(project(":extensions_neoforge")) implementation(project(":entities_neoforge")) + implementation(project(":extensions_neoforge")) } neoForge { - version = libs.versions.neoforge.get() - addModdingDependenciesTo(sourceSets["test"]) - val at = project(":test_xplat").file("src/test/resources/${props.modId}.cfg") if (at.exists()) setAccessTransformers(at) validateAccessTransformers = true mods { - register(props.modId + "_test") { + named(props.modId) { sourceSet(sourceSets["test"]) } } diff --git a/test/xplat/build.gradle.kts b/test/xplat/build.gradle.kts index 320093e..15bc9be 100644 --- a/test/xplat/build.gradle.kts +++ b/test/xplat/build.gradle.kts @@ -1,34 +1,10 @@ -import lgbt.greenhouse.cowponents.gradle.Properties - plugins { - id("conventions.xplat") - alias(libs.plugins.moddev) + id("lgbt.greenhouse.gradle.platform.xplat") } -val props = Properties.MODULES["test"]!! - dependencies { - testCompileOnly(libs.mixin) - testCompileOnly(libs.mixin.extras) - testAnnotationProcessor(libs.mixin.extras) - testCompileOnly(project(":core_xplat")) - testCompileOnly(project(":extensions_xplat")) + testCompileOnly(project(":block_entities_xplat")) testCompileOnly(project(":entities_xplat")) -} - -neoForge { - neoFormVersion = libs.versions.neoform.get() - addModdingDependenciesTo(sourceSets["test"]) - - val ats = mutableSetOf() - - for (m in Properties.MODULES) { - val at = file("../../${m.key}/xplat/src/main/resources/${m.value.modId}.cfg") - if (at.exists()) - ats.add(at) - } - - setAccessTransformers(ats) - validateAccessTransformers = true + testCompileOnly(project(":extensions_xplat")) } -- 2.51.2