buildscript {
	repositories {
		// These repositories are only for Gradle plugins, put any other repositories in the repository block further below
		maven { url = 'https://maven.minecraftforge.net' }
		mavenCentral()
	}
	dependencies {
		classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '6.0.+', changing: true
	}
}

plugins {
	id "java"
	id "java-library"
	id "com.diffplug.spotless" version "6.1.2"
	id "com.github.node-gradle.node" version "3.0.1"
	id "com.github.johnrengelman.shadow" version "7.1.2"
	id "com.modrinth.minotaur" version "2.+"
	id "com.matthewprenger.cursegradle" version "1.4.0"
}

apply plugin: "net.minecraftforge.gradle"

group = "de.bluecolored.bluemap.forge"
version = System.getProperty("bluemap.version") ?: "?" // set by BlueMapCore
archivesBaseName = 'bluemap'

def javaTarget = 17
java {
	toolchain.languageVersion = JavaLanguageVersion.of(javaTarget)
}

minecraft {
	mappings channel: 'official', version: '1.20'

	runs {
		server {
			workingDirectory project.file('run')
			property 'forge.logging.markers', 'REGISTRIES'
			property 'forge.logging.console.level', 'debug'

			mods {
				bluemap {
					source sourceSets.main
				}
			}
		}
	}
}

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

repositories {
	mavenCentral()
	maven {
		setUrl("https://libraries.minecraft.net")
	}
	maven {
		setUrl("https://jitpack.io")
	}
}

configurations {
	implementation.extendsFrom(shadowInclude)
}

dependencies {
	minecraft 'net.minecraftforge:forge:1.20-46.0.1'

	shadowInclude ("de.bluecolored.bluemap.common:BlueMapCommon") {
		//exclude dependencies provided by forge
		exclude (group: "com.google.guava", module: "guava")
		exclude (group: "com.google.code.gson", module: "gson")
		exclude (group: "org.apache.commons", module: "commons-lang3")
		exclude (group: "commons-io", module: "commons-io")
		exclude (group: "com.mojang", module: "brigadier")
	}

	testImplementation ("org.junit.jupiter:junit-jupiter:5.8.2")
	testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.2")
}

spotless {
	java {
		target ("src/*/java/**/*.java")

		licenseHeaderFile("../../HEADER")
		indentWithSpaces()
		trimTrailingWhitespace()
	}
}

jar {
	manifest {
		attributes([
				"Specification-Title"     : "bluemap",
				"Specification-Vendor"    : "bluemap",
				"Specification-Version"   : "1", // We are version 1 of ourselves
				"Implementation-Title"    : project.name,
				"Implementation-Version"  : project.jar.archiveVersion,
				"Implementation-Vendor"   : "bluemap",
				"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
		])
	}
}

jar.finalizedBy('reobfJar')

tasks.withType(JavaCompile).configureEach {
	options.encoding = "utf-8"
}

tasks.withType(AbstractArchiveTask).configureEach {
	setReproducibleFileOrder(true)
	setPreserveFileTimestamps(false)
}

test {
	useJUnitPlatform()
}

shadowJar {
	def version = System.getProperty("bluemap.version") ?: "" // set by BlueMapCore
	destinationDirectory.set(file("../../build/release"))
	archiveFileName.set("BlueMap-${project.version}-${project.name}.jar")

	configurations = [project.configurations.shadowInclude]

	//relocate ("com.flowpowered.math", "de.bluecolored.shadow.flowpowered.math") //DON"T relocate this, because the API depends on it
	relocate ("com.typesafe.config", "de.bluecolored.shadow.typesafe.config")
	relocate ("de.bluecolored.bluenbt", "de.bluecolored.shadow.bluenbt")
	relocate ("org.spongepowered.configurate", "de.bluecolored.shadow.configurate")
	relocate ("com.github.benmanes.caffeine", "de.bluecolored.shadow.benmanes.caffeine")
	relocate ("org.aopalliance", "de.bluecolored.shadow.aopalliance")
	relocate ("javax.inject", "de.bluecolored.shadow.javax.inject")
	relocate ("org.checkerframework", "de.bluecolored.shadow.checkerframework")
	relocate ("org.codehaus", "de.bluecolored.shadow.codehaus")
	relocate ("io.leangen.geantyref", "de.bluecolored.shadow.geantyref")
	relocate ("io.airlift", "de.bluecolored.shadow.airlift")
	relocate ("net.jpountz", "de.bluecolored.shadow.jpountz")

	relocate ("com.google.errorprone", "de.bluecolored.shadow.google.errorprone")
	relocate ("com.google.inject", "de.bluecolored.shadow.google.inject")

	relocate ("org.apache.commons.dbcp2", "de.bluecolored.shadow.apache.commons.dbcp2")
	relocate ("org.apache.commons.logging", "de.bluecolored.shadow.apache.commons.logging")
	relocate ("org.apache.commons.pool2", "de.bluecolored.shadow.apache.commons.pool2")
}

processResources {
	from(sourceSets.main.resources.srcDirs) {
		include 'mcmod.info','META-INF/mods.toml'
		duplicatesStrategy = DuplicatesStrategy.WARN

		expand (
				version: project.version
		)
	}
}

afterEvaluate {
	reobf {
		shadowJar {
			mappings = createMcpToSrg.output
		}
	}
}

task release {
	dependsOn(build)
}

modrinth {
	token = System.getenv("MODRINTH_TOKEN")
	projectId = "swbUV1cr"
	versionNumber = "${project.version}-${project.name}"
	changelog = file("../../release.md")
			.getText()
			.replace("{version}", project.version.toString())
	uploadFile = shadowJar
	gameVersions = ["1.20", "1.20.1", "1.20.2", "1.20.3", "1.20.4"]
}

curseforge {
	apiKey = System.getenv("CURSEFORGE_TOKEN") ?: ""
    project {
		id = "406463"
		changelogType = "markdown"
		changelog = file("../../release.md")
				.getText()
				.replace("{version}", project.version.toString())
		releaseType = "release"

		addGameVersion "Forge"

		addGameVersion "Java 18"
		addGameVersion "Java 17"

		addGameVersion "1.20"
		addGameVersion "1.20.1"
		addGameVersion "1.20.2"
		addGameVersion "1.20.3"
		addGameVersion "1.20.4"

		mainArtifact shadowJar
	}
	options {
		javaVersionAutoDetect = false
		javaIntegration = false
		forgeGradleIntegration = false
	}
}

task publish {
	dependsOn(tasks.findByName("modrinth"))
	dependsOn(tasks.findByName("curseforge"))
}
