From 40eb11ce049d4d05f17afeb0c3d095e94fd21a94 Mon Sep 17 00:00:00 2001 From: Deftu Date: Thu, 2 Jan 2025 20:37:22 +0200 Subject: [PATCH] Bring up to speed with the OneConfig example mod --- .github/workflows/build.yml | 8 ++-- build.gradle.kts | 78 +++++++++++++++++-------------------- root.gradle.kts | 11 +++++- settings.gradle.kts | 17 +++++--- 4 files changed, 62 insertions(+), 52 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index db54b04..62008db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,17 +19,17 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 10 - name: Set up JDK 17 - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: temurin - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: | ~/.gradle/caches diff --git a/build.gradle.kts b/build.gradle.kts index 400a924..555c3f6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,65 +1,59 @@ @file:Suppress("UnstableApiUsage", "PropertyName") import dev.deftu.gradle.utils.GameSide +import dev.deftu.gradle.utils.MinecraftVersion plugins { java kotlin("jvm") - id("dev.deftu.gradle.multiversion") - id("dev.deftu.gradle.tools") - id("dev.deftu.gradle.tools.resources") - id("dev.deftu.gradle.tools.bloom") - id("dev.deftu.gradle.tools.shadow") - id("dev.deftu.gradle.tools.minecraft.loom") -} - -// Sets up the variables for when we preprocess to other Minecraft versions. -preprocess { - vars.put("MODERN", if (mcData.version.minor >= 16) 1 else 0) + id("dev.deftu.gradle.multiversion") // Applies preprocessing for multiple versions of Minecraft and/or multiple mod loaders. + id("dev.deftu.gradle.tools") // Applies several configurations to things such as the Java version, project name/version, etc. + id("dev.deftu.gradle.tools.resources") // Applies resource processing so that we can replace tokens, such as our mod name/version, in our resources. + id("dev.deftu.gradle.tools.bloom") // Applies the Bloom plugin, which allows us to replace tokens in our source files, such as being able to use `@MOD_VERSION` in our source files. + id("dev.deftu.gradle.tools.shadow") // Applies the Shadow plugin, which allows us to shade our dependencies into our mod JAR. This is NOT recommended for Fabric mods, but we have an *additional* configuration for those! + id("dev.deftu.gradle.tools.ducks") // Creates a ducks source set, which allows us to use theoretical classes which may not exist at runtime (such as things which are in other mods). + id("dev.deftu.gradle.tools.minecraft.loom") // Applies the Loom plugin, which automagically configures Essential's Architectury Loom plugin for you. + id("dev.deftu.gradle.tools.minecraft.releases") // Applies the Minecraft auto-releasing plugin, which allows you to automatically release your mod to CurseForge and Modrinth. } toolkitLoomHelper { - // Adds OneConfig to our project - useOneConfig("1.1.0-alpha.34", "1.0.0-alpha.43", mcData, "commands", "config-impl", "events", "hud", "internal", "ui") - useDevAuth() + useOneConfig { + version = "1.0.0-alpha.49" + loaderVersion = "1.1.0-alpha.35" + + usePolyMixin = true + polyMixinVersion = "0.8.4+build.2" + + applyLoaderTweaker = true + + for (module in arrayOf("commands", "config", "config-impl", "events", "internal", "ui", "utils")) { + +module + } + } - // Removes the server configs from IntelliJ IDEA, leaving only client runs. - // If you're developing a server-side mod, you can remove this line. + // Turns off the server-side run configs, as we're building a client-sided mod. disableRunConfigs(GameSide.SERVER) - // Sets up our Mixin refmap naming + // Defines the name of the Mixin refmap, which is used to map the Mixin classes to the obfuscated Minecraft classes. if (!mcData.isNeoForge) { useMixinRefMap(modData.id) } - // Adds the tweak class if we are building legacy version of forge as per the documentation (https://docs.polyfrost.org) - if (mcData.isLegacyForge) { - useTweaker("org.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker", GameSide.CLIENT) - useForgeMixin(modData.id) // Configures the mixins if we are building for forge, useful for when we are dealing with cross-platform projects. + if (mcData.isForge) { + // Configures the Mixin tweaker if we are building for Forge. + useForgeMixin(modData.id) } } -// Configures the output directory for when building from the `src/resources` directory. -sourceSets { - val dummy by creating - main { - dummy.compileClasspath += compileClasspath - compileClasspath += dummy.output - output.setResourcesDir(java.classesDirectory) - } -} - -// Adds the Polyfrost maven repository so that we can get the libraries necessary to develop the mod. -repositories { - maven("https://repo.polyfrost.org/releases") -} - -// Configures the libraries/dependencies for your mod. dependencies { - // If we are building for legacy forge, includes the launch wrapper with `shade` as we configured earlier. - if (mcData.isLegacyForge) { - compileOnly("org.spongepowered:mixin:0.7.11-SNAPSHOT") - } else if (mcData.isFabric) { - modImplementation("net.fabricmc:fabric-language-kotlin:${mcData.dependencies.fabric.fabricLanguageKotlinVersion}") + // Add Fabric Language Kotlin and (Legacy) Fabric API as dependencies (these are both optional but are particularly useful). + if (mcData.isFabric) { + if (mcData.isLegacyFabric) { + // 1.8.9 - 1.13 + modImplementation("net.legacyfabric.legacy-fabric-api:legacy-fabric-api:${mcData.dependencies.legacyFabric.legacyFabricApiVersion}") + } else { + // 1.16.5+ + modImplementation("net.fabricmc.fabric-api:fabric-api:${mcData.dependencies.fabric.fabricApiVersion}") + } } } diff --git a/root.gradle.kts b/root.gradle.kts index 6ef2f61..c548169 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -3,7 +3,16 @@ plugins { } preprocess { + // Adding new versions/loaders can be done like so: + // For each version, we add a new wrapper around the last from highest to lowest. + // Each mod loader needs to link up to the previous version's mod loader so that the mappings can be processed from the previous version. + // "1.12.2-forge"(11202, "srg") { + // "1.8.9-forge"(10809, "srg") + // } + "1.8.9-forge"(10809, "srg") { "1.8.9-fabric"(10809, "yarn") } -} \ No newline at end of file + + strictExtraMappings.set(true) +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 9f3814a..fbd6c82 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,8 +1,10 @@ +@file:Suppress("PropertyName") + import groovy.lang.MissingPropertyException pluginManagement { repositories { - // Repositories + // Releases maven("https://maven.deftu.dev/releases") maven("https://maven.fabricmc.net") maven("https://maven.architectury.dev/") @@ -15,30 +17,35 @@ pluginManagement { maven("https://maven.deftu.dev/snapshots") mavenLocal() - // Default repositories + // Default gradlePluginPortal() mavenCentral() } plugins { kotlin("jvm") version("2.0.0") - id("dev.deftu.gradle.multiversion-root") version("2.13.0") + id("dev.deftu.gradle.multiversion-root") version("2.18.1") } } val projectName: String = extra["mod.name"]?.toString() ?: throw MissingPropertyException("mod.name has not been set.") + +// Configures the root project Gradle name based on the value in `gradle.properties` rootProject.name = projectName rootProject.buildFileName = "root.gradle.kts" // Adds all of our build target versions to the classpath if we need to add version-specific code. +// Update this list if you want to remove/add a version and/or mod loader. +// The format is: version-modloader (f.ex: 1.8.9-forge, 1.17.1-fabric, etc) +// **REMEMBER TO ALSO UPDATE THE `root.gradle.kts` AND `build.gradle.kts` FILES WITH THE NEW VERSION(S). listOf( "1.8.9-forge", - "1.8.9-fabric" + "1.8.9-fabric", ).forEach { version -> include(":$version") project(":$version").apply { projectDir = file("versions/$version") buildFileName = "../../build.gradle.kts" } -} \ No newline at end of file +}