plugins {
    id 'java-library'
    id 'eclipse'
    id 'idea'
    id 'maven-publish'
    id 'net.neoforged.moddev' version '1.0.15'
}

version = mod_version
group = mod_group_id

repositories {
    mavenLocal()
}

base {
    archivesName = mod_name
}

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

neoForge {
    version = project.neoforge_version

    mods {
        extendedae {
            sourceSet sourceSets.main
        }
    }

    runs {
        client {
            client()
        }

        server {
            server()
        }

        gametestWorld {
            client()
            programArguments.addAll("--username", "EAEDev", "--quickPlaySingleplayer", "GametestWorld")
        }

        data {
            data()
            programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
        }

        gametest {
            type = "gameTestServer"
            gameDirectory = project.file("build/gametest")
        }

    }

}

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

repositories {
    maven {
        name = "TerraformersMC"
        url = "https://maven.terraformersmc.com/"
    }
    maven {
        name 'cursemaven'
        url = "https://www.cursemaven.com"
    }
    maven {
        name = "Modmaven"
        url = uri("https://modmaven.dev/")
    }
    maven {
        url = "https://maven.shedaniel.me/"
    }
    maven {
        url = "https://maven.latvian.dev/releases/"
    }
    mavenCentral()
}

dependencies {
    implementation "curse.maven:glodium-957920:5821676"
    implementation "org.appliedenergistics:appliedenergistics2:19.2.8"
    implementation "org.appliedenergistics:guideme:2.5.1"
    jarJar(implementation "de.mari_023:ae2wtlib_api:19.2.0")
    compileOnly "curse.maven:applied-flux-965012:5614830"
    compileOnly "dev.emi:emi-neoforge:1.1.10+1.21"
    compileOnly "curse.maven:mega-cells-622112:6005043"
    compileOnly "curse.maven:jade-324717:5427817"
    compileOnly "me.shedaniel:RoughlyEnoughItems-neoforge:16.0.729"
    compileOnly "mekanism:Mekanism:1.21.1-10.7.0.55"
    compileOnly "curse.maven:applied-mekanistics-574300:5978711"
    compileOnly "dev.latvian.mods:kubejs-neoforge:2101.7.1-build.188"
    compileOnly "dev.latvian.mods:rhino:2101.2.5-build.54"
    compileOnly "curse.maven:framedblocks-441647:6127891"
    compileOnly "curse.maven:advancedae-1084104:6225993"
    compileOnly "curse.maven:functional-storage-556861:6467726"
    compileOnly "mezz.jei:jei-1.21.1-neoforge:19.21.0.247"
    compileOnly "curse.maven:ae2-jei-integration-1074338:5748513"
    // runtime test
    runtimeOnly "curse.maven:applied-flux-965012:5614830"
    runtimeOnly "de.mari_023:ae2wtlib:19.2.1"
    runtimeOnly "curse.maven:jade-324717:5427817"
    runtimeOnly "curse.maven:mega-cells-622112:6005043"
    runtimeOnly "mekanism:Mekanism:1.21.1-10.7.0.55"
    // setup Xei
    switch(use_Xei) {
        case "emi":
            runtimeOnly "dev.emi:emi-neoforge:1.1.10+1.21"
            break
        case "rei":
            runtimeOnly "me.shedaniel:RoughlyEnoughItems-neoforge:16.0.729"
            runtimeOnly "dev.architectury:architectury-neoforge:13.0.1"
            runtimeOnly "curse.maven:cloth-config-348521:5424576"
            break
        case "jei":
            runtimeOnly "mezz.jei:jei-1.21.1-neoforge:19.21.0.247"
            runtimeOnly "curse.maven:ae2-jei-integration-1074338:5748513"
            break
    }
}

tasks.withType(ProcessResources).configureEach {
    var replaceProperties = [
            minecraft_version   : minecraft_version, minecraft_version_range: minecraft_version_range,
            neo_version         : neoforge_version, neo_version_range: neoforge_version_range,
            loader_version_range: loader_version_range,
            mod_id              : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version,
            mod_authors         : mod_authors, mod_description: mod_description,
    ]
    inputs.properties replaceProperties

    filesMatching(['META-INF/neoforge.mods.toml']) {
        expand replaceProperties
    }

    exclude(".cache/**")
}

publishing {
    publications {
        register('mavenJava', MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            url "file://${project.projectDir}/repo"
        }
    }
}

tasks.withType(JavaCompile).configureEach {
    options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}
