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:7.1.2" classpath "net.minecraftforge.gradle:ForgeGradle:6.+" classpath "org.spongepowered:mixingradle:0.7-SNAPSHOT" classpath "me.modmuss50:mod-publish-plugin:0.5.1" classpath "xyz.wagyourtail.jvmdowngrader:gradle-plugin:0.6.1" } } allprojects { apply plugin: "java-library" apply plugin: "com.github.johnrengelman.shadow" apply plugin: "me.modmuss50.mod-publish-plugin" 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() } } } // 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 } } } } // Including all required libraries for ViaVersion {for version numbers see gradle.properties} dependencies { compileOnly "io.netty:netty-all:4.0.20.Final" library "com.viaversion:viaversion-common:${project.viaversion_version}" library "com.viaversion:viabackwards-common:${project.viabackwards_version}" library "com.viaversion:viarewind-common:${project.viarewind_version}" library ("net.raphimc:ViaLegacy:${project.vialegacy_version}") { exclude group: "com.google.code.gson", module: "gson" } library "net.raphimc:ViaAprilFools:${project.viaaprilfools_version}" library ("net.raphimc:ViaLoader:${project.vialoader_version}") { exclude group: "com.google.guava" exclude group: "org.slf4j" } library "org.yaml:snakeyaml:${project.snake_yml_version}" } } subprojects { apply plugin: "net.minecraftforge.gradle" apply plugin: "org.spongepowered.mixin" // Define the jar output attributes for all platforms archivesBaseName = project.maven_name version = maven_version group = maven_group // Used to execute code only for specific submodules def versionId = Integer.parseInt(project.mc_version.replace(".", "")) compileJava.options.encoding = "UTF-8" minecraft { 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('maven_name') + ".json" // source set mods { "${project.maven_name}" { source sourceSets.main } } } } } sourceSets.main.resources { srcDir "src/generated/resources" } dependencies { 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 } mixin { add sourceSets.main, "mixins.${project.maven_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.maven_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 } publishMods { file = shadowJar.archiveFile type = STABLE displayName = rootProject.name + ' ' + project.version version = project.version + "+" + project.mc_version modLoaders.add("forge") changelog = file("../CHANGELOG.md").text dryRun = rootProject.maven_version.contains("SNAPSHOT") curseforge { accessToken = providers.gradleProperty("curseforge.publishing_token") projectId = "418933" minecraftVersions.addAll(project.mc_version.split(',')) } modrinth { accessToken = providers.gradleProperty("modrinth.publishing_token") projectId = "Z6se2s8f" minecraftVersions.addAll(project.mc_version.split(',')) } } 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") } }