// Hacky fix for weird gson issues with Fabric
buildscript {
    dependencies {
        classpath 'com.google.code.gson:gson:2.10.1'
    }
}

plugins {
    // Required for NeoGradle
    id "org.jetbrains.gradle.plugin.idea-ext" version "1.1.7"

    // Used for changelog generation
    id 'net.minecraftforge.gradleutils' version '2.2.0'
}

changelog {
    fromTag '3.2.0'
}

ext {
    mod_version = gradleutils.getTagOffsetVersion()
    changelog_file = rootProject.file("build/changelog.txt")
    trimChangelog = (String text) -> {
        def m = text =~ /(?s) - (?:[0-9.]+) (.+?)(?=( - )|$)/
        return '```\n' + m[0][1].replaceAll(/(?m)^ */, '')
    }
}

version = "${minecraft_version}-${mod_version}"

subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'maven-publish'
    
    java.toolchain.languageVersion = JavaLanguageVersion.of(21)
    java.withSourcesJar()
    java.withJavadocJar()

    version = rootProject.version

    jar {
        manifest {
            attributes([
                'Specification-Title'     : mod_name,
                'Specification-Vendor'    : mod_author,
                'Specification-Version'   : mod_version,
                'Implementation-Title'    : project.name,
                'Implementation-Version'  : mod_version,
                'Implementation-Vendor'   : mod_author,
                'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
                'Timestamp'               : System.currentTimeMillis(),
                'Built-On-Java'           : "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})",
                'Build-On-Minecraft'      : minecraft_version
            ])
        }
    }
    
    repositories {
        mavenCentral()
        maven {
            name = 'Sponge / Mixin'
            url = 'https://repo.spongepowered.org/repository/maven-public/'
        }
    }

    tasks.withType(JavaCompile).configureEach {
        it.options.encoding = 'UTF-8'
        it.options.release.set(21)
    }

    // Disables Gradle's custom module metadata from being published to maven. The
    // metadata includes mapped dependencies which are not reasonably consumable by
    // other mod developers.
    tasks.withType(GenerateModuleMetadata) {
        enabled = false
    }
}