Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
minecraftforge
GitHub Repository: minecraftforge/minecraftforge
Path: blob/1.21.x/build_shared.gradle
6513 views
import net.minecraftforge.forge.tasks.CleanProperties

apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'net.minecraftforge.gradleutils'

group = 'net.minecraftforge'
version = VERSION
println("Version: $version")

repositories {
    mavenCentral()
    maven gradleutils.forgeMaven
    maven gradleutils.minecraftLibsMaven
    //mavenLocal()
}

tasks.withType(Javadoc).configureEach {
    options.tags = [
        'apiNote:a:<em>API Note:</em>',
        'implSpec:a:<em>Implementation Requirements:</em>',
        'implNote:a:<em>Implementation Note:</em>'
    ]
    options.addStringOption('Xdoclint:all,-missing', '-public')
}

// We need to write the manifest to the binary file so we have properly versioned packaged at dev time.
tasks.register('writeManifest') {
    doLast {
        if (plugins.findPlugin('net.minecraftforge.gradle.patcher')) // Forge project
            universalJar.manifest.writeTo(rootProject.file('src/main/resources/META-INF/MANIFEST.MF'))
        else
            jar.manifest.writeTo(project.file('src/main/resources/META-INF/MANIFEST.MF'))
    }
}

tasks.register('generateResources') {
    dependsOn('writeManifest')
}

// Make sure out manifests get written before compiling the code, IDEA calls this task if you tell it to use the gradle build.
tasks.withType(JavaCompile).configureEach {
    dependsOn 'generateResources'
    dependsOn 'processResources' // Needed because we merge the output of this with the output of the compile task. And gradle detects downstream tasks using the output without a hard dep
    options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
    options.warnings = false // Shutup deprecated for removal warnings
    options.forkOptions.jvmArgs += '-Xmx6G' // Needed to make compiling faster, and not run out of heap space in some cases.
}

// Merge the resources and classes into the same directory. We'll need to split them at runtime because
// Minecraft and Forge are in the same sourceSet as they are inter dependent.. for now..
sourceSets.each {
    def dir = layout.buildDirectory.dir("classes/java/$it.name")
    it.output.resourcesDir = dir
    it.java.destinationDirectory = dir
}

tasks.register('copyEclipseSettings') {
    doLast {
        rootProject.fileTree('ide/eclipse/template/.settings/').matching { include '**/*.prefs' }.each { file ->
            def target = project.file('.settings/' + file.name)
            def temp = new CleanProperties().load(file)
            def exst = new CleanProperties().load(target)
            exst.put('eclipse.preferences.version', '1')
            exst.putAll(temp)
            exst.store(target)
        }
    }
}

// TODO: [Gradle][IntelliJ] Auto trigger these tasks on import.
eclipse {
    // Run everytime eclipse builds the code
    //autoBuildTasks writeManifest
    // Run when importing the project
    synchronizationTasks generateResources, copyEclipseSettings, eclipseClasspath, eclipseProject
}

idea {
    module {
        // IntelliJ IDEA does not do this by itself anymore...
        downloadJavadoc = true
        downloadSources = true
    }
}