plugins {
    id "java"
    id "idea"
    id "org.jetbrains.kotlin.jvm"
    id "com.github.johnrengelman.shadow" version "6.1.0"
    id "net.minecraftforge.gradle.forge"
    id "org.spongepowered.mixin"
    id "maven-publish"
}

repositories {
    mavenLocal()
    mavenCentral()
    maven { url = "https://maven.minecraftforge.net/" }
    maven { url = "https://repo.spongepowered.org/repository/maven-public/" }
    maven { url = "https://repo.viaversion.com" }
    maven { url = "https://jitpack.io/" }
}

archivesBaseName = project.archives_base_name
version = project.mod_version
group = project.maven_group

sourceCompatibility = targetCompatibility = 1.8
compileJava.options.encoding = "UTF-8"

compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

minecraft {
    version = "1.8.9-11.15.1.2318-1.8.9"
    runDir = "run"
    mappings = "stable_22"
    makeObfSourceJar = false
    clientJvmArgs += ["-Dfml.coreMods.load=net.aspw.client.injection.forge.TransformerLoader", "-Ddev-mode"]
}

configurations {
    include
    implementation.extendsFrom(include)

    external
    compile.extendsFrom(external)

    runtimeOnly.canBeResolved = true
}

dependencies {
    include("org.spongepowered:mixin:${project.mixin_version}") {
        transitive = false
        exclude module: "guava"
        exclude module: "commons-io"
        exclude module: "gson"
        exclude module: "launchwrapper"
        exclude module: "log4j-core"
    }

    include "com.squareup.okhttp3:okhttp:${project.okhttp_version}"

    include('com.github.half-cambodian-hacker-man:Koffee:d8cee73') {
        exclude module: 'asm-commons'
        exclude module: 'asm-tree'
        exclude module: 'asm'
    }

    annotationProcessor("org.spongepowered:mixin:${project.mixin_version}")

    include "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    include("com.jagrosh:DiscordIPC:0.4") {
        exclude module: "log4j"
    }

    include("com.github.CCBlueX:Elixir:1.2.6") {
        exclude module: "kotlin-stdlib"
        exclude module: "authlib"
    }
}

shadowJar {
    archiveClassifier.set("")
    configurations = [project.configurations.include]
    duplicatesStrategy DuplicatesStrategy.EXCLUDE

    exclude "LICENSE.txt"

    exclude "META-INF/maven/**"
    exclude "META-INF/versions/**"

    exclude "org/apache/**"
    exclude "org/junit/**"
}

processResources {
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    filesMatching("mcmod.info") {
        expand "version": project.version, "mcversion": project.minecraft.version
    }

    rename "(.+_at.cfg)", "META-INF/\$1"
}

tasks.register('moveResources') {
    doLast {
        "${buildDir}/classes/java"
    }
}

moveResources.dependsOn(processResources)
classes.dependsOn(moveResources)

jar {
    manifest.attributes(
            "FMLCorePlugin": "net.aspw.client.injection.forge.TransformerLoader",
            "FMLCorePluginContainsFMLMod": true,
            "ForceLoadAsMod": true,
            "MixinConfigs": "client.forge.mixins.json",
            "ModSide": "CLIENT",
            "TweakClass": "org.spongepowered.asm.launch.MixinTweaker",
            "TweakOrder": "0",
            "FMLAT": "client_at.cfg",
    )

    enabled = false
}

mixin {
    disableRefMapWarning = true
    defaultObfuscationEnv searge
    add sourceSets.main, "client.mixins.refmap.json"
}

reobf {
    shadowJar {
        mappingType = "SEARGE"
    }
}

jar.dependsOn("shadowJar")

configurations {
    compileClasspath {
        attributes.attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
    }
    include {
        attributes.attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
    }
}

publishing {
    publications {
        maven(MavenPublication) {
            groupId = group
            artifactId = archivesBaseName
            version = version

            from components.java
        }
    }
}

tasks.reobfShadowJar.mustRunAfter shadowJar
tasks.reobfJar.dependsOn(shadowJar)