plugins {
    id 'eclipse'
    id 'idea'
    id 'maven-publish'
    id 'net.neoforged.gradle' version '[6.0.18,6.2)'
    id 'org.spongepowered.mixin' version '0.7.+'
}

def secrets = new Properties()
def secretsFile = file('secrets.properties')
if (secretsFile.exists()) {
    secretsFile.withInputStream {
        stream -> secrets.load(stream)
    }

    fileTree("secrets").matching {
        include "**/*.properties"
    }.each {
        File file ->
            file.withInputStream {
                stream -> secrets.load(stream)
            }
    }
}

version = "${project.minecraft_version}-${project.mod_version}"
group = 'com.github.alexthe666.rats'

base {
    archivesName = mod_name
}

java.toolchain.languageVersion = JavaLanguageVersion.of(17)

compileJava.options.compilerArgs << "-Xlint:all,-classfile,-processing,-deprecation" << "-Werror"

minecraft {
    mappings channel: mapping_channel, version: mapping_version

    copyIdeResources = true

    accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

    runs {
        configureEach {
            workingDirectory project.file('run')
            property 'forge.logging.console.level', 'debug'
            property 'fml.earlyprogresswindow', 'false'
            property 'mixin.env.disableRefMap', 'true'
			arg '-mixin.config=citadel.mixins.json'
			arg '-mixin.config=rats.mixins.json'

            mods {
                "${mod_id}" {
                    source sourceSets.main
                }
            }
        }

        client {
            taskName "Minecraft_Client_${project.minecraft_version}"
            property 'forge.enabledGameTestNamespaces', mod_id
            args '--username', secrets.getProperty("username")?: 'Dev', secrets.getProperty("uuid") ? '--uuid' : '', secrets.getProperty("uuid")?: ''
        }

        server {
            taskName "Minecraft_Server_${project.minecraft_version}"
            property 'forge.enabledGameTestNamespaces', mod_id
            args '--nogui'
        }

       gameTestServer {
           taskName "Minecraft_GameTestServer_${project.minecraft_version}"
            property 'forge.enabledGameTestNamespaces', mod_id
        }

        data {
            taskName "Minecraft_Data_${project.minecraft_version}"
            workingDirectory project.file('run-data')
            args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
        }
    }
}

sourceSets.main.resources { srcDir 'src/generated/resources' }

repositories {
    maven {
        name 'Curseforge Maven'
        url "https://www.cursemaven.com"
        content {
            includeGroup "curse.maven"
        }
    }
    maven {
        name 'Jared\'s Maven' // JEI
        url 'https://maven.blamejared.com/'
    }
}

dependencies {
    minecraft "net.neoforged:forge:${project.minecraft_version}-${project.neo_version}"

    implementation fg.deobf("mezz.jei:jei-${project.minecraft_version}-forge:${project.jei_version}")
    implementation fg.deobf("curse.maven:citadel-331936:5143956")
    implementation fg.deobf("curse.maven:jade-324717:4681833")

    runtimeOnly fg.deobf("curse.maven:spark-361579:4738952")
	runtimeOnly fg.deobf("curse.maven:debug-utils-783008:4644077")
	runtimeOnly fg.deobf("curse.maven:armorpoints-396094:4613606")

    annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
}

mixin {
    add sourceSets.main, "${project.mod_id}.refmap.json"
    config "${project.mod_id}.mixins.json"
}

tasks.named('jar', Jar).configure {
    manifest {
        attributes([
                'Specification-Title'     : mod_id,
                'Specification-Vendor'    : "AlexThe666",
                'Specification-Version'   : "1",
                'Implementation-Title'    : project.name,
                'Implementation-Version'  : project.jar.archiveVersion,
                'Implementation-Vendor'   : "AlexThe666",
                'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }

    finalizedBy 'reobfJar'
}

tasks.withType(JavaCompile).configureEach {
    options.encoding = 'UTF-8'
}
