plugins { id "com.github.johnrengelman.shadow" version "8.1.1" } architectury { platformSetupLoomIde() forge() } configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common } processResources { filesMatching("META-INF/mods.toml") { expand "version": project.version } inputs.property "version", project.version } repositories { maven { url "https://www.cursemaven.com" } maven { url "https://dl.cloudsmith.io/public/geckolib3/geckolib/maven" } maven { name "Modmaven" url "https://modmaven.dev/" // For Gradle 5.1 and above, limit it to just AE2 content { includeGroup 'appeng' } } } sourceSets { serverComponent { compileClasspath += main.compileClasspath runtimeClasspath += main.runtimeClasspath } } processServerComponentResources { filesMatching("META-INF/mods.toml") { expand "version": project.version } inputs.property "version", project.version } loom { forge { mixinConfig "rei.mixins.json" } } def depProjects = [":api", ":runtime", ":default-plugin"] dependencies { forge("net.minecraftforge:forge:${rootProject.minecraft_version}-${rootProject.forge_version}") modApi("me.shedaniel.cloth:cloth-config-forge:${cloth_config_version}") modApi("dev.architectury:architectury-forge:${architectury_version}") depProjects.forEach { common(project(path: it, configuration: "namedElements")) { transitive false } shadowCommon(project(path: it, configuration: "transformProductionForge")) { transitive false } } // modRuntime("curse.maven:lazy-dfu-forge-460819:3544496") // modRuntime("curse.maven:chiselsbits-231095:3492889") // modRuntime("curse.maven:jumbofurnace-390880:3120970") // modRuntime("curse.maven:cyclic-239286:3221427") // modRuntime("curse.maven:mekanism-268560:3743835") // modRuntime("curse.maven:mekanism-tools-268567:3743838") // modRuntime("curse.maven:mekanism-generators-268566:3743837") // modRuntime("curse.maven:immersive-engineering-231951:3721708") // modRuntime("curse.maven:autoreglib-250363:3326041") // modRuntime("curse.maven:ars-nouveau-401955:3814106") // modRuntime("curse.maven:patchouli-306770:3843443") // modRuntime("curse.maven:curios-309927:3748873") // modRuntime("software.bernie.geckolib:geckolib-forge-1.18:3.0.57") // modRuntime("curse.maven:little-logistics-570050:3818773") // modRuntime("curse.maven:refined-storage-243076:3623324") // modRuntime("appeng:appliedenergistics2:10.0.1") // modRuntime("curse.maven:tcon-74072:3784732") // modRuntime("curse.maven:mantle-74924:3784500") // modRuntime("curse.maven:jer-240630:3575590") // modRuntime("curse.maven:jep-417645:3550303") // modRuntime("curse.maven:simple-storage-network-268495:3594529") // modRuntime("curse.maven:create-328085:3737418") // modRuntime("curse.maven:flywheel-486392:3737402") // modRuntime("curse.maven:industrial-foregoing-266515:3446262") // modRuntime("curse.maven:titanium-287342:3346366") // modRuntime("curse.maven:extended-crafting-268387:3606681") // modRuntime("curse.maven:cucumber-272335:3623830") // modRuntime("curse.maven:crafttweaker-239197:3602440") // modRuntime("curse.maven:jeitweaker-368718:3602846") // modRuntime("curse.maven:eidolon-429625:3157832") // modRuntime("curse.maven:token-enchanter-444421:3449483") // modRuntime("curse.maven:silent-lib-242998:3400030") // modRuntime("curse.maven:resourceful-bees-384508:3485315") // modRuntime("curse.maven:thermal-expansion-69163:3803489") // modRuntime("curse.maven:thermal-foundation-222880:3803495") // modRuntime("curse.maven:cofh-core-69162:3803484") // modRuntime("curse.maven:advanced-peripherals-431725:3525665") // modRuntime("curse.maven:cc-tweaked-282001:3434680") // modRuntime("curse.maven:ender-storage-245174:3361748") // modRuntime("curse.maven:codechicken-242818:3528603") // modRuntime("curse.maven:recipe-stages-280554:3492760") // modRuntime("curse.maven:game-stages-268655:3437962") // modRuntime("curse.maven:bookshelf-228525:3474499") // modRuntime("curse.maven:kubejs-238086:3533307") // modRuntime("curse.maven:rhino-416294:3525704") // modRuntime("curse.maven:enchantment-descriptions-250419:3566741") // modRuntime("curse.maven:natures-aura-306626:3587798") // modRuntime("curse.maven:integrated-dynamics-236307:3631804") // modRuntime("curse.maven:common-capabilities-247007:3614900") // modRuntime("curse.maven:evilcraft-74610:3795956") // modRuntime("curse.maven:cyclops-core-236307:3778682") // modRuntime("curse.maven:elemental-craft-395158:3593428") // modRuntime("curse.maven:datapack-anvil-432817:3569515") // modRuntime("curse.maven:assemblylinemachines-388282:3623609") // modRuntime("curse.maven:mystical-agriculture-246640:3645812") // modRuntime("curse.maven:oreberries-replanted-454062:3776180") // modRuntime("curse.maven:farmers-delight-398521:3784851") // modRuntime("curse.maven:nomadic-tents-238794:3829966") // modRuntime("curse.maven:caelus-308989:3650485") } def modRuntime(str) { dependencies.modLocalRuntime(str) } shadowJar { configurations = [project.configurations.shadowCommon] archiveClassifier = "dev-shadow" } remapJar { input.set shadowJar.archiveFile dependsOn shadowJar archiveClassifier = null } task renameJarForPublication(type: Zip, dependsOn: remapJar) { from remapJar.archiveFile.map { zipTree(it) } metadataCharset "UTF-8" archiveExtension = "jar" destinationDirectory = base.libsDirectory archiveClassifier = project.name } assemble.dependsOn renameJarForPublication jar { archiveClassifier = "dev" } java { withSourcesJar() } sourcesJar { afterEvaluate { depProjects.forEach { def depSources = project(it).sourcesJar dependsOn depSources from depSources.archiveFile.map { zipTree(it) } } } } task serverOnlyJar(type: Jar, dependsOn: [remapJar]) { archiveClassifier = "server-only" from(zipTree(remapJar.archiveFile.get().asFile)) { exclude "META-INF/mods.toml", "mezz/**", "me/shedaniel/rei/forge/RoughlyEnoughItemsForge.class", "me/shedaniel/rei/forge/JEIStub.class" } from(sourceSets.serverComponent.output) } tasks.build { dependsOn tasks.serverOnlyJar } components.java { withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { skip() } } publishing { publications { mavenForge(MavenPublication) { artifactId = rootProject.name + "-" + project.name from components.java } ["api", "default-plugin"].forEach { projectName -> def remapSrg = tasks.create("remapSrgJarFor$projectName", net.fabricmc.loom.task.RemapJarTask) { inputFile = project(":" + projectName).tasks.jar.archiveFile archiveClassifier = "srg-remapped-$projectName" targetNamespace = "srg" } def remapSrgSourcesJar = tasks.create("remapSrgSourcesFor$projectName", net.fabricmc.loom.task.RemapSourcesJarTask) { inputFile = project(":" + projectName).tasks.sourcesJar.archiveFile archiveClassifier = "srg-remapped-$projectName-sources" targetNamespace = "srg" } create(projectName + "Forge", MavenPublication.class) { publication -> publication.artifactId = rootProject.name + "-" + projectName + "-forge" project.afterEvaluate { def project = project(":" + projectName) remapSrg.inputFile = project.fakeForgeJar.archiveFile def normalArtifact, sourceArtifact publication.artifact(remapSrg) { classifier null; normalArtifact = it } publication.artifact(remapSrgSourcesJar) { builtBy remapSrgSourcesJar classifier "sources" sourceArtifact = it } from components.java publication.setArtifacts([normalArtifact, sourceArtifact]) } } } } } unifiedPublishing { project { displayName = "[Forge $rootProject.supported_version] v$project.version" releaseType = "beta" gameVersions = [] gameLoaders = ["forge"] changelog = rootProject.releaseChangelog mainPublication renameJarForPublication relations { depends { curseforge = "architectury-api" modrinth = "architectury-api" } depends { curseforge = "cloth-config" modrinth = "cloth-config" } } if (project.hasProperty("danielshe_curse_api_key") || System.getenv("danielshe_curse_api_key") != null) { curseforge { token = project.hasProperty("danielshe_curse_api_key") ? project.property("danielshe_curse_api_key") : System.getenv("danielshe_curse_api_key") id = "310111" gameVersions.addAll "Java 17" gameVersions.addAll project.minecraft_version relations { depends "roughly-enough-items-hacks" } } } if (project.hasProperty("modrinth_key") || System.getenv("modrinth_key") != null) { modrinth { token = project.hasProperty("modrinth_key") ? project.property("modrinth_key") : System.getenv("modrinth_key") id = "nfn13YXA" version = "$project.version+$project.name" gameVersions.addAll project.minecraft_version } } } project { displayName = "[Forge $rootProject.supported_version] v$project.version" releaseType = "release" gameVersions = [] gameLoaders = ["forge"] changelog = rootProject.releaseChangelog mainPublication serverOnlyJar relations { depends { curseforge = "architectury-api" modrinth = "architectury-api" } depends { curseforge = "cloth-config" modrinth = "cloth-config" } } if (project.hasProperty("danielshe_curse_api_key") || System.getenv("danielshe_curse_api_key") != null) { curseforge { token = project.hasProperty("danielshe_curse_api_key") ? project.property("danielshe_curse_api_key") : System.getenv("danielshe_curse_api_key") id = "567899" gameVersions.addAll "Java 17" gameVersions.addAll project.minecraft_version } } if (project.hasProperty("modrinth_key") || System.getenv("modrinth_key") != null) { modrinth { releaseType = "release" token = project.hasProperty("modrinth_key") ? project.property("modrinth_key") : System.getenv("modrinth_key") id = "OM4ZYSws" version = "$project.version+$project.name" gameVersions.addAll project.minecraft_version } } } } // I hate Forge sourceSets.each { def dir = layout.buildDirectory.dir("sourcesSets/$it.name") it.output.resourcesDir = dir it.java.destinationDirectory = dir }