/*
* 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 net.fabricmc.loom.task.RemapJarTask
import org.gradle.internal.impldep.org.apache.ivy.osgi.util.ZipUtil
import java.io.ByteArrayOutputStream
import java.nio.file.FileSystems
import java.nio.file.Files
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"
}
// Build metadata
group = "io.github.moulberry"
val baseVersion = "2.1"
val buildExtra = mutableListOf()
val buildVersion = properties["BUILD_VERSION"] as? String
if (buildVersion != null) buildExtra.add(buildVersion)
if (properties["CI"] as? String == "true") buildExtra.add("ci")
val stdout = ByteArrayOutputStream()
val execResult = exec {
commandLine("git", "describe", "--always", "--first-parent", "--abbrev=7")
standardOutput = stdout
isIgnoreExitValue = true
}
if (execResult.exitValue == 0) {
buildExtra.add(String(stdout.toByteArray()).trim())
}
val gitDiffStdout = ByteArrayOutputStream()
val gitDiffResult = exec {
commandLine("git", "status", "--porcelain")
standardOutput = gitDiffStdout
isIgnoreExitValue = true
}
if (gitDiffStdout.toByteArray().isNotEmpty()) {
buildExtra.add("dirty")
}
version = baseVersion + (if (buildExtra.isEmpty()) "" else buildExtra.joinToString(prefix = "+", separator = "."))
// Minecraft configuration:
loom {
launchConfigs {
"client" {
property("mixin.debug", "true")
property("asmhelper.verbose", "true")
arg("--tweakClass", "org.spongepowered.asm.launch.MixinTweaker")
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")
}
val shadowImplementation 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")
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")
shadowImplementation("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")
modRuntimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.0")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(8))
}
// Tasks:
tasks.withType(JavaCompile::class) {
options.encoding = "UTF-8"
}
tasks.named("test") {
useJUnitPlatform()
}
tasks.withType(Jar::class) {
archiveBaseName.set("NotEnoughUpdates")
manifest.attributes.run {
this["Main-Class"] = "NotSkyblockAddonsInstallerFrame"
this["TweakClass"] = "org.spongepowered.asm.launch.MixinTweaker"
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 {
this as RemapJarTask
@Suppress("Since15") // Not a concern since we build in a modern version of java.
val zipFs = FileSystems.newFileSystem(archiveFile.get().asFile.toPath())
val moduleInfoPath = zipFs.getPath("/module-info.class")
Files.copy(file("src/main/resources/META-INF/versions/9/module-info.class").toPath(), moduleInfoPath)
println(Files.exists(moduleInfoPath))
zipFs.close()
}
}
tasks.shadowJar {
archiveClassifier.set("dep-dev")
configurations = listOf(shadowImplementation)
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")
}
}
fun relocate(name: String) = relocate(name, "io.github.moulberry.notenoughupdates.deps.$name")
}
tasks.assemble.get().dependsOn(remapJar)
tasks.remapJar{
doLast{
println("Jar name :" + archiveFileName.get())
}
}
tasks.processResources {
filesMatching("mcmod.info") {
expand(
"version" to project.version, "mcversion" to "1.8.9"
)
}
}
sourceSets.main {
output.setResourcesDir(file("$buildDir/classes/java/main"))
}