buildscript {
  repositories {
    maven { url = 'https://maven.minecraftforge.net' }
    mavenCentral()
    jcenter()
  }
}

plugins {
  id 'com.matthewprenger.cursegradle' version '1.4.0'
  id 'eclipse'
  id 'maven-publish'
  id 'net.minecraftforge.gradle' version '5.1.+'
  id 'nu.studer.credentials' version '1.0.7'
}

version = "${version_major}.${version_minor}.${version_patch}"
archivesBaseName = "${mod_id}_${mc_version}"

// Mojang ships Java 17 to end users in 1.18+.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)

println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
minecraft {
  // The mappings can be changed at any time, and must be in the following format.
  // snapshot_YYYYMMDD   Snapshot are built nightly.
  // stable_#            Stables are built at the discretion of the MCP team.
  // Use non-default mappings at your own risk. they may not always work.
  // Simply re-run your setup task after changing the mappings to update your workspace.
  mappings channel: 'official', version: "${mc_version}"
  // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.

  // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

  // Default run configurations.
  // These can be tweaked, removed, or duplicated as needed.
  runs {
    client {
      workingDirectory project.file('run')

      // Recommended logging data for a userdev environment
      // The markers can be changed as needed.
      // "SCAN": For mods scan.
      // "REGISTRIES": For firing of registry events.
      // "REGISTRYDUMP": For getting the contents of all registries.
      property 'forge.logging.markers', 'REGISTRIES'

      // Recommended logging level for the console
      property 'forge.logging.console.level', 'debug'

      mods {
        [[ --ModId-- ]] {
            source sourceSets.main
        }
      }
    }

    server {
      workingDirectory project.file('run')

      // Recommended logging data for a userdev environment
      // The markers can be changed as needed.
      // "SCAN": For mods scan.
      // "REGISTRIES": For firing of registry events.
      // "REGISTRYDUMP": For getting the contents of all registries.
      property 'forge.logging.markers', 'REGISTRIES'

      // Recommended logging level for the console
      property 'forge.logging.console.level', 'debug'

      mods {
        [[ --ModId-- ]] {
            source sourceSets.main
        }
      }
    }

    data {
      workingDirectory project.file('run')

      // Recommended logging data for a userdev environment
      // The markers can be changed as needed.
      // "SCAN": For mods scan.
      // "REGISTRIES": For firing of registry events.
      // "REGISTRYDUMP": For getting the contents of all registries.
      property 'forge.logging.markers', 'REGISTRIES'

      // Recommended logging level for the console
      property 'forge.logging.console.level', 'debug'

      // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
      args '--mod', '[[ --ModId-- ]]', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

      mods {
        [[ --ModId-- ]] {
            source sourceSets.main
        }
      }
    }
  }
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }

// Curse Maven
repositories {
  maven {
    url "https://www.cursemaven.com"
    content {
      includeGroup "curse.maven"
    }
  }
  maven {
    name = "Maven (local)"
    url = "file:///${project.projectDir}/.mcmodsrepo"
  }
}

dependencies {
  // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
  // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
  // The userdev artifact is a special name and will get all sorts of transformations applied to it.
  minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"

  // You may put jars on which you depend on in ./libs or you may define them like so..
  // compile "some.group:artifact:version:classifier"
  // compile "some.group:artifact:version"

  // Real examples
  // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
  // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

  // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
  // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

  // These dependencies get remapped to your current MCP mappings
  // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev'

  // For more info...
  // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
  // http://www.gradle.org/docs/current/userguide/dependency_management.html
}

// Example for how to get properties into the manifest for reading by the runtime..
jar {
  manifest {
    attributes([
      "Specification-Title": "${mod_name}",
      "Specification-Vendor": "${vendor_name}",
      "Specification-Version": "1", // We are version 1 of ourselves
      "Implementation-Title": project.name,
      "Implementation-Version": "${version}",
      "Implementation-Vendor" :"${mod_id}",
      "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
    ])
  }
}

// Example configuration to allow publishing using the maven-publish task
// This is the preferred method to reobfuscate your jar file
jar.finalizedBy('reobfJar')
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing
//publish.dependsOn('reobfJar')

publishing {
  publications {
    mavenJava(MavenPublication) {
      artifact jar
    }
  }
  repositories {
    maven {
      url "file:///${project.projectDir}/.mcmodsrepo"
    }
  }
}

curseforge {
  apiKey = "${credentials.curseforge_api_token}"
  project {
    id = "${curseforge_project_id}"
    changelog = '[[ --Change Log-- ]]'
    releaseType = "${curseforge_release_type}"
    addGameVersion("${mc_version}")
    addGameVersion("Forge")
  }
}

tasks.withType(JavaCompile).configureEach {
  options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}
