/* * Copyright (C) 2022 NotEnoughUpdates contributors * * This file is part of NotEnoughUpdates. * * NotEnoughUpdates is free software: you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, either * version 3 of the License, or (at your option) any later version. * * NotEnoughUpdates is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with NotEnoughUpdates. If not, see . */ import neubs.NEUBuildFlags import neubs.applyPublishingInformation import neubs.setVersionFromEnvironment plugins { idea java id("gg.essential.loom") version "0.10.0.+" id("dev.architectury.architectury-pack200") version "0.1.3" id("com.github.johnrengelman.shadow") version "7.1.2" id("io.github.juuxel.loom-quiltflower") version "1.7.3" `maven-publish` id("io.freefair.lombok") version "6.5.1" kotlin("jvm") version "1.7.20" } apply() // Build metadata group = "io.github.moulberry" setVersionFromEnvironment("2.1.1") // Minecraft configuration: loom { launchConfigs { "client" { property("mixin.debug", "true") property("asmhelper.verbose", "true") arg("--tweakClass", "io.github.moulberry.notenoughupdates.loader.NEUDelegatingTweaker") arg("--mixin", "mixins.notenoughupdates.json") } } runConfigs { "server" { isIdeConfigGenerated = false } } forge { pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter()) mixinConfig("mixins.notenoughupdates.json") } mixin { defaultRefmapName.set("mixins.notenoughupdates.refmap.json") } } // Dependencies: repositories { mavenCentral() mavenLocal() maven("https://repo.spongepowered.org/maven/") maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") maven("https://jitpack.io") maven("https://repo.polyfrost.cc/releases") } lombok { version.set("1.18.24") } val shadowImplementation by configurations.creating { configurations.implementation.get().extendsFrom(this) } val shadowOnly by configurations.creating { } val shadowApi by configurations.creating { configurations.api.get().extendsFrom(this) } val devEnv by configurations.creating { configurations.runtimeClasspath.get().extendsFrom(this) isCanBeResolved = false isCanBeConsumed = false isVisible = false } val kotlinDependencies by configurations.creating { configurations.implementation.get().extendsFrom(this) } val oneconfigQuarantineSourceSet = sourceSets.create("oneconfig") { java { srcDir(layout.projectDirectory.dir("src/main/oneconfig")) } kotlin { } } dependencies { implementation("org.projectlombok:lombok:1.18.22") minecraft("com.mojang:minecraft:1.8.9") mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9") forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9") if (project.findProperty("neu.buildflags.oneconfig") == "true") { shadowOnly("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-alpha+") // Should be included in jar runtimeOnly("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-alpha+") // Should be included in jar } "oneconfigImplementation"(sourceSets.main.get().output) "oneconfigImplementation"(sourceSets.main.get().compileClasspath) "oneconfigCompileOnly"(project(":oneconfigquarantine", configuration = "namedElements")) "runtimeOnly"(oneconfigQuarantineSourceSet.output) // Please keep this version in sync with KotlinLoadingTweaker implementation(enforcedPlatform("org.jetbrains.kotlin:kotlin-bom:1.7.21")) kotlinDependencies(kotlin("stdlib")) shadowImplementation("org.spongepowered:mixin:0.7.11-SNAPSHOT") { isTransitive = false // Dependencies of mixin are already bundled by minecraft } annotationProcessor("org.spongepowered:mixin:0.8.4-SNAPSHOT") shadowApi("info.bliki.wiki:bliki-core:3.1.0") testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") testAnnotationProcessor("org.spongepowered:mixin:0.8.4-SNAPSHOT") // modImplementation("io.github.notenoughupdates:MoulConfig:0.0.1") devEnv("me.djtheredstoner:DevAuth-forge-legacy:1.1.0") } java { withSourcesJar() toolchain.languageVersion.set(JavaLanguageVersion.of(8)) } // Tasks: tasks.withType(JavaCompile::class) { options.encoding = "UTF-8" } tasks.named("test") { useJUnitPlatform() } tasks.named("jar", Jar::class) { from(oneconfigQuarantineSourceSet.output) } tasks.withType(Jar::class) { archiveBaseName.set("NotEnoughUpdates") manifest.attributes.run { this["Main-Class"] = "NotSkyblockAddonsInstallerFrame" this["TweakClass"] = "io.github.moulberry.notenoughupdates.loader.NEUDelegatingTweaker" this["MixinConfigs"] = "mixins.notenoughupdates.json" this["FMLCorePluginContainsFMLMod"] = "true" this["ForceLoadAsMod"] = "true" this["Manifest-Version"] = "1.0" } } val remapJar by tasks.named("remapJar") { archiveClassifier.set("dep") from(tasks.shadowJar) input.set(tasks.shadowJar.get().archiveFile) doLast { println("Jar name: ${archiveFile.get().asFile}") } } /* Bypassing https://github.com/johnrengelman/shadow/issues/111 */ // Use Zip instead of Jar as to not include META-INF val kotlinDependencyCollectionJar by tasks.creating(Zip::class) { archiveFileName.set("kotlin-libraries-wrapped.jar") destinationDirectory.set(project.layout.buildDirectory.dir("kotlinwrapper")) from(kotlinDependencies.files) into("neu-kotlin-libraries-wrapped") } tasks.shadowJar { archiveClassifier.set("dep-dev") configurations = listOf(shadowImplementation, shadowApi, shadowOnly) archiveBaseName.set("NotEnoughUpdates") exclude("**/module-info.class", "LICENSE.txt") dependencies { exclude { it.moduleGroup.startsWith("org.apache.") || it.moduleName in listOf("logback-classic", "commons-logging", "commons-codec", "logback-core") } } from(oneconfigQuarantineSourceSet.output) from(kotlinDependencyCollectionJar) dependsOn(kotlinDependencyCollectionJar) fun relocate(name: String) = relocate(name, "io.github.moulberry.notenoughupdates.deps.$name") } tasks.assemble.get().dependsOn(remapJar) tasks.processResources { from(tasks["generateBuildFlags"]) filesMatching(listOf("mcmod.info", "fabric.mod.json", "META-INF/mods.toml")) { expand( "version" to project.version, "mcversion" to "1.8.9" ) } } sourceSets.main { output.setResourcesDir(file("$buildDir/classes/java/main")) } applyPublishingInformation( "deobf" to tasks.jar, "all" to tasks.remapJar, "sources" to tasks["sourcesJar"], )