diff --git a/build.gradle.kts b/build.gradle.kts index 9b24761..1dc6513 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,110 +1,146 @@ +@file:Suppress("UnstableApiUsage", "PropertyName") + +import org.polyfrost.gradle.util.noServerRunConfigs import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import cc.polyfrost.gradle.util.noServerRunConfigs -import cc.polyfrost.gradle.util.setJvmDefault +// Adds support for kotlin, and adds the Polyfrost Gradle Toolkit +// which we use to prepare the environment. plugins { kotlin("jvm") - id("cc.polyfrost.multi-version") - id("cc.polyfrost.defaults.repo") - id("cc.polyfrost.defaults.java") - id("cc.polyfrost.defaults.loom") + id("org.polyfrost.multi-version") + id("org.polyfrost.defaults.repo") + id("org.polyfrost.defaults.java") + id("org.polyfrost.defaults.loom") id("com.github.johnrengelman.shadow") - id("net.kyori.blossom") version "1.3.0" + id("net.kyori.blossom") version "1.3.1" id("signing") java } +// Gets the mod name, version and id from the `gradle.properties` file. val mod_name: String by project val mod_version: String by project val mod_id: String by project +val mod_archives_name: String by project +// Sets up the variables for when we preprocess to other Minecraft versions. preprocess { vars.put("MODERN", if (project.platform.mcMinor >= 16) 1 else 0) } +// Replaces the variables in `ExampleMod.java` to the ones specified in `gradle.properties`. blossom { replaceToken("@VER@", mod_version) replaceToken("@NAME@", mod_name) replaceToken("@ID@", mod_id) } +// Sets the mod version to the one specified in `gradle.properties`. Make sure to change this following semver! version = mod_version +// Sets the group, make sure to change this to your own. It can be a website you own backwards or your GitHub username. +// e.g. com.github. or com. group = "dev.isxander" + +// Sets the name of the output jar (the one you put in your mods folder and send to other people) +// It outputs all versions of the mod into the `build` directory. base { - archivesName.set("$mod_name-$platform") + archivesName.set("$mod_archives_name-$platform") } + +// Configures the Polyfrost Loom, our plugin fork to easily set up the programming environment. loom { + // Removes the server configs from IntelliJ IDEA, leaving only client runs. + // If you're developing a server-side mod, you can remove this line. noServerRunConfigs() + + // Adds the tweak class if we are building legacy version of forge as per the documentation (https://docs.polyfrost.org) if (project.platform.isLegacyForge) { - launchConfigs.named("client") { - arg("--tweakClass", "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker") + runConfigs { + "client" { + programArgs("--tweakClass", "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker") + property("mixin.debug.export", "true") + } } } } -tasks.compileKotlin.setJvmDefault(if (platform.mcVersion >= 11400) "all" else "all-compatibility") +// Creates the shade/shadow configuration, so we can include libraries inside our mod, rather than having to add them separately. val shade: Configuration by configurations.creating { configurations.implementation.get().extendsFrom(this) } +// Configures the output directory for when building from the `src/resources` directory. sourceSets { main { 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.cc/releases") + maven("https://repo.polyfrost.org/releases") } +// Configures the libraries/dependencies for your mod. dependencies { + // Adds the OneConfig library, so we can develop with it. + modCompileOnly("cc.polyfrost:oneconfig-$platform:0.2.1-alpha+") + + modRuntimeOnly("me.djtheredstoner:DevAuth-${if (platform.isFabric) "fabric" else if (platform.isLegacyForge) "forge-legacy" else "forge-latest"}:1.1.2") + + // If we are building for legacy forge, includes the launch wrapper with `shade` as we configured earlier. if (platform.isLegacyForge) { - runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.0") + shade("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-beta+") } - compileOnly("cc.polyfrost:oneconfig-1.8.9-forge:0.2.0-alpha+") - shade("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-beta+") } -tasks.processResources { - inputs.property("id", mod_id) - inputs.property("name", mod_name) - val java = if (project.platform.mcMinor >= 18) { - 17 - } else { - if (project.platform.mcMinor == 17) 16 else 8 - } - val compatLevel = "JAVA_${java}" - inputs.property("java", java) - inputs.property("java_level", compatLevel) - inputs.property("version", mod_version) - inputs.property("mcVersionStr", project.platform.mcVersionStr) - filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) { - expand( - mapOf( - "id" to mod_id, - "name" to mod_name, - "java" to java, - "java_level" to compatLevel, - "version" to mod_version, - "mcVersionStr" to project.platform.mcVersionStr +tasks { + // Processes the `src/resources/mcmod.info or fabric.mod.json` and replaces + // the mod id, name and version with the ones in `gradle.properties` + processResources { + inputs.property("id", mod_id) + inputs.property("name", mod_name) + val java = if (project.platform.mcMinor >= 18) { + 17 // If we are playing on version 1.18, set the java version to 17 + } else { + // Else if we are playing on version 1.17, use java 16. + if (project.platform.mcMinor == 17) + 16 + else + 8 // For all previous versions, we **need** java 8 (for Forge support). + } + val compatLevel = "JAVA_${java}" + inputs.property("java", java) + inputs.property("java_level", compatLevel) + inputs.property("version", mod_version) + inputs.property("mcVersionStr", project.platform.mcVersionStr) + filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) { + expand( + mapOf( + "id" to mod_id, + "name" to mod_name, + "java" to java, + "java_level" to compatLevel, + "version" to mod_version, + "mcVersionStr" to project.platform.mcVersionStr + ) ) - ) - } - filesMatching("fabric.mod.json") { - expand( - mapOf( - "id" to mod_id, - "name" to mod_name, - "java" to java, - "java_level" to compatLevel, - "version" to mod_version, - "mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x" + } + filesMatching("fabric.mod.json") { + expand( + mapOf( + "id" to mod_id, + "name" to mod_name, + "java" to java, + "java_level" to compatLevel, + "version" to mod_version, + "mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x" + ) ) - ) + } } -} -tasks { + // Configures the resources to include if we are building for forge or fabric. withType(Jar::class.java) { if (project.platform.isFabric) { exclude("mcmod.info", "mods.toml") @@ -117,24 +153,28 @@ tasks { } } } + + // Configures our shadow/shade configuration, so we can + // include some dependencies within our mod jar file. named("shadowJar") { - archiveClassifier.set("dev") + archiveClassifier.set("dev") // TODO: machete gets confused by the `dev` prefix. configurations = listOf(shade) duplicatesStrategy = DuplicatesStrategy.EXCLUDE } + remapJar { - input.set(shadowJar.get().archiveFile) + inputFile.set(shadowJar.get().archiveFile) archiveClassifier.set("") } + jar { - manifest { - attributes( - mapOf( - "ModSide" to "CLIENT", - "ForceLoadAsMod" to true, - "TweakOrder" to "0", - "TweakClass" to "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker" - ) + // Sets the jar manifest attributes. + if (platform.isLegacyForge) { + manifest.attributes += mapOf( + "ModSide" to "CLIENT", // We aren't developing a server-side mod, so this is fine. + "ForceLoadAsMod" to true, // We want to load this jar as a mod, so we force Forge to do so. + "TweakOrder" to "0", // Makes sure that the OneConfig launch wrapper is loaded as soon as possible. + "TweakClass" to "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker" // Loads the OneConfig launch wrapper. ) } dependsOn(shadowJar) diff --git a/gradle.properties b/gradle.properties index 397e70b..e83a7f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,14 @@ kotlin.code.style=official -mod_version=3.2.0-beta2 +mod_version=3.1.2 mod_id=behindyouv3 mod_name=BehindYouV3 +mod_archives_name=BehindYouV3 +# Gradle Configuration -- DO NOT TOUCH THESE VALUES. +polyfrost.defaults.loom=1 org.gradle.daemon=true org.gradle.parallel=true org.gradle.configureoncommand=true org.gradle.parallel.threads=4 -org.gradle.jvmargs=-Xmx3G -polyfrost.defaults.loom=0 \ No newline at end of file +org.gradle.jvmargs=-Xmx2G \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 070cb70..e411586 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/root.gradle.kts b/root.gradle.kts index 9f578d5..1fec31f 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -1,12 +1,11 @@ plugins { - kotlin("jvm") version "1.6.10" apply false - id("net.kyori.blossom") version "1.3.0" apply false + kotlin("jvm") version "1.8.22" apply false + id("org.polyfrost.multi-version.root") id("com.github.johnrengelman.shadow") version "7.1.2" apply false - id("cc.polyfrost.multi-version.root") } preprocess { "1.12.2-forge"(11202, "srg") { - "1.8.9-forge"(10809, "srg", file("versions/1.12.2-1.8.9.txt")) + "1.8.9-forge"(10809, "srg") } } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 0d44d58..5c72efc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,27 +1,31 @@ +@file:Suppress("PropertyName") + pluginManagement { repositories { gradlePluginPortal() - maven("https://repo.polyfrost.cc/releases") + mavenCentral() + maven("https://repo.polyfrost.org/releases") // Adds the Polyfrost maven repository to get Polyfrost Gradle Toolkit } plugins { - val egtVersion = "0.1.28" - id("cc.polyfrost.multi-version.root") version egtVersion + val pgtVersion = "0.2.9" // Sets the default versions for Polyfrost Gradle Toolkit + id("org.polyfrost.multi-version.root") version pgtVersion } } val mod_name: String by settings +// Configures the root project Gradle name based on the value in `gradle.properties` rootProject.name = mod_name rootProject.buildFileName = "root.gradle.kts" +// Adds all of our build target versions to the classpath if we need to add version-specific code. listOf( - "1.8.9-forge", - "1.12.2-forge", + "1.8.9-forge", // Update this if you want to remove/add a version, along with `build.gradle.kts` and `root.gradle.kts`. + "1.12.2-forge" ).forEach { version -> include(":$version") project(":$version").apply { projectDir = file("versions/$version") buildFileName = "../../build.gradle.kts" } - } \ No newline at end of file diff --git a/versions/1.12.2-1.8.9.txt b/versions/1.12.2-1.8.9.txt deleted file mode 100644 index e69de29..0000000