From c534ef79ef747dbcb4b9a854cbe5e5bc26eaf72b Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Sun, 10 Mar 2024 22:06:49 -0400 Subject: [PATCH 1/5] Refactor: NeoForge --- neoforge/build.gradle.kts | 4 ++++ .../src/main/kotlin/com/lambda/neoforge/LambdaNeoForge.kt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index 417790b88..4cfad1bf0 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -1,5 +1,6 @@ val neoVersion = property("neo_version").toString() val kotlinForgeVersion = property("kotlin_forge_version").toString() +val architecturyVersion = property("architectury_version").toString() val mixinExtrasVersion = property("mixinextras_version").toString() architectury { @@ -42,6 +43,9 @@ dependencies { // NeoForge API neoForge("net.neoforged:neoforge:$neoVersion") + // Architectury API + modApi("dev.architectury:architectury-neoforge:$architecturyVersion") + // Add dependencies on the required Kotlin modules. // includeLib(...) diff --git a/neoforge/src/main/kotlin/com/lambda/neoforge/LambdaNeoForge.kt b/neoforge/src/main/kotlin/com/lambda/neoforge/LambdaNeoForge.kt index 491132500..971f595b8 100644 --- a/neoforge/src/main/kotlin/com/lambda/neoforge/LambdaNeoForge.kt +++ b/neoforge/src/main/kotlin/com/lambda/neoforge/LambdaNeoForge.kt @@ -10,6 +10,6 @@ import com.lambda.Lambda.VERSION object LambdaNeoForge { init { Lambda.initialize() - LOG.info("$MOD_NAME Fabric $VERSION initialized.") + LOG.info("$MOD_NAME NeoForge $VERSION initialized.") } } From 2a43a0f4c9e1534b494f0385f6ec2ce6ff570905 Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:49:43 -0400 Subject: [PATCH 2/5] Feature: Quilt --- build.gradle.kts | 15 ++- common/build.gradle.kts | 7 +- .../kotlin/com/lambda/util/FolderRegister.kt | 4 +- fabric/build.gradle.kts | 17 +++- forge/build.gradle.kts | 2 +- gradle.properties | 5 + neoforge/build.gradle.kts | 2 +- quilt/build.gradle.kts | 99 +++++++++++++++++++ quilt/gradle.properties | 1 + .../com/lambda/fabric/LoaderInfoImpl.kt | 11 +++ .../kotlin/com/lambda/quilt/LambdaQuilt.kt | 17 ++++ .../kotlin/com/lambda/quilt/LoaderInfoImpl.kt | 12 +++ quilt/src/main/resources/quilt.mod.json | 53 ++++++++++ settings.gradle.kts | 1 + 14 files changed, 234 insertions(+), 12 deletions(-) create mode 100644 quilt/build.gradle.kts create mode 100644 quilt/gradle.properties create mode 100644 quilt/src/main/kotlin/com/lambda/fabric/LoaderInfoImpl.kt create mode 100644 quilt/src/main/kotlin/com/lambda/quilt/LambdaQuilt.kt create mode 100644 quilt/src/main/kotlin/com/lambda/quilt/LoaderInfoImpl.kt create mode 100644 quilt/src/main/resources/quilt.mod.json diff --git a/build.gradle.kts b/build.gradle.kts index 0823ac86c..59e17e822 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,8 +26,14 @@ subprojects { apply(plugin = "org.jetbrains.dokka") dependencies { - "minecraft"("com.mojang:minecraft:$minecraftVersion") - "mappings"("net.fabricmc:yarn:$yarnMappings:v2") + if (path == ":quilt") { + "minecraft"("com.mojang:minecraft:1.20.2") + "mappings"("net.fabricmc:yarn:1.20.2+build.3:v2") + } + else { + "minecraft"("com.mojang:minecraft:$minecraftVersion") + "mappings"("net.fabricmc:yarn:$yarnMappings:v2") + } } if (path == ":common") return@subprojects @@ -62,6 +68,7 @@ allprojects { apply(plugin = "architectury-plugin") apply(plugin = "maven-publish") apply(plugin = "org.jetbrains.kotlin.jvm") + base.archivesName.set(modId) group = mavenGroup version = modVersion @@ -78,7 +85,9 @@ allprojects { } java { - // withSourcesJar() // Uncomment this line when the plugin system is ready + // Uncomment these lines when the plugin system is ready + // withSourcesJar() + // withJavadocJar() sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 diff --git a/common/build.gradle.kts b/common/build.gradle.kts index ba93c4e04..1b0003e80 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,9 +1,9 @@ val fabricLoaderVersion = property("fabric_loader_version").toString() val fabricKotlinVersion = property("fabric_kotlin_version").toString() val mixinExtrasVersion = property("mixinextras_version").toString() -val kotlinXCoroutineVersion = property("kotlinx_coroutines_version").toString() +val architecturyVersion = property("architectury_version").toString() -architectury { common("fabric", "forge", "neoforge") } +architectury { common("fabric", "forge", "neoforge", "quilt") } loom { silentMojangMappingsLicense() @@ -23,6 +23,9 @@ dependencies { // Do NOT use other classes from fabric loader modImplementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") + // Remove the following line if you don't want to depend on the API + modApi("dev.architectury:architectury:$architecturyVersion") + // Add dependencies on the required Kotlin modules. modImplementation("net.fabricmc:fabric-language-kotlin:$fabricKotlinVersion") implementation("org.reflections:reflections:0.10.2") diff --git a/common/src/main/kotlin/com/lambda/util/FolderRegister.kt b/common/src/main/kotlin/com/lambda/util/FolderRegister.kt index 553751c58..ab99ab47f 100644 --- a/common/src/main/kotlin/com/lambda/util/FolderRegister.kt +++ b/common/src/main/kotlin/com/lambda/util/FolderRegister.kt @@ -1,10 +1,10 @@ package com.lambda.util -import com.lambda.Lambda.mc +import dev.architectury.platform.Platform import java.io.File object FolderRegister { - val minecraft: File = mc.runDirectory + val minecraft: File = Platform.getGameFolder().toFile() val lambda: File = File(minecraft, "lambda") val config: File = File(lambda, "config") } diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 21418d2c4..ea993a545 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -1,6 +1,7 @@ val fabricLoaderVersion = property("fabric_loader_version").toString() val fabricApiVersion = property("fabric_api_version").toString() val fabricKotlinVersion = property("fabric_kotlin_version").toString() +val architecturyVersion = property("architectury_version").toString() architectury { platformSetupLoomIde() @@ -37,7 +38,12 @@ fun DependencyHandlerScope.setupConfigurations() { dependencies { // Fabric API (Do not touch) modImplementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") - modImplementation("net.fabricmc.fabric-api:fabric-api:$fabricApiVersion") + modApi("net.fabricmc.fabric-api:fabric-api:$fabricApiVersion") + + // Remove the following line if you don't want to depend on the API + modApi("dev.architectury:architectury-fabric:$architecturyVersion") + + // Kotlin for Fabric modImplementation("net.fabricmc:fabric-language-kotlin:$fabricKotlinVersion") // Add dependencies on the required Kotlin modules. @@ -49,7 +55,7 @@ dependencies { // Common (Do not touch) common(project(":common", configuration = "namedElements")) { isTransitive = false } - shadowCommon(project(path = ":common", configuration = "transformProductionFabric")) { isTransitive = false } + shadowCommon(project(":common", configuration = "transformProductionFabric")) { isTransitive = false } // Finish the configuration setupConfigurations() @@ -57,10 +63,15 @@ dependencies { tasks { processResources { + inputs.property("group", project.group) inputs.property("version", project.version) + filesMatching("fabric.mod.json") { expand(getProperties()) - expand(mutableMapOf("version" to project.version)) + expand(mutableMapOf( + "group" to project.group, + "version" to project.version + )) } } diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts index 259cec3c7..38c4b9998 100644 --- a/forge/build.gradle.kts +++ b/forge/build.gradle.kts @@ -64,7 +64,7 @@ dependencies { // Forge API forge("net.minecraftforge:forge:$forgeVersion") - // Architectury API + // Remove the following line if you don't want to depend on the API modApi("dev.architectury:architectury-forge:$architecturyVersion") // Add dependencies on the required Kotlin modules. diff --git a/gradle.properties b/gradle.properties index 0dfc06a09..3e6e6b666 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,6 +27,11 @@ kotlin_forge_version=4.10.0 # NeoForge https://neoforged.net neo_version=20.4.196 +# Quilt https://quiltmc.org/ +quilt_version=0.24.0 +quilted_fabric_version=8.0.0-alpha.4+0.91.6-1.20.2 +kotlin_quilt_version=3.0.0+kt.1.9.22+flk.1.10.17 + # Kotlin https://kotlinlang.org/ kotlin.code.style=official diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index 4cfad1bf0..8761957aa 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -43,7 +43,7 @@ dependencies { // NeoForge API neoForge("net.neoforged:neoforge:$neoVersion") - // Architectury API + // Remove the following line if you don't want to depend on the API modApi("dev.architectury:architectury-neoforge:$architecturyVersion") // Add dependencies on the required Kotlin modules. diff --git a/quilt/build.gradle.kts b/quilt/build.gradle.kts new file mode 100644 index 000000000..b1d3e7e5e --- /dev/null +++ b/quilt/build.gradle.kts @@ -0,0 +1,99 @@ +val quiltVersion = property("quilt_version").toString() +val quiltedFabricVersion = property("quilted_fabric_version").toString() +val kotlinQuiltVersion = property("kotlin_quilt_version").toString() +val architecturyVersion = /*property("architectury_version").toString()*/ "10.1.19" +val kotlinxCoroutineVersion = property("kotlinx_coroutines_version").toString() + +architectury { + platformSetupLoomIde() + loader("quilt") +} + +base.archivesName.set("${base.archivesName.get()}-quilt") + +loom { + accessWidenerPath.set(project(":common").loom.accessWidenerPath) + enableTransitiveAccessWideners.set(true) + + mods { + register("quilt") { + sourceSet("main", project(":quilt")) + } + } +} + +repositories { + maven("https://maven.quiltmc.org/repository/release/") +} + +val common: Configuration by configurations.creating { + configurations.compileClasspath.get().extendsFrom(this) + configurations.runtimeClasspath.get().extendsFrom(this) + configurations["developmentQuilt"].extendsFrom(this) +} + +val includeLib: Configuration by configurations.creating +val includeMod: Configuration by configurations.creating + +fun DependencyHandlerScope.setupConfigurations() { + includeLib.dependencies.forEach { + implementation(it) + include(it) + } + + includeMod.dependencies.forEach { + modImplementation(it) + include(it) + } +} + +dependencies { + // Quilt Loader + modImplementation("org.quiltmc:quilt-loader:$quiltVersion") + + // Quilted Fabric API + modApi("org.quiltmc.quilted-fabric-api:quilted-fabric-api:$quiltedFabricVersion") + + // Remove the following line if you don't want to depend on the API + modApi("dev.architectury:architectury-fabric:$architecturyVersion") { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } + + // Kotlin for Quilt + modImplementation("org.quiltmc.quilt-kotlin-libraries:quilt-kotlin-libraries:$kotlinQuiltVersion") + + // Add dependencies on the required Kotlin modules. + includeLib("org.reflections:reflections:0.10.2") + includeLib("org.javassist:javassist:3.27.0-GA") + + // Add mods to the mod jar + // includeMod(...) + + + // Common (Do not touch) + common(project(":common", configuration = "namedElements")) { isTransitive = false } + shadowCommon(project(":common", configuration = "transformProductionQuilt")) { isTransitive = false } + + // Finish the configuration + setupConfigurations() +} + +tasks { + processResources { + inputs.property("group", project.group) + inputs.property("version", project.version) + + filesMatching("quilt.mod.json") { + expand(getProperties()) + expand(mutableMapOf( + "group" to project.group, + "version" to project.version + )) + } + } + + remapJar { + injectAccessWidener.set(true) + } +} diff --git a/quilt/gradle.properties b/quilt/gradle.properties new file mode 100644 index 000000000..4fb20b837 --- /dev/null +++ b/quilt/gradle.properties @@ -0,0 +1 @@ +loom.platform=quilt diff --git a/quilt/src/main/kotlin/com/lambda/fabric/LoaderInfoImpl.kt b/quilt/src/main/kotlin/com/lambda/fabric/LoaderInfoImpl.kt new file mode 100644 index 000000000..a016b491d --- /dev/null +++ b/quilt/src/main/kotlin/com/lambda/fabric/LoaderInfoImpl.kt @@ -0,0 +1,11 @@ +package com.lambda.fabric + +import net.fabricmc.loader.api.FabricLoader + +object LoaderInfoImpl { + @JvmStatic + fun getVersion(): String = + FabricLoader.getInstance() + .getModContainer("lambda").orElseThrow() + .metadata.version.friendlyString +} \ No newline at end of file diff --git a/quilt/src/main/kotlin/com/lambda/quilt/LambdaQuilt.kt b/quilt/src/main/kotlin/com/lambda/quilt/LambdaQuilt.kt new file mode 100644 index 000000000..7c4beaf68 --- /dev/null +++ b/quilt/src/main/kotlin/com/lambda/quilt/LambdaQuilt.kt @@ -0,0 +1,17 @@ +package com.lambda.quilt + +import com.lambda.Lambda +import com.lambda.Lambda.LOG +import com.lambda.Lambda.MOD_NAME +import com.lambda.Lambda.VERSION +import org.quiltmc.loader.api.ModContainer +import org.quiltmc.qsl.base.api.entrypoint.ModInitializer + +// Cannot use `object` because Quilt has a class fetish (object is a class in Kotlin with a private constructor) +class LambdaQuilt : ModInitializer { + // If the mod is marked as non nullable, Quilt will panic because it can't find the instrisic library + override fun onInitialize(mod: ModContainer?) { + Lambda.initialize() + LOG.info("$MOD_NAME Quilt $VERSION initialized.") + } +} diff --git a/quilt/src/main/kotlin/com/lambda/quilt/LoaderInfoImpl.kt b/quilt/src/main/kotlin/com/lambda/quilt/LoaderInfoImpl.kt new file mode 100644 index 000000000..82e10a526 --- /dev/null +++ b/quilt/src/main/kotlin/com/lambda/quilt/LoaderInfoImpl.kt @@ -0,0 +1,12 @@ +package com.lambda.quilt + +import org.quiltmc.loader.api.QuiltLoader + + +object LoaderInfoImpl { + @JvmStatic + fun getVersion(): String = + QuiltLoader + .getModContainer("lambda").orElseThrow() + .metadata().version().raw() +} diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json new file mode 100644 index 000000000..c274eb0ec --- /dev/null +++ b/quilt/src/main/resources/quilt.mod.json @@ -0,0 +1,53 @@ +{ + "schema_version": 1, + "mixin": [ + "lambda.mixins.common.json" + ], + "quilt_loader": { + "group": "${group}", + "id": "${mod_id}", + "version": "${mod_version}", + "metadata": { + "name": "Lambda", + "description": "${mod_description}", + "contributors": { + "Constructor": "Owner" + }, + "contact": { + "sources": "https://github.com/lambda-client/lambda" + }, + "icon": "assets/lambda/lambda.png" + }, + "intermediate_mappings": "net.fabricmc:intermediary", + "entrypoints": { + "init": [ + "com.lambda.quilt.LambdaQuilt" + ] + }, + "depends": [ + { + "id": "quilt_loader", + "version": "*" + }, + { + "id": "quilt_base", + "version": "*" + }, + { + "id": "qkl", + "version": ">=3.0.0" + }, + { + "id": "minecraft", + "version": ">=1.20.1" + }, + { + "id": "architectury", + "version": ">=9.1.12" + } + ] + }, + "minecraft": { + "environment": "*" + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 85b87a908..b3e612ff9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,3 +13,4 @@ include("common") include("fabric") include("forge") include("neoforge") +include("quilt") From e2072f67f3b14977fc8a5d720e76dc159ca87bdc Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:01:11 -0400 Subject: [PATCH 3/5] Fix: NeoForge Architectury dependencies --- neoforge/src/main/resources/META-INF/mods.toml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml index fe30883ac..b0abbeebb 100644 --- a/neoforge/src/main/resources/META-INF/mods.toml +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -34,3 +34,11 @@ type = "required" versionRange = "[4,)" ordering = "AFTER" side = "CLIENT" + +[[dependencies.lambda]] +modId = "architectury" +mandatory = true +type = "required" +versionRange = "[10.1.19,)" +ordering = "AFTER" +side = "CLIENT" From 70070ead4259d32ec5ae9cf8d7b857ace69cf277 Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:04:22 -0400 Subject: [PATCH 4/5] Fix: Fabric Architectury dependencies --- fabric/src/main/resources/fabric.mod.json | 1 + 1 file changed, 1 insertion(+) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f641d1196..21b055a12 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -28,6 +28,7 @@ "depends": { "fabricloader": ">=0.14.24", "fabric-api": ">=0.83.0+1.20", + "architectury": ">=9.0.6", "minecraft": ">=1.20.0", "java": ">=17", "fabric-language-kotlin": ">=${fabric_kotlin_version}" From 5dd0f021311d0ab1b93f7d5c9dfbbfb99a5e6177 Mon Sep 17 00:00:00 2001 From: Kamigen <46357922+Edouard127@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:05:57 -0400 Subject: [PATCH 5/5] Fix: Forge Architectury dependencies --- forge/src/main/resources/META-INF/mods.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 598fb04c1..a38474502 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -32,3 +32,10 @@ mandatory = true versionRange = "[4,)" ordering = "AFTER" side = "CLIENT" + +[[dependencies.lambda]] +modId = "architectury" +mandatory = true +versionRange = "[7.1.86,)" +ordering = "AFTER" +side = "CLIENT"