plugins {
	id 'java'
	id 'maven-publish'
	id 'java-gradle-plugin'
	id 'idea'
	id 'eclipse'
	id 'groovy'
	id 'checkstyle'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

group = 'net.fabricmc'
archivesBaseName = project.name
def baseVersion = '0.4'

def build = "local"
def ENV = System.getenv()
if (ENV.BUILD_NUMBER) {
	build = "jenkins #${ENV.BUILD_NUMBER}"
	version = baseVersion + "." + ENV.BUILD_NUMBER
} else {
	version = baseVersion + ".local"
}

repositories {
	maven {
		name = "Fabric"
		url = 'https://maven.fabricmc.net/'
	}
	mavenCentral()
}

dependencies {
	implementation gradleApi()

	// libraries
	implementation ('commons-io:commons-io:2.6')
	implementation ('org.zeroturnaround:zt-zip:1.13')
	implementation ('com.google.code.gson:gson:2.8.5')
	implementation ('com.google.guava:guava:28.0-jre')

	// game handling utils
	implementation ('net.fabricmc:stitch:0.4.6+build.74') {
		exclude module: 'enigma'
	}

	// tinyfile management
	implementation ('net.fabricmc:tiny-remapper:0.3.0.70')
	implementation ('net.fabricmc:tiny-mappings-parser:0.2.2.14')

	implementation ('net.fabricmc:lorenz-tiny:2.0.0+build.2') {
		transitive = false
	}

	// decompilers
	implementation ('net.fabricmc:procyon-fabric-compilertools:0.5.35.13')
	implementation ('org.jetbrains:intellij-fernflower:1.2.1.16')

	// source code remapping
	implementation ('org.cadixdev:mercury:0.1.0.fabric-SNAPSHOT')

	// Kapt integration
	compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72")

	// Testing
	testImplementation(gradleTestKit())
	testImplementation("org.spockframework:spock-core:1.3-groovy-2.4") {
		exclude module: 'groovy-all'
	}
}

jar {
	manifest {
		attributes 'Implementation-Version': version + " Build(" + build + ")"
	}
}

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

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

apply from: 'https://github.com/FabricMC/fabric-docs/raw/master/gradle/license.gradle'

license {
	exclude '**/loom/util/DownloadUtil.java'
}

checkstyle {
	configFile = file("checkstyle.xml")
	toolVersion = '8.25'
}

checkstyleMain {
	logging.setLevel(LogLevel.LIFECYCLE)
}

gradlePlugin {
	plugins {
		fabricLoom {
			id = "fabric-loom"
			implementationClass = "net.fabricmc.loom.LoomGradlePlugin"
		}
	}
}

import org.w3c.dom.Document
import org.w3c.dom.Element
import org.w3c.dom.Node

publishing {
	publications {
		plugin(MavenPublication) { publication ->
			groupId project.group
			artifactId project.archivesBaseName
			version project.version

			from components["java"]

			artifact sourcesJar
			artifact javadocJar
		}

		//Also publish a snapshot so people can use the latest version if they wish
		snapshot(MavenPublication) { publication ->
			groupId project.group
			artifactId project.archivesBaseName
			version baseVersion + "-SNAPSHOT"

			from components["java"]

			artifact sourcesJar
			artifact javadocJar
		}

		//Manually crate the plugin marker for snapshot versions
		snapshotPlugin(MavenPublication) { publication ->
			groupId "fabric-loom"
			artifactId "fabric-loom.gradle.plugin"
			version baseVersion + "-SNAPSHOT"

			pom.withXml({
				//Based of org.gradle.plugin.devel.plugins.MavenPluginPublishPlugin
				Element root = asElement()
				Document document = root.getOwnerDocument()
				Node dependencies = root.appendChild(document.createElement("dependencies"))
				Node dependency = dependencies.appendChild(document.createElement("dependency"))
				Node groupId = dependency.appendChild(document.createElement("groupId"))
				groupId.setTextContent("net.fabricmc")
				Node artifactId = dependency.appendChild(document.createElement("artifactId"))
				artifactId.setTextContent("fabric-loom")
				Node version = dependency.appendChild(document.createElement("version"))
				version.setTextContent(baseVersion + "-SNAPSHOT")
			})
		}
	}
	repositories {
		maven {
			url "http://mavenupload.modmuss50.me/"
			if (project.hasProperty('mavenPass')) {
				credentials {
					username 'buildslave'
					password project.getProperty('mavenPass')
				}
			}
		}
	}
}