
This will automatically find mixins in the mixin plugin, not requiring the manual configuration. This is less friction, especially for newer users. Usually this isn't super advisable, or needs more configuration to avoid server/client mixins being incorrectly applied, but with the target demographic of mostly client mods, I think this is a worthwhile change.
146 lines
4 KiB
Kotlin
146 lines
4 KiB
Kotlin
import org.apache.commons.lang3.SystemUtils
|
|
|
|
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 "8.1.1"
|
|
}
|
|
|
|
//Constants:
|
|
|
|
val baseGroup: String by project
|
|
val mcVersion: String by project
|
|
val version: String by project
|
|
val mixinGroup = "$baseGroup.mixin"
|
|
val modid: String by project
|
|
|
|
// 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", "org.spongepowered.asm.launch.MixinTweaker")
|
|
}
|
|
}
|
|
runConfigs {
|
|
"client" {
|
|
if (SystemUtils.IS_OS_MAC_OSX) {
|
|
// This argument causes a crash on macOS
|
|
vmArgs.remove("-XstartOnFirstThread")
|
|
}
|
|
}
|
|
remove(getByName("server"))
|
|
}
|
|
forge {
|
|
pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter())
|
|
// If you don't want mixins, remove this lines
|
|
mixinConfig("mixins.$modid.json")
|
|
}
|
|
// If you don't want mixins, remove these lines
|
|
mixin {
|
|
defaultRefmapName.set("mixins.$modid.refmap.json")
|
|
}
|
|
}
|
|
|
|
sourceSets.main {
|
|
output.setResourcesDir(sourceSets.main.flatMap { it.java.classesDirectory })
|
|
}
|
|
|
|
// 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")
|
|
}
|
|
|
|
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")
|
|
|
|
// If you don't want mixins, remove these lines
|
|
shadowImpl("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
|
|
isTransitive = false
|
|
}
|
|
annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT")
|
|
|
|
// If you don't want to log in with your real minecraft account, remove this line
|
|
runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.2")
|
|
|
|
}
|
|
|
|
// Tasks:
|
|
|
|
tasks.withType(JavaCompile::class) {
|
|
options.encoding = "UTF-8"
|
|
}
|
|
|
|
tasks.withType(Jar::class) {
|
|
archiveBaseName.set(modid)
|
|
manifest.attributes.run {
|
|
this["FMLCorePluginContainsFMLMod"] = "true"
|
|
this["ForceLoadAsMod"] = "true"
|
|
|
|
// If you don't want mixins, remove these lines
|
|
this["TweakClass"] = "org.spongepowered.asm.launch.MixinTweaker"
|
|
this["MixinConfigs"] = "mixins.$modid.json"
|
|
}
|
|
}
|
|
|
|
tasks.processResources {
|
|
inputs.property("version", project.version)
|
|
inputs.property("mcversion", mcVersion)
|
|
inputs.property("modid", modid)
|
|
inputs.property("basePackage", baseGroup)
|
|
|
|
filesMatching(listOf("mcmod.info", "mixins.$modid.json")) {
|
|
expand(inputs.properties)
|
|
}
|
|
|
|
rename("(.+_at.cfg)", "META-INF/$1")
|
|
}
|
|
|
|
|
|
val remapJar by tasks.named<net.fabricmc.loom.task.RemapJarTask>("remapJar") {
|
|
archiveClassifier.set("")
|
|
from(tasks.shadowJar)
|
|
input.set(tasks.shadowJar.get().archiveFile)
|
|
}
|
|
|
|
tasks.jar {
|
|
archiveClassifier.set("without-deps")
|
|
destinationDirectory.set(layout.buildDirectory.dir("badjars"))
|
|
}
|
|
|
|
tasks.shadowJar {
|
|
destinationDirectory.set(layout.buildDirectory.dir("badjars"))
|
|
archiveClassifier.set("all-dev")
|
|
configurations = listOf(shadowImpl)
|
|
doLast {
|
|
configurations.forEach {
|
|
println("Copying jars into mod: ${it.files}")
|
|
}
|
|
}
|
|
|
|
// If you want to include other dependencies and shadow them, you can relocate them in here
|
|
fun relocate(name: String) = relocate(name, "$baseGroup.deps.$name")
|
|
}
|
|
|
|
tasks.assemble.get().dependsOn(tasks.remapJar)
|
|
|