buildscript { repositories { gradlePluginPortal() maven { url = "https://repo.spongepowered.org/repository/maven-public/" } maven { url = "https://jitpack.io/" } maven { url = "https://files.minecraftforge.net/maven" } } dependencies { classpath "com.github.johnrengelman:shadow:8.1.1" classpath "net.minecraftforge.gradle:ForgeGradle:6.+" classpath "org.spongepowered:mixingradle:0.7-SNAPSHOT" classpath "xyz.wagyourtail.jvmdowngrader:gradle-plugin:1.1.1" } } allprojects { apply plugin: "java-library" apply plugin: "com.github.johnrengelman.shadow" apply plugin: "xyz.wagyourtail.jvmdowngrader" java { // Minecraft 1.17+ required Java 16/17 to compile toolchain.languageVersion = JavaLanguageVersion.of(17) } // We define the configuration here so we can use it across all conventions and platforms // To define which projects/source files should be included in the jar configurations { library implementation.extendsFrom(library) } // Repositories for the ViaVersion dependencies defined below repositories { maven { url = "https://repo.spongepowered.org/repository/maven-public" } maven { url = "https://repo.viaversion.com" metadataSources { mavenPom() artifact() } } } dependencies { // For common source code compileOnly "io.netty:netty-all:4.1.112.Final" library "com.viaversion:viaversion-common:5.0.3" library "com.viaversion:viabackwards-common:5.0.3" library "com.viaversion:viarewind-common:4.0.2" library ("net.raphimc:ViaLegacy:3.0.3-SNAPSHOT") { exclude group: "com.google.code.gson", module: "gson" } library "net.raphimc:viaaprilfools-common:3.0.2-SNAPSHOT" library ("net.raphimc:ViaLoader:3.0.3-SNAPSHOT") { exclude group: "com.google.guava" exclude group: "org.slf4j" } } } subprojects { apply plugin: "net.minecraftforge.gradle" apply plugin: "org.spongepowered.mixin" // Define the jar output attributes for all platforms base { group = project.maven_group archivesName = project.name version = project.maven_version description = project.maven_description } def mcVersion = project.forge_version.split("-")[0] // Used to execute code only for specific submodules def versionId = Integer.parseInt(mcVersion.replace(".", "")) compileJava.options.encoding = "UTF-8" minecraft { if (versionId >= 1_16_5) { mappings channel: "official", version: mcVersion } runs { client { workingDirectory project.file("run") property "forge.logging.markers", "REGISTRIES" property "forge.logging.console.level", "debug" // mixin property "mixin.debug.export", "true" property "mixin.hotSwap", "true" property "fml.coreMods.load", "de.florianmichael.viaforge.mixin.MixinLoader" // Only required for MC 1.12, but modern Forges skips this anyway args "-mixin.config=" + "mixins." + project.getProperty('name') + ".json" // source set mods { "${project.name}" { source sourceSets.main } } } } } sourceSets.main.resources { srcDir "src/generated/resources" } dependencies { minecraft "net.minecraftforge:forge:${forge_version}" if (versionId >= 1_17_1) { // Minecraft 1.17+ already includes slf4j, so we don't need to include it compileOnly "org.slf4j:slf4j-api:${slf4j_version}" } else { library "org.slf4j:slf4j-api:${slf4j_version}" } library "org.spongepowered:mixin:${mixin_version}" annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" library project(":") // Include the base project, to get Common-ViaForge } // Replace the version in the mcmod.info and mods.toml files with the project version // Since this depends on the platform version, we can't define it in the global scope :( tasks { processResources { for (final def file in ["mcmod.info", "META-INF/mods.toml"]) { filesMatching(file) { expand ( "version": project.version, "description": project.description ) } } } } mixin { add sourceSets.main, "mixins.${project.name}.refmap.json" } jar { manifest.attributes( "Specification-Title": "viaforge", "Specification-Vendor": "viaforge", "Specification-Version": project.version, "Implementation-Title": project.name, "Implementation-Version": project.version, "Implementation-Vendor" :"viaforge", "Implementation-Timestamp": new Date().format("yyyy-MM-dd"-"HH:mm:ssZ"), "TweakClass": "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder": "0", "FMLCorePluginContainsFMLMod": "true", // Only required for MC 1.12, but modern Forges skips this anyway "FMLCorePlugin": "de.florianmichael.viaforge.mixin.MixinLoader", // Counterpart to the above "MixinConfigs": "mixins.${project.name}.json", "ForceLoadAsMod": "true" ) enabled = false } shadowJar { if (versionId >= 1_17_1) { archiveFileName = jar.archiveFileName } else { destinationDirectory = temporaryDir } configurations = [project.configurations.library] // Include the dependencies from the include configuration duplicatesStrategy DuplicatesStrategy.EXCLUDE // Prevent conflicts with Forge's weird service loading exclude("META-INF/maven/**") exclude("META-INF/versions/**") if (versionId >= 1_13_2) { // We don't need to package mixins into Forge 1.13+ jars, since Forge already has it exclude("org/spongepowered/**") } if (versionId >= 1_16_5) { // Get rid of the services folder, since Forge 1.16+ would conflict with some of the ForgeDev Environment's services // And since we don't need them for Mixins anyway, we can just exclude them from the shadowJar exclude("META-INF/services/**") } } downgradeJar { inputFile = shadowJar.archiveFile destinationDirectory = temporaryDir } shadeDowngradedApi { archiveFileName = jar.archiveFileName } reobf { shadowJar {} } jar.dependsOn("shadowJar") if (versionId < 1_17_1) { // Downgrade the jar to Java 8 for Minecraft 1.16.5 and below jar.dependsOn("shadeDowngradedApi") } }