buildscript {
    repositories {
        maven { url = 'https://maven.minecraftforge.net' }
        jcenter()
        mavenCentral()
        maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
        classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT'
    }
}
plugins {
    id 'com.matthewprenger.cursegradle' version '1.4.0'
}

apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
apply plugin: 'org.spongepowered.mixin'

boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equalsIgnoreCase('false');

ext.buildnumber = 0
project.buildnumber = System.getenv('BUILD_NUMBER') != null ? System.getenv('BUILD_NUMBER') : "custom"

version = "${mc_update_version}-${mod_version}" + (dev ? ".${buildnumber}" : '')
group = 'com.jozufozu.flywheel'
archivesBaseName = 'flywheel'

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

minecraft {
    mappings channel: 'official', version: "${minecraft_version}"
    accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

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

            property 'forge.logging.markers', ''
            property 'forge.logging.console.level', 'debug'
            property 'fml.earlyprogresswindow', 'false'

            arg "-mixin.config=flywheel.mixins.json"

            mods {
                flywheel {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')

            property 'forge.logging.markers', 'REGISTRIES'
            property 'forge.logging.console.level', 'debug'

            arg "-mixin.config=flywheel.mixins.json"

            mods {
                flywheel {
                    source sourceSets.main
                }
            }
        }

        data {
            workingDirectory project.file('run')

            property 'forge.logging.markers', 'REGISTRIES'
            property 'forge.logging.console.level', 'debug'

            // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
            args '--mod', 'flywheel', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

            mods {
                flywheel {
                    source sourceSets.main
                }
            }
        }
    }
}

mixin {
    add sourceSets.main, "flywheel.refmap.json"
}

repositories {
    maven {
        name "tterrag maven"
        url "https://maven.tterrag.com/"
    }
}

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

    //implementation "org.joml:joml:1.10.1"

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

// Example for how to get properties into the manifest for reading by the runtime..
jar {
    manifest {
        attributes([
                "Specification-Title"     : "flywheel",
                //"Specification-Vendor": "flywheel authors",
                "Specification-Version"   : "1", // We are version 1 of ourselves
                "Implementation-Title"    : project.name,
                "Implementation-Version"  : project.version,
                //"Implementation-Vendor": "flywheel authors",
                "MixinConfigs"            : "flywheel.mixins.json",
                "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }
}

jar.finalizedBy('reobfJar')

javadoc {
    source = [sourceSets.main.allJava]
    // prevent java 8's strict doclint for javadocs from failing builds
    options.addStringOption('Xdoclint:none', '-quiet')
}

task sourcesJar(type: Jar) {
    from sourceSets.main.allSource
    archiveBaseName.set(project.archivesBaseName)
    archiveVersion.set("${project.version}")
    archiveClassifier.set('sources')
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    from javadoc.destinationDir
    archiveClassifier.set('javadoc')
}

artifacts {
    archives jar, sourcesJar, javadocJar
}

publishing {
    tasks.publish.dependsOn 'build'
    publications {
        mavenJava(MavenPublication) {
            artifact jar
            artifact sourcesJar
            artifact javadocJar
        }
    }

    repositories {
        if (project.hasProperty('mavendir')) {
            maven { url mavendir }
        }
    }
}

tasks.curseforge.enabled = !dev && project.hasProperty('jozu_curseforge_key')

curseforge {
    if (project.hasProperty('jozu_curseforge_key')) {
        apiKey = project.jozu_curseforge_key
    }

    project {
        id = project.projectId
        changelog = file('changelog.txt')
        releaseType = project.curse_type
        mainArtifact jar
    }
}