From e0fd2b2f7ae0249ee374782c83d0714cd36d30af Mon Sep 17 00:00:00 2001 From: Cutiepie <43445785+Ran-Mewo@users.noreply.github.com> Date: Wed, 22 May 2024 21:03:38 +1000 Subject: [PATCH 1/4] =?UTF-8?q?Java=20=CE=A9=20&=20cleanup=20core's=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 122 +++++++++++++++++------------------------- fabric/build.gradle | 4 +- forge/build.gradle | 4 +- neoforge/build.gradle | 4 +- settings.gradle | 6 +++ 5 files changed, 62 insertions(+), 78 deletions(-) diff --git a/build.gradle b/build.gradle index a59d9a744..4a5996226 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,8 @@ plugins { // Architectury is used here only as a replacement for forge's own loom id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false + + id 'xyz.wagyourtail.jvmdowngrader' version '0.4.1' apply true } @@ -27,17 +29,17 @@ def writeBuildGradlePredefine(List mcVers, int mcIndex) StringBuilder sb = new StringBuilder(); sb.append("# DON'T TOUCH THIS FILE, This is handled by the build script\n"); - - + + for (int i = 0; i < mcVers.size(); i++) { String verStr = mcVers[i].replace(".", "_"); sb.append("MC_" + verStr + "=" + i.toString() + "\n"); - + if (mcIndex == i) sb.append("MC_VER=" + i.toString() + "\n"); } - + // Check if this is a development build if (mod_version.toLowerCase().contains("dev")) @@ -73,7 +75,7 @@ forgix { forge { jarLocation = "build/libs/DistantHorizons-forge-${rootProject.versionStr}.jar" } - + if (findProject(":neoforge")) custom { projectName = "neoforge" @@ -102,22 +104,23 @@ subprojects { p -> // Apply plugins apply plugin: "java" apply plugin: "com.github.johnrengelman.shadow" + apply plugin: "xyz.wagyourtail.jvmdowngrader" if (isMinecraftSubProject) apply plugin: "systems.manifold.manifold-gradle-plugin" - + // Apply forge's loom if ( (findProject(":forge") && p == project(":forge")) || - (findProject(":neoforge") && p == project(":neoforge")) - ) - apply plugin: "dev.architectury.loom" + (findProject(":neoforge") && p == project(":neoforge")) + ) + apply plugin: "dev.architectury.loom" // Set the manifold version (may not be required tough) manifold { manifoldVersion = rootProject.manifold_version } - + // set up custom configurations (configurations are a way to handle dependencies) configurations { @@ -173,12 +176,12 @@ subprojects { p -> //=====================// // shared dependencies // //=====================// - + // Manifold if (isMinecraftSubProject) { annotationProcessor("systems.manifold:manifold-preprocessor:${rootProject.manifold_version}") } - + // Log4j // TODO: Change to shadowMe later to work in the standalone jar // We cannot do this now as it would break Quilt @@ -190,7 +193,7 @@ subprojects { p -> forgeShadowMe("org.joml:joml:${rootProject.joml_version}") else implementation("org.joml:joml:${rootProject.joml_version}") - + // JUnit tests implementation("org.junit.jupiter:junit-jupiter:5.8.2") implementation("org.junit.jupiter:junit-jupiter-engine:5.8.2") @@ -200,22 +203,22 @@ subprojects { p -> // Note: MC 1.16 uses 8.2.1, and versions after use 8.5.12 // We cannot relocate this library since we call some MC classes that reference it implementation("it.unimi.dsi:fastutil:${rootProject.fastutil_version}") - - + + // Compression forgeShadowMe("org.lz4:lz4-java:${rootProject.lz4_version}") // LZ4 forgeShadowMe("org.tukaani:xz:${rootProject.xz_version}") // LZMA // Sqlite Database forgeShadowMe("org.xerial:sqlite-jdbc:${rootProject.sqlite_jdbc_version}") - + // NightConfig (includes Toml & Json) forgeShadowMe("com.electronwill.night-config:toml:${rootProject.nightconfig_version}") forgeShadowMe("com.electronwill.night-config:json:${rootProject.nightconfig_version}") // SVG (not needed atm) // forgeShadowMe("com.formdev:svgSalamander:${rootProject.svgSalamander_version}") - + // Netty // Breaks 1.16.5 //forgeShadowMe("io.netty:netty-all:${rootProject.netty_version}") @@ -224,9 +227,9 @@ subprojects { p -> forgeShadowMe("org.lwjgl:lwjgl-jawt:${rootProject.lwjgl_version}") { exclude group: "org.lwjgl", module: "lwjgl" // This module is imported by Minecraft so exclude it } - - - + + + //==========================// // conditional dependencies // //==========================// @@ -276,7 +279,7 @@ subprojects { p -> if (isMinecraftSubProject && p != project(":common")) { configurations.push(project.configurations.shadowCommon) // Shadow the common subproject relocate "com.seibel.distanthorizons.common", "loaderCommon.${p.name}.com.seibel.distanthorizons.common" // Move the loader files to a different location - + if (findProject(":fabricLike") && p != project(":fabricLike")) { configurations.push(project.configurations.shadowFabricLike) // Shadow the fabricLike subproject relocate "com.seibel.distanthorizons.fabriclike", "loaderCommon.${p.name}.com.seibel.distanthorizons.fabriclike" // Move the loader files to a different location @@ -290,11 +293,11 @@ subprojects { p -> // Compression (LZ4) relocate "net.jpountz", "${librariesLocation}.jpountz" - + // Sqlite Database //At the moment, there is a bug in this library which doesnt allow it to be relocated // relocate "org.sqlite", "${librariesLocation}.sqlite" - + // JOML if (project.hasProperty("embed_joml") && embed_joml == "true") relocate "org.joml", "${librariesLocation}.joml" @@ -304,15 +307,27 @@ subprojects { p -> // SVG (not needed atm) // relocate "com.kitfox.svg", "${librariesLocation}.kitfox.svg" - + // Netty relocate "io.netty", "${librariesLocation}.netty" mergeServiceFiles() } - // Using jar.finalizedBy(shadowJar) causes issues so we do this scuffed bypass jar.dependsOn(shadowJar) + // For downgrading our project to Java 8 + task jarDowngrade(type: xyz.wagyourtail.jvmdg.gradle.task.DowngradeJar) { + inputFile = tasks.shadowJar.archiveFile + archiveClassifier = "downgraded-8" + } + task apiDowngrade(type: xyz.wagyourtail.jvmdg.gradle.task.ShadeAPI) { + inputFile = jarDowngrade.archiveFile + archiveClassifier = "downgraded-8-shaded" + } + // We're using a custom downgrade task so we disable the original downgrade tasks + downgradeJar.enabled = false + shadeDowngradedApi.enabled = false + // Put stuff from gradle.properties into the mod info processResources { @@ -351,7 +366,7 @@ subprojects { p -> // TODO: Find something we can use so we can basically re-map only when the jar is shadowed and relocated // println p.tasks.findByName('shadowJar') - + // These "hasProperty"'s are so that they can be passed through the cli (ie in the CI) try { if (infoGitCommit == "null") @@ -387,14 +402,14 @@ subprojects { p -> fabric_incompatibility_list : fabric_incompatibility_list, fabric_recommend_list : fabric_recommend_list, ] - + // replace any properties in the sub-projects with the values defined here inputs.properties replaceProperties replaceProperties.put "project", project filesMatching(resourceTargets) { expand replaceProperties } - + intoTargets.each { target -> if (file(target).exists()) { copy { @@ -462,11 +477,11 @@ allprojects { p -> apply plugin: "java" apply plugin: "maven-publish" - + archivesBaseName = rootProject.mod_name version = project.name + "-" + rootProject.versionStr group = rootProject.maven_group - + // this is the text that appears at the top of the overview (home) page // and is used when bookmarking a page javadoc.title = rootProject.mod_name + "-" + project.name @@ -552,44 +567,6 @@ allprojects { p -> // TODO: If neoforged is ever needed, should we use that, or call it a forge mod? } - // Adds some dependencies that are in vanilla but not in core - if (p == project(":core")) { - OperatingSystem os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem; - - // Set the OS lwjgl is using to the current os - project.ext.lwjglNatives = "natives-" + os.toFamilyName() - - dependencies { // All of these dependencies are in Vanilla Minecraft, but we need to depend on it as we arent importing Minecraft in the core - // Imports most of lwjgl's libraries (well, only the ones that we need) - implementation platform("org.lwjgl:lwjgl-bom:${rootProject.lwjgl_version}") // TODO: Use Minecraft's version for lwjgl_version (which changes in nearly every version) instead of a hard defined version for all versions - - // REMEMBER: Dont shadow stuff here, these are just the libs that are included in Minecraft so that the core can use - implementation "org.lwjgl:lwjgl" - implementation "org.lwjgl:lwjgl-assimp" - implementation "org.lwjgl:lwjgl-glfw" - implementation "org.lwjgl:lwjgl-openal" - implementation "org.lwjgl:lwjgl-opengl" - implementation "org.lwjgl:lwjgl-stb" - implementation "org.lwjgl:lwjgl-tinyfd" - runtimeOnly "org.lwjgl:lwjgl::$lwjglNatives" - runtimeOnly "org.lwjgl:lwjgl-assimp::$lwjglNatives" - runtimeOnly "org.lwjgl:lwjgl-glfw::$lwjglNatives" - runtimeOnly "org.lwjgl:lwjgl-openal::$lwjglNatives" - runtimeOnly "org.lwjgl:lwjgl-opengl::$lwjglNatives" - runtimeOnly "org.lwjgl:lwjgl-stb::$lwjglNatives" - runtimeOnly "org.lwjgl:lwjgl-tinyfd::$lwjglNatives" - implementation "org.joml:joml:${rootProject.joml_version}" - - - // Some other dependencies - implementation("org.jetbrains:annotations:16.0.2") - implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.google.common:google-collect:0.5") - implementation("com.google.guava:guava:31.1-jre") - } - } - - task copyCommonLoaderResources(type: Copy) { from project(":common").file("src/main/resources/${accessWidenerVersion}.distanthorizons.accesswidener") into(file(p.file("build/resources/main"))) @@ -611,16 +588,17 @@ allprojects { p -> tasks.withType(JavaCompile) { if (isMinecraftSubProject) { - options.release = rootProject.java_version as Integer + options.release = rootProject.java_version as Integer // Neoforge complains without this options.compilerArgs += ["-Xplugin:Manifold"] - } else { - options.release = 8; // Core & Api should use Java 8 no matter what - //options.release = rootProject.java_version as Integer // But if you want to test some stuff, then this can be enabled } options.encoding = "UTF-8" } + // Sets the project's actual Java version (it's recommended to use this over the `options.release` method above) java { + sourceCompatibility = rootProject.java_version + targetCompatibility = rootProject.java_version + withSourcesJar() } } diff --git a/fabric/build.gradle b/fabric/build.gradle index accf863fc..2d3b583fc 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -23,8 +23,8 @@ loom { } remapJar { - inputFile = shadowJar.archiveFile - dependsOn shadowJar + inputFile = apiDowngrade.archiveFile + dependsOn apiDowngrade } diff --git a/forge/build.gradle b/forge/build.gradle index 790890245..ea30313f3 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -51,8 +51,8 @@ loom { } remapJar { - inputFile = shadowJar.archiveFile - dependsOn shadowJar + inputFile = apiDowngrade.archiveFile + dependsOn apiDowngrade } def addMod(path, enabled) { diff --git a/neoforge/build.gradle b/neoforge/build.gradle index f5ab276fd..4b5290e17 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -67,8 +67,8 @@ loom { } remapJar { - inputFile = shadowJar.archiveFile - dependsOn shadowJar + inputFile = apiDowngrade.archiveFile + dependsOn apiDowngrade // classifier null atAccessWideners.add("distanthorizons.accesswidener") diff --git a/settings.gradle b/settings.gradle index fb99f9435..770772bc4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -33,6 +33,12 @@ pluginManagement { name "ParchmentMC" url "https://maven.parchmentmc.org" } + maven { // Used for downgrading Java versions + url "https://maven.wagyourtail.xyz/releases" + } + maven { + url "https://maven.wagyourtail.xyz/snapshots" + } mavenCentral() gradlePluginPortal() From e86af817e0476e23e0d973ddbe41339d2b0247f5 Mon Sep 17 00:00:00 2001 From: Cutiepie <43445785+Ran-Mewo@users.noreply.github.com> Date: Wed, 22 May 2024 21:06:36 +1000 Subject: [PATCH 2/4] =?UTF-8?q?Java=20=CE=A9=20&=20cleanup=20core's=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 8c91a8479..fef87df09 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 8c91a8479595d1de04213329e550b467e32bcb20 +Subproject commit fef87df09b41a2ed16c74b1426f0c0089db088af From f81026c707b4bf8fffed5c7c2e6fea3e0e01ea94 Mon Sep 17 00:00:00 2001 From: Cutiepie <43445785+Ran-Mewo@users.noreply.github.com> Date: Wed, 22 May 2024 21:51:46 +1000 Subject: [PATCH 3/4] Bump JVM Downgrader --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4a5996226..978f8a31a 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ plugins { // Architectury is used here only as a replacement for forge's own loom id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false - id 'xyz.wagyourtail.jvmdowngrader' version '0.4.1' apply true + id 'xyz.wagyourtail.jvmdowngrader' version '0.4.3' apply true } From 55d5bca76d1b049c37a633cb3e3a55c8c2227245 Mon Sep 17 00:00:00 2001 From: Cutiepie <43445785+Ran-Mewo@users.noreply.github.com> Date: Wed, 22 May 2024 22:17:59 +1000 Subject: [PATCH 4/4] Downgrade to the minimum Java version required by the selected Minecraft version --- build.gradle | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 978f8a31a..6d6391157 100644 --- a/build.gradle +++ b/build.gradle @@ -313,16 +313,17 @@ subprojects { p -> mergeServiceFiles() } - jar.dependsOn(shadowJar) - // For downgrading our project to Java 8 + // For downgrading the Java version of our project to match the minimum Java version required by the selected Minecraft version. task jarDowngrade(type: xyz.wagyourtail.jvmdg.gradle.task.DowngradeJar) { inputFile = tasks.shadowJar.archiveFile - archiveClassifier = "downgraded-8" + downgradeTo = JavaVersion.toVersion(rootProject.java_version as Integer) + archiveClassifier = "downgraded-${rootProject.java_version}" } task apiDowngrade(type: xyz.wagyourtail.jvmdg.gradle.task.ShadeAPI) { inputFile = jarDowngrade.archiveFile - archiveClassifier = "downgraded-8-shaded" + downgradeTo = JavaVersion.toVersion(rootProject.java_version as Integer) + archiveClassifier = "downgraded-${rootProject.java_version}-shaded-java-api" } // We're using a custom downgrade task so we disable the original downgrade tasks downgradeJar.enabled = false