buildscript {
    dependencies {
        classpath 'com.github.dexman545:Outlet:1.6.1'
    }
}
plugins {
    id 'fabric-loom' version '1.7-SNAPSHOT'
    id 'maven-publish'
    id 'com.modrinth.minotaur' version '2.+'
    id 'org.ajoberstar.reckon' version '0.13.1'
}
apply plugin: 'io.github.dexman545.outlet'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
    withSourcesJar()
}

outlet.allowSnapshotsForProject = false
outlet.mcVersionRange = ">=${project.minecraft_version}"

group = project.group
description = project.displayname
archivesBaseName = project.name

loom {
    mixin.defaultRefmapName = 'minelp.mixin.refmap.json'
    accessWidenerPath = file('src/main/resources/minelp.aw')
}

reckon {
    scopeFromProp()
    stageFromProp('beta', 'rc', 'final')
}

repositories {
    mavenLocal()
    maven { name 'modmenu'; url 'https://maven.terraformersmc.com/releases' }
    maven { name 'minelp'; url 'https://repo.minelittlepony-mod.com/maven/snapshot' }
    maven { name 'minelp-release'; url 'https://repo.minelittlepony-mod.com/maven/release' }
}

dependencies {
    minecraft "com.mojang:minecraft:${project.minecraft_version}"
    mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
    modApi "net.fabricmc:fabric-loader:${project.loader_version}"

    modImplementation "com.ptsmods:devlogin:3.4.1"

    modApi fabricApi.module("fabric-api-base", project.fabric_version)
    modApi fabricApi.module("fabric-lifecycle-events-v1", project.fabric_version)
    modApi fabricApi.module("fabric-resource-loader-v0", project.fabric_version)
    modApi fabricApi.module("fabric-networking-api-v1", project.fabric_version)

    modApi "com.minelittlepony:kirin:${project.kirin_version}"
    include "com.minelittlepony:kirin:${project.kirin_version}"

    modApi "com.minelittlepony:mson:${project.mson_version}"
    include "com.minelittlepony:mson:${project.mson_version}"

    modImplementation "com.minelittlepony:hdskins:${project.hd_skins_version}"
    modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}"
}

//
// Imports the Background Ponies from the MLP Community Skin Pack
//
task copyBGPones(type: Copy) {

    def illegals = /[^a-z0-9_\/.-]/

    from "skins/Background Ponies"
    into temporaryDir

    eachFile {
        if (it.name =~ illegals) {
            logger.warn("Sanitizing file with illegal characters: ${it.path}")
            it.name = it.name.replaceAll(/\s/, '_').replaceAll(illegals, '')
        }
    }
}
processResources {
    inputs.property "version", project.version.toString()

    filesMatching("fabric.mod.json") {
        expand "version": project.version.toString(),
                "minecraftVersion": ">=${project.minecraft_version}",
                "loaderVersion": ">=${project.loader_version}",
                "fabricVersion": ">=${project.fabric_version}",
                "kirinVersion": ">=${project.kirin_version}",
                "msonVersion": ">=${project.mson_version}"
    }

    from 'LICENSE'

    exclude "/assets/minelittlepony/textures/entity/pony"
    from(copyBGPones) {
        into "/assets/minelittlepony/textures/entity/pony"
    }
}

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

tasks.modrinth {
    onlyIf {
      def stage = version.version.stage.value
      stage == null || stage.name != 'beta'
    }
}

modrinth {
    token = System.env.MODRINTH_KEY
    projectId = project.modrinth_project_id
    //featured = true
    versionNumber = version.toString()
    versionName = archivesBaseName + '-' + version
    changelog = "[Changelog](https://github.com/MineLittlePony/MineLittlePony/releases/tag/${version.toString()})"
    loaders = ['fabric', 'quilt']
    uploadFile = remapJar
    outlet.mcVersions().each{ver ->
      gameVersions.add ver
    }
    dependencies {
       required.project 'P7dR8mSH' // Fabric API
       required.project '9aNz8Zqn' // Kirin
       optional.project 'FzE9gshV' // HD Skins
       optional.project 'h9pJxJR9' // Big Pony
    }
}

publishing {
    publications {
        maven(MavenPublication) {
            from components.java

            pom {
                name = "MineLittlePony"
                description = "Ponify your Minecraft experience!"
                url = "https://minelittlepony-mod.com"
                licenses {
                    license {
                        name = "MIT Public License"
                        url = "https://tlo.mit.edu/learn-about-intellectual-property/software-and-open-source-licensing"
                    }
                }
                developers {
                    developer {
                        id = "killjoy1221"
                        name = "Matthew Messinger"
                        email = "mattmess1221@gmail.com"
                    }
                    developer {
                        id = "sollace"
                    }
                }
                scm {
                    connection = 'scm:git:git://github.com/MineLittlePony/MineLittlePony.git'
                    developerConnection = 'scm:git:ssh://github.com/MineLittlePony/MineLittlePony.git'
                    url = 'https://github.com/MineLittlePony/MineLittlePony'
                }
            }
        }
    }

    repositories {
        maven {
            name = "MineLittlePony"
            def stage = version.version.stage.value
            url = "s3://repo.minelittlepony-mod.com/maven/${stage != null && stage.name == 'beta' ? 'snapshot' : 'release'}"
            credentials(AwsCredentials) {
                accessKey = System.env.ACCESS_KEY
                secretKey = System.env.SECRET_KEY
            }
        }
    }
}