// define the properties file
ext.configFile = file "gradle.properties"
configFile.withReader {
    // read config.  it shall from now on be referenced as simply config or as project.config
    def prop = new Properties()
    prop.load(it)
    project.ext.config = new ConfigSlurper().parse prop
}

// For those who want the bleeding edge
buildscript {
    repositories {
        maven { url = 'https://files.minecraftforge.net/maven' }
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
    }
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'maven-publish'
apply plugin: 'eclipse'

///////////////////////////////////////////////////
// IDE Settings
///////////////////////////////////////////////////
idea {
    project {
        languageLevel = '1.8'
    }
}

///////////////////////////////////////////////////
// ForgeGradle
///////////////////////////////////////////////////
version = (hasProperty("CIRevision") ? CIRevision : config.mod_version)
group = config.group_name
archivesBaseName = "${config.mod_id}-${config.minecraft_version}"
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.

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

minecraft {
    mappings channel: "snapshot", version: config.mcp_mappings
    //version = config.minecraft_version + "-" + config.forge_version // grab latest forge
    //makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
    accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

    //replace '@mod_version@', version
    //replace '@mod_id@', config.mod_id
    //replace '@ci_build@', hasProperty("CIRevision") ? 'true' : 'false'

    //replaceIn 'TwilightForestMod.java'
    //replace '@VERSION@', project.version

    runs {
        client {
            workingDirectory project.file('run')

            property 'forge.logging.markers', 'REGISTRIES'

            property 'forge.logging.console.level', 'debug'
            property 'fml.earlyprogresswindow', 'false'
            property 'mixin.env.disableRefMap', 'true'

            mods {
                twilightforest {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')

            // Recommended logging level for the console
            property 'forge.logging.console.level', 'debug'
            property 'mixin.env.disableRefMap', 'true'

            mods {
                twilightforest {
                    source sourceSets.main
                }
            }
        }

        data {
            workingDirectory project.file('run')

            properties 'fml.earlyprogresswindow': 'false'
            property 'mixin.env.disableRefMap', 'true'

            mods {
                twilightforest {
                    source sourceSets.main
                }
            }
            args '--mod', 'twilightforest', '--all',
                    '--existing', '"' + file('src/main/resources/') + '"',
                    '--existing', '"' + file('src/generated/resources/') + '"',
                    '--output', '"' + file('src/generated/resources/') + '"'
        }
    }
}

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

/*
processResources {
    //replaceIn 'assets/twilightforest/patchouli_books/guide/book.json'
    //replace '@EDITION@', project.version

    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        //include '.info'
        //include '.properties'
        include 'assets/twilightforest/patchouli_books/guide/book.json'

        // replace version and mcversion
        expand ([
                'version':project.version,
                'mcversion':project.minecraft.version,
                'forge_version': config.forge_version,
                'mod_version': config.mod_version,
                'minecraft_version': config.minecraft_version,
                'edition': (project.version - (config.mod_version + '.')),
                's': '$'
        ])
    }

    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
        exclude 'assets/twilightforest/patchouli_books/guide/book.json'
    }
}*/

compileJava {
    options.encoding = 'UTF-8'
}

jar {
    classifier = 'universal'
}

repositories {
    maven {
        name 'progwm\'s Maven' // JEI + Mantle + TCon
        url 'https://dvs1.progwml6.com/files/maven'
    }
    maven {
        name 'tterrag\'s Maven' // CTM
        url 'https://maven.tterrag.com/'
    }
    maven {
        // Temporary mappings
        url 'https://www.dogforce-games.com/maven/'
    }
    maven {
        name 'Jared\'s Maven' // Immersive Engineering + Patchouli
        url 'https://maven.blamejared.com/'
    }
    maven {
        name 'theillusivec4\'s Maven' //Curios
        url 'https://maven.theillusivec4.top/'
    }
    /*maven {
        name 'player\'s Maven' // Forestry
        url 'http://maven.ic2.player.to/'
    }*/
}

dependencies {
    // progwml6
    compileOnly fg.deobf("mezz.jei:jei-1.16.5:${jei_version}:api")
    runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:${jei_version}")

    //implementation fg.deobf("slimeknights.mantle:Mantle:${minecraft_sub_version}-${mantle_version}")
    //implementation fg.deobf("slimeknights:TConstruct:${minecraft_version}-${tcon_version}")

    // tterrag
    implementation fg.deobf("team.chisel.ctm:CTM:${ctm_version}")

    // blamejared
    implementation fg.deobf("blusunrize.immersiveengineering:ImmersiveEngineering:${immersive_engineering_version}")
    implementation fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}")

    // theillusivec4
    compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}:api")
    runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}")

    // player
    //deobfCompile "net.sengir.forestry:forestry_${minecraft_version}:${forestry_version}"

    minecraft "net.minecraftforge:forge:${project.minecraft_version}-${project.forge_version}"
}

jar.finalizedBy('reobfJar')

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifact jar
            artifact sourceJar
            setGroupId 'teamtwilight'
            setArtifactId mod_id
        }
    }
    repositories {
        maven {
            //url "file:///${project.projectDir}/mcmodsrepo"
            url "https://modmaven.dev:443/artifactory/local-releases"
            credentials {
                username System.getenv('ARTIFACTORY_USER')
                password System.getenv('ARTIFACTORY_PASS')
            }
        }
    }
}

task sourceJar(type: Jar, dependsOn: 'classes') {
    from sourceSets.main.allSource
    classifier = 'sources'
}
