plugins {
	id 'fabric-loom' version '1.7-SNAPSHOT'
	id 'maven-publish'
	id "me.modmuss50.mod-publish-plugin" version "0.5.1"
}

version = "${project.mod_version}+${project.minecraft_version}"
group = project.maven_group

repositories {
	// Add repositories to retrieve artifacts from in here.
	// You should only use this when depending on other mods because
	// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
	// See https://docs.gradle.org/current/userguide/declaring_repositories.html
	// for more information about repositories.
	flatDir {
		dirs 'libs'
	}
	maven { url "https://maven.terraformersmc.com/releases" }
	maven { url "https://maven.shedaniel.me/" }
	maven { url "https://maven.isxander.dev/releases" }
	maven { url "https://maven.isxander.dev/snapshots" } //For minecraft snapshots
	maven {
		url 'https://repo.maven.apache.org/maven2'
		name 'Maven Central'
	}
	maven {
		name = "meteor-maven"
		url = "https://maven.meteordev.org/releases"
	}
	maven { url "https://repo.codemc.io/repository/maven-public/" } // For Occlusion Culling library
	maven { url "https://repo.nea.moe/releases" } // For neu repoparser

	maven { url "https://maven.azureaaron.net/releases" }
	maven { url "https://maven.azureaaron.net/snapshots" }
}

dependencies {
	testImplementation "net.fabricmc:fabric-loader-junit:${project.loader_version}"
	// To change the versions see the gradle.properties file
	minecraft "com.mojang:minecraft:${project.minecraft_version}"
	//Layered Yarn & Mojmap - used to fill in intermediary names
	mappings loom.layered {
		//Using Mojmap breaks runClient, so uncomment only for snapshots when temp mappings are needed
		//officialMojangMappings()
		mappings("net.fabricmc:yarn:${project.yarn_mappings}:v2")
	}
	modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"

	// Fabric API
	modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"

	// YACL
	include modImplementation("dev.isxander:yet-another-config-lib:${project.yacl_version}-fabric")

	// HM API (Hypixel Mod API Library)
	include modImplementation("net.azureaaron:hm-api:${project.hm_api_version}")

	// Mod Menu
	modImplementation "com.terraformersmc:modmenu:${project.mod_menu_version}"

	// REI
	modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}"
	//modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}"

	// EMI
	modCompileOnly "dev.emi:emi-fabric:${project.emi_version}:api"
	//modLocalRuntime "dev.emi:emi-fabric:${project.emi_version}"

	compileOnly "com.demonwav.mcdev:annotations:${project.mcdev_annotations_version}"

	include modImplementation("meteordevelopment:discord-ipc:1.1")

	// Occlusion Culling (https://github.com/LogisticsCraft/OcclusionCulling)
	include implementation("com.logisticscraft:occlusionculling:${project.occlusionculling_version}")

	// NEU RepoParser
	include implementation("moe.nea:neurepoparser:${project.repoparser_version}")

	// JGit used pull data from the NEU item repo
	include implementation("org.eclipse.jgit:org.eclipse.jgit:${project.jgit_version}")

	// Apache Commons Math
	include implementation("org.apache.commons:commons-math3:${project.commons_math_version}")
}

loom {
	accessWidenerPath = file("src/main/resources/skyblocker.accesswidener")

	mixin {
		useLegacyMixinAp = false
	}
}

base {
	archivesName = project.archives_base_name
}

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

	filesMatching("fabric.mod.json") {
		expand "version": project.version
	}
}

tasks.withType(JavaCompile).configureEach {
	it.options.release = 21
}

java {
	sourceCompatibility = JavaVersion.VERSION_21
	targetCompatibility = JavaVersion.VERSION_21
}

jar {
	from("LICENSE") {
		rename { "${it}_${base.archivesName.get()}"}
	}
}

test {
	useJUnitPlatform()
}

publishMods {
	file = remapJar.archiveFile
	changelog = System.getenv('CHANGELOG')
	version = "v${project.version}"
	displayName = "Skyblocker ${mod_version} for ${minecraft_version}"
	modLoaders.add("fabric")
	type = STABLE

	modrinth {
		accessToken = System.getenv("MODRINTH_TOKEN")
		projectId = modrinth_id
		minecraftVersions.add(minecraft_version)
		announcementTitle = "<:modrinth:1237114573354438696> Download from Modrinth"
		requires("fabric-api")
		optional("modmenu", "rei", "emi")
	}

	curseforge {
		accessToken = System.getenv("CURSEFORGE_TOKEN")
		projectId = curseforge_id
		minecraftVersions.add(minecraft_version)
		announcementTitle = "<:curseforge:900697838453936149> Download from CurseForge"
		projectSlug = "skyblocker"
		requires("fabric-api")
		optional("roughly-enough-items", "emi")
	}

	discord {
		webhookUrl = System.getenv("DISCORD_WEBHOOK")
		username = "Changelog"
		content = changelog.map { "<@&1134565945482948638>\n## ${displayName}\n" + it}
	}
}

// configure the maven publication
publishing {
	publications {
		mavenJava(MavenPublication) {
			from components.java
		}
	}

	// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
	repositories {
		// Add repositories to publish to here.
		// Notice: This block does NOT have the same function as the block in the top level.
		// The repositories here will be used for publishing your artifact, not for
		// retrieving dependencies.
	}
}