import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import net.fabricmc.loom.api.LoomGradleExtensionAPI import net.fabricmc.loom.configuration.FabricApiExtension import net.fabricmc.loom.task.RemapJarTask import net.fabricmc.loom.task.RunGameTask plugins { id("fabric-loom") `java-library` id("buildlogic.platform") } platform { kind = buildlogic.WorldEditKind.Mod includeClasspath = true } val fabricApiConfiguration: Configuration = configurations.create("fabricApi") loom { accessWidenerPath.set(project.file("src/main/resources/worldedit.accesswidener")) } tasks.withType().configureEach { javaLauncher.set(javaToolchains.launcherFor(java.toolchain)) } repositories { afterEvaluate { verifyEngineHubRepositories() } } dependencies { "api"(project(":worldedit-core")) "minecraft"(libs.fabric.minecraft) "mappings"(loom.layered { officialMojangMappings() parchment("org.parchmentmc.data:parchment-${libs.versions.parchment.minecraft.get()}:${libs.versions.parchment.mappings.get()}@zip") }) "modImplementation"(libs.fabric.loader) // [1] Load the API dependencies from the fabric mod json... @Suppress("UNCHECKED_CAST") val fabricModJson = file("src/main/resources/fabric.mod.json").bufferedReader().use { groovy.json.JsonSlurper().parse(it) as Map> } val wantedDependencies = (fabricModJson["depends"] ?: error("no depends in fabric.mod.json")).keys .filter { it == "fabric-api-base" || it.contains(Regex("v\\d$")) } .toSet() // [2] Request the matching dependency from fabric-loom for (wantedDependency in wantedDependencies) { val dep = project.the().module(wantedDependency, libs.versions.fabric.api.get()) "include"(dep) "modImplementation"(dep) } // No need for this at runtime "modCompileOnly"(libs.fabric.permissions.api) // Silence some warnings, since apparently this isn't on the compile classpath like it should be. "compileOnly"(libs.errorprone.annotations) } configure { archivesName.set("${project.name}-mc${libs.fabric.minecraft.get().version}") } configure { publications.named("maven") { artifactId = the().archivesName.get() from(components["java"]) } } tasks.named("processResources") { val internalVersion = project.ext["internalVersion"] // this will ensure that this task is redone when the versions change. inputs.property("version", internalVersion) filesMatching("fabric.mod.json") { this.expand("version" to internalVersion) } } tasks.named("shadowJar") { archiveClassifier.set("dist-dev") dependencies { relocate("org.antlr.v4", "com.sk89q.worldedit.antlr4") relocate("net.royawesome.jlibnoise", "com.sk89q.worldedit.jlibnoise") include(dependency("org.antlr:antlr4-runtime")) include(dependency("com.sk89q.lib:jlibnoise")) } } tasks.register("remapShadowJar") { val shadowJar = tasks.getByName("shadowJar") dependsOn(shadowJar) inputFile.set(shadowJar.archiveFile) archiveFileName.set(shadowJar.archiveFileName.get().replace(Regex("-dev\\.jar$"), ".jar")) addNestedDependencies.set(true) } tasks.named("assemble").configure { dependsOn("remapShadowJar") }