Untitled

mail@pastecode.io avatar
unknown
java
7 months ago
5.5 kB
4
Indexable
Never
import net.minecraftforge.gradle.delayed.DelayedFile
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
//import org.gradle.api.internal.file.copy.DefaultFileCopyDetails

buildscript {
    repositories {
        mavenCentral()
        jcenter()
        maven {
            name = "forge"
            url = "https://maven.minecraftforge.net"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath ('com.anatawa12.forge:ForgeGradle:1.2-1.1.+') {
            changing = true
        }
    }
}

plugins {
    id 'com.github.johnrengelman.shadow' version '6.1.0' apply false
}

apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'forge'

version = "1.0"
group = "com.example.mod"
archivesBaseName = "ExampleMod"

targetCompatibility = sourceCompatibility = JavaVersion.VERSION_1_8
ext.dependenciesPath = System.getenv("GITHUB_ACTIONS") != null ? "../Dependencies" : '../../Dependencies';
ext.joinedAnnotationProcessor = resources.text.fromString("""com.llamalad7.mixinextras.ap.MixinExtrasAP
org.spongepowered.tools.obfuscation.MixinObfuscationProcessorInjection
org.spongepowered.tools.obfuscation.MixinObfuscationProcessorTargets""").asFile();

minecraft {
    mappingsVersion = 12
    version = "1.7.10-10.13.4.1614-1.7.10"
    runDir = "idea"
}

configurations {
    shadowMixins
    implementation.extendsFrom shadowMixins
    //shadow
    //implementation.extendsFrom shadow
}

dependencies {
    // Main
    shadow files(dependenciesPath + '/mixinextras-common-0.2.0-rc.4.jar')

    // Mixins
    shadowMixins 'com.google.guava:guava:21.0'
    shadowMixins 'com.google.code.gson:gson:2.2.4'
    shadowMixins 'org.ow2.asm:asm-tree:9.5'
    shadowMixins 'org.ow2.asm:asm-commons:9.5'
    shadowMixins 'org.ow2.asm:asm-util:9.5'

    shadowMixins files(dependenciesPath + '/mixin-0.8.5.jar')
}

shadowJar {
    configurations = [project.configurations.shadow]
    destinationDirectory = file 'build/tmp'
    classifier = 'main'

    // Mixins extras
    relocate 'com.llamalad7.mixinextras', 'com.example.mod.mixinextras'
}

task shadowJarMixins(type: ShadowJar) {
    configurations = [project.configurations.shadowMixins]
    destinationDirectory = file 'build/tmp'
    classifier = 'mixins'

    // Mixins
    relocate 'org.objectweb.asm', 'org.spongepowered.asm.lib'
    relocate 'com.google', 'org.spongepowered.libraries.com.google'

    // Exclude stuff that's compiled for Java 16
    exclude 'org/spongepowered/asm/service/modlauncher/*'
    exclude 'org/spongepowered/asm/launch/MixinTransformationServiceLegacy*'
    exclude 'org/spongepowered/asm/launch/MixinLaunchPlugin*'
    exclude 'org/spongepowered/asm/launch/MixinTransformationService*'
    exclude 'org/spongepowered/asm/launch/platform/container/ContainerHandleModLauncherEx*'
    exclude 'META-INF/services/cpw.mods.modlauncher.api.ITransformationService'
    exclude 'META-INF/services/cpw.mods.modlauncher.serviceapi.ILaunchPluginService'

    // Exclude annotation processor config (we need combine configs from MixinExtras and Mixins)
    exclude 'META-INF/services/javax.annotation.processing.Processor'

    // Exclude additional files
    exclude '**/module-info.class'
    exclude 'META-INF/MANIFEST.MF', 'META-INF/maven/**', 'META-INF/*.RSA', 'META-INF/*.SF', 'CREDITS', 'LICENSE*', 'README*'

    from fileTree('build') {
        include 'mixins/mixins.examplemod.refmap.json'
    }
    from (sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'

        expand 'version': project.version, 'mcversion': project.minecraft.version
    }
    from (joinedAnnotationProcessor) {
        into 'META-INF/services'
        rename {
            'javax.annotation.processing.Processor'
        }
    }
}

task shadowJarCombine(type: ShadowJar) {
    // Include mixins jar
    from zipTree(shadowJarMixins.archiveFile)

    // Include main jar
    from zipTree(shadowJar.archiveFile)
}

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

jar {
    enabled = false
    dependsOn shadowJar
    dependsOn shadowJarMixins
    dependsOn shadowJarCombine

    manifest {
        attributes(
                'Class-Path':                          ''
                // Put manifest attributes here, example
                // 'FMLCorePluginContainsFMLMod':      'true',
        )
    }
}

// Mixin stuff
ext {
    new File(project.buildDir, 'mixins').mkdirs();
    mixinSrg = new File(project.buildDir, 'mixins/mixins.examplemod.srg')
    mixinSrg.createNewFile()
    mixinRefMap = new File(project.buildDir, "mixins/mixins.examplemod.refmap.json")
    mixinRefMap.createNewFile()
}

reobf {
    addExtraSrgFile project.mixinSrg
}

compileJava {
    options.encoding = "UTF-8"
    options.compilerArgs += [
            '-Xlint:-processing',
            "-AoutSrgFile=${project.mixinSrg.canonicalPath}",
            "-AoutRefMapFile=${project.mixinRefMap.canonicalPath}",
            "-AreobfSrgFile=${project.file('build/srgs/mcp-srg.srg').canonicalPath}"
    ]
}

task copySrgs(type: Copy, dependsOn: 'genSrgs') {
    from new DelayedFile(project, '{SRG_DIR}', plugins.getPlugin("forge"))

    include '**/*.srg'
    into 'build/srgs'
}

compileJava.dependsOn copySrgs
//