import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.ir.backend.js.compile 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" kotlin("jvm") version "1.8.20" } group = "com.example.archloomtemplate" version = "1.2.2" // Toolchains: java { toolchain.languageVersion.set(JavaLanguageVersion.of(8)) } // Minecraft configuration: loom { log4jConfigs.from(file("log4j2.xml")) launchConfigs { "client" { // If you don't want mixins, remove these lines property("mixin.debug", "true") property("asmhelper.verbose", "true") arg("--tweakClass", "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker") arg("--mixin", "mixins.dulkirmod.json") arg("--tweakClass", "gg.essential.loader.stage0.EssentialSetupTweaker") } } forge { pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter()) // If you don't want mixins, remove this lines mixinConfig("mixins.dulkirmod.json") } // If you don't want mixins, remove these lines mixin { defaultRefmapName.set("mixins.dulkirmod.refmap.json") } } sourceSets.main { output.setResourcesDir(file("$buildDir/classes/java/main")) } val packageLib by configurations.creating { configurations.implementation.get().extendsFrom(this) } // Dependencies: repositories { mavenCentral() maven("https://repo.spongepowered.org/maven/") // If you don't want to log in with your real minecraft account, remove this line maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") maven("https://repo.essential.gg/repository/maven-public/") maven("https://repo.polyfrost.cc/releases") } val shadowImpl: Configuration by configurations.creating { configurations.implementation.get().extendsFrom(this) } dependencies { 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") shadowImpl("gg.essential:loader-launchwrapper:1.1.3") // If you don't want mixins, remove these lines compileOnly("org.spongepowered:mixin:0.8.5-SNAPSHOT") { isTransitive = false } annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor") // If you don't want to log in with your real minecraft account, remove this line runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.0") // Basic OneConfig dependencies for legacy versions. See OneConfig example mod for more info compileOnly("cc.polyfrost:oneconfig-1.8.9-forge:0.2.0-alpha+") // Should not be included in jar // include should be replaced with a configuration that includes this in the jar shadowImpl("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-beta+") // Should be included in jar } // Configures our shadow/shade configuration, so we can // include some dependencies within our mod jar file. tasks.named("shadowJar") { archiveClassifier.set("dev") // TODO: machete gets confused by the `dev` prefix. configurations = listOf(shadowImpl) duplicatesStrategy = DuplicatesStrategy.EXCLUDE } // Tasks: tasks.withType(JavaCompile::class) { options.encoding = "UTF-8" } tasks.withType { kotlinOptions { jvmTarget = "1.8" } } tasks.withType(Jar::class) { archiveBaseName.set("dulkirmod") manifest.attributes.run { this["FMLCorePluginContainsFMLMod"] = "true" this["ForceLoadAsMod"] = "true" // If you don't want mixins, remove these lines this["TweakClass"] = "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker" this["MixinConfigs"] = "mixins.dulkirmod.json" } } val remapJar by tasks.named("remapJar") { archiveClassifier.set("all") from(tasks.shadowJar) input.set(tasks.shadowJar.get().archiveFile) } tasks.shadowJar { archiveClassifier.set("all-dev") configurations = listOf(shadowImpl) doLast { configurations.forEach { println("Config: ${it.files}") } } // If you want to include other dependencies and shadow them, you can relocate them in here fun relocate(name: String) = relocate(name, "com.dulkirmod.deps.$name") } tasks.withType { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } tasks.assemble.get().dependsOn(tasks.remapJar)