plugins {
    id 'fabric-loom' version '0.7-SNAPSHOT'
    id 'maven-publish'
    id "checkstyle"
    id "com.github.hierynomus.license" version "0.15.0"
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(8)
        vendor = JvmVendorSpec.ADOPTOPENJDK
    }
}

version = mod_version

group = "dan200.computercraft"
archivesBaseName = "cc-restiched"

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
    maven { url "https://maven.shedaniel.me/" }
    maven {
        name "SquidDev"
        url "https://squiddev.cc/maven"
    }
}

configurations {
    implementation.extendsFrom shade
}

dependencies {
    checkstyle "com.puppycrawl.tools:checkstyle:8.25"

    minecraft "com.mojang:minecraft:${mc_version}"
    mappings "net.fabricmc:yarn:${mc_version}+build.${mappings_version}:v2"
    modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
    modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_api_version}"

    modApi("me.shedaniel.cloth:cloth-config-fabric:${cloth_config_version}") {
        exclude(group: "net.fabricmc.fabric-api")
    }
    modImplementation "io.github.prospector:modmenu:${modmenu_version}"
    modImplementation "me.shedaniel.cloth.api:cloth-utils-v1:${cloth_api_version}"

    implementation 'com.electronwill.night-config:toml:3.6.3'
    implementation 'com.google.code.findbugs:jsr305:3.0.2'

    shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'

    include "me.shedaniel.cloth.api:cloth-utils-v1:${cloth_api_version}"
    include 'com.electronwill.night-config:core:3.6.3'
    include 'com.electronwill.night-config:toml:3.6.3'
    include "me.shedaniel.cloth:cloth-config-fabric:${cloth_config_version}"

    modRuntime "me.shedaniel:RoughlyEnoughItems-api:5.12.248"
    modRuntime "me.shedaniel:RoughlyEnoughItems:5.12.248"
}

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

    from(sourceSets.main.resources.srcDirs) {
        include "fabric.mod.json"
        expand "version": project.version
    }

    from(sourceSets.main.resources.srcDirs) {
        exclude "fabric.mod.json"
    }
}

// ensure that the encoding is set to UTF-8, no matter what the system default is
// this fixes some edge cases with special characters not displaying correctly
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this task, sources will not be generated.
task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = "sources"
    from sourceSets.main.allSource
}

jar {
    from "LICENSE"

    from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
}


import com.hierynomus.gradle.license.tasks.LicenseCheck
import com.hierynomus.gradle.license.tasks.LicenseFormat

license {
    mapping("java", "SLASHSTAR_STYLE")
    strictCheck true

    ext.year = Calendar.getInstance().get(Calendar.YEAR)
}

[licenseMain, licenseFormatMain].forEach {
    it.configure {
        include("**/*.java")
        exclude("dan200/computercraft/api/**")
        header file('config/license/main.txt')
    }
}

[licenseTest, licenseFormatTest].forEach {
    it.configure {
        include("**/*.java")
        header file('config/license/main.txt')
    }
}

gradle.projectsEvaluated {
    tasks.withType(LicenseFormat) {
        outputs.upToDateWhen { false }
    }
}


task licenseAPI(type: LicenseCheck);
task licenseFormatAPI(type: LicenseFormat);
[licenseAPI, licenseFormatAPI].forEach {
    it.configure {
        source = sourceSets.main.java
        include("dan200/computercraft/api/**")
        header file('config/license/api.txt')
    }
}

// configure the maven publication
publishing {
    publications {
        mavenJava(MavenPublication) {
            // add all the jars that should be included when publishing to maven
            artifact(remapJar) {
                builtBy remapJar
            }
            artifact(sourcesJar) {
                builtBy remapSourcesJar
            }
        }
    }

    // select the repositories you want to publish to
    repositories {
        // uncomment to publish to the local maven
        // mavenLocal()
    }
}
