2023-04-24 13:23:28 +03:00
|
|
|
import com.gtnewhorizons.retrofuturagradle.mcp.ReobfuscatedJar
|
|
|
|
import org.jetbrains.gradle.ext.Gradle
|
2022-01-06 14:59:55 +03:00
|
|
|
|
2023-04-24 13:23:28 +03:00
|
|
|
plugins {
|
|
|
|
id("java")
|
|
|
|
id("java-library")
|
|
|
|
id("maven-publish")
|
|
|
|
id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.7"
|
|
|
|
id("eclipse")
|
2023-05-03 12:23:36 +03:00
|
|
|
id("com.gtnewhorizons.retrofuturagradle") version "1.3.9"
|
2023-04-24 13:23:28 +03:00
|
|
|
id("com.matthewprenger.cursegradle") version "1.4.0"
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
version = project.mod_version
|
|
|
|
group = project.maven_group
|
|
|
|
archivesBaseName = project.archives_base_name
|
2022-01-06 14:59:55 +03:00
|
|
|
|
2023-04-24 13:23:28 +03:00
|
|
|
// Set the toolchain version to decouple the Java we run Gradle with from the Java used to compile and run the mod
|
|
|
|
java {
|
|
|
|
toolchain {
|
|
|
|
languageVersion.set(JavaLanguageVersion.of(8))
|
|
|
|
// Azul covers the most platforms for Java 8 toolchains, crucially including MacOS arm64
|
|
|
|
vendor.set(org.gradle.jvm.toolchain.JvmVendorSpec.AZUL)
|
|
|
|
}
|
|
|
|
// Generate sources and javadocs jars when building and publishing
|
|
|
|
withSourcesJar()
|
|
|
|
withJavadocJar()
|
2022-01-06 14:59:55 +03:00
|
|
|
}
|
|
|
|
|
2023-04-24 17:42:45 +03:00
|
|
|
tasks.withType(JavaCompile).configureEach {
|
|
|
|
options.encoding = "UTF-8"
|
|
|
|
}
|
|
|
|
|
2022-01-20 19:56:26 +03:00
|
|
|
configurations {
|
|
|
|
embed
|
|
|
|
implementation.extendsFrom(embed)
|
|
|
|
}
|
|
|
|
|
2022-01-06 14:59:55 +03:00
|
|
|
minecraft {
|
2023-04-24 13:23:28 +03:00
|
|
|
mcVersion = '1.12.2'
|
|
|
|
def args = ["-ea:${project.group}"]
|
2022-09-05 17:04:02 +03:00
|
|
|
if (project.use_coremod.toBoolean()) {
|
|
|
|
args << '-Dfml.coreMods.load=' + coremod_plugin_class_name
|
|
|
|
}
|
|
|
|
if (project.use_mixins.toBoolean()) {
|
|
|
|
args << '-Dmixin.hotSwap=true'
|
|
|
|
args << '-Dmixin.checks.interfaces=true'
|
|
|
|
args << '-Dmixin.debug.export=true'
|
|
|
|
}
|
2023-04-24 13:23:28 +03:00
|
|
|
extraRunJvmArguments.addAll(args)
|
|
|
|
|
2023-04-27 15:04:20 +03:00
|
|
|
useDependencyAccessTransformers = true
|
|
|
|
|
2023-04-24 13:23:28 +03:00
|
|
|
injectedTags.put("VERSION", project.version)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Generate a my.project.Tags class with the version number as a field
|
|
|
|
tasks.injectTags.configure {
|
|
|
|
outputClassName.set("${project.group}.Tags")
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
repositories {
|
2023-04-24 13:23:28 +03:00
|
|
|
maven {
|
|
|
|
url = 'https://maven.cleanroommc.com'
|
2022-09-05 17:04:02 +03:00
|
|
|
}
|
2023-04-24 13:23:28 +03:00
|
|
|
maven { url = "https://repo.spongepowered.org/maven" }
|
|
|
|
//maven { url "https://maven.mcmoddev.com/" }
|
2022-01-20 19:56:26 +03:00
|
|
|
maven {
|
2023-04-24 13:23:28 +03:00
|
|
|
url "https://cursemaven.com"
|
|
|
|
content {
|
|
|
|
includeGroup "curse.maven"
|
|
|
|
}
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
2023-04-24 13:23:28 +03:00
|
|
|
mavenLocal() // Must be last for caching to work
|
2022-01-06 14:59:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
2022-09-05 17:04:02 +03:00
|
|
|
if (project.use_assetmover.toBoolean()) {
|
2023-04-24 13:23:28 +03:00
|
|
|
implementation 'com.cleanroommc:assetmover:2.0'
|
2022-09-05 17:04:02 +03:00
|
|
|
}
|
|
|
|
if (project.use_mixins.toBoolean()) {
|
2023-04-24 13:23:28 +03:00
|
|
|
implementation 'zone.rong:mixinbooter:7.0'
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
2023-04-24 13:23:28 +03:00
|
|
|
|
|
|
|
// Example deobf dependency
|
|
|
|
// compileOnly rfg.deobf("curse.maven:endercore-231868:2972849:")
|
|
|
|
|
|
|
|
if (project.use_mixins.toBoolean()) {
|
|
|
|
api ("org.spongepowered:mixin:0.8.3") {transitive = false}
|
|
|
|
annotationProcessor('org.ow2.asm:asm-debug-all:5.2')
|
|
|
|
annotationProcessor('com.google.guava:guava:24.1.1-jre')
|
|
|
|
annotationProcessor('com.google.code.gson:gson:2.8.6')
|
|
|
|
annotationProcessor ("org.spongepowered:mixin:0.8.3") {transitive = false}
|
|
|
|
}
|
|
|
|
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
|
|
|
|
2023-04-24 13:23:28 +03:00
|
|
|
def mixinConfigRefMap = 'mixins.' + project.archives_base_name + '.refmap.json'
|
|
|
|
def mixinTmpDir = buildDir.path + File.separator + 'tmp' + File.separator + 'mixins'
|
|
|
|
def refMap = "${mixinTmpDir}" + File.separator + mixinConfigRefMap
|
|
|
|
def mixinSrg = "${mixinTmpDir}" + File.separator + "mixins.srg"
|
2022-01-20 19:56:26 +03:00
|
|
|
|
2023-04-24 13:23:28 +03:00
|
|
|
if (project.use_mixins.toBoolean()) {
|
|
|
|
tasks.named("reobfJar", ReobfuscatedJar).configure {
|
|
|
|
extraSrgFiles.from(mixinSrg)
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
2022-01-06 14:59:55 +03:00
|
|
|
|
2023-04-24 13:23:28 +03:00
|
|
|
tasks.named("compileJava", JavaCompile).configure {
|
|
|
|
doFirst {
|
|
|
|
new File(mixinTmpDir).mkdirs()
|
|
|
|
}
|
|
|
|
options.compilerArgs += [
|
|
|
|
"-AreobfSrgFile=${tasks.reobfJar.srg.get().asFile}",
|
|
|
|
"-AoutSrgFile=${mixinSrg}",
|
|
|
|
"-AoutRefMapFile=${refMap}",
|
|
|
|
]
|
|
|
|
}
|
2022-01-06 14:59:55 +03:00
|
|
|
}
|
|
|
|
|
2023-04-24 13:28:24 +03:00
|
|
|
if (project.use_access_transformer.toBoolean()) {
|
|
|
|
for (File at : sourceSets.getByName("main").resources.files) {
|
|
|
|
if (at.name.toLowerCase().endsWith("_at.cfg")) {
|
|
|
|
tasks.deobfuscateMergedJarToSrg.accessTransformerFiles.from(at)
|
|
|
|
tasks.srgifyBinpatchedJar.accessTransformerFiles.from(at)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-06 14:59:55 +03:00
|
|
|
processResources {
|
|
|
|
// this will ensure that this task is redone when the versions change.
|
2022-01-20 19:56:26 +03:00
|
|
|
inputs.property 'version', project.version
|
|
|
|
inputs.property 'mcversion', project.minecraft.version
|
2022-01-06 14:59:55 +03:00
|
|
|
// replace stuff in mcmod.info, nothing else
|
2023-04-24 13:23:28 +03:00
|
|
|
filesMatching(['mcmod.info', 'pack.mcmeta']) { fcd ->
|
2022-01-06 14:59:55 +03:00
|
|
|
// replace version and mcversion
|
2023-04-24 13:23:28 +03:00
|
|
|
fcd.expand (
|
|
|
|
'version': project.version,
|
|
|
|
'mcversion': project.minecraft.version
|
|
|
|
)
|
2022-01-06 14:59:55 +03:00
|
|
|
}
|
2022-09-05 17:04:02 +03:00
|
|
|
|
|
|
|
if (project.use_access_transformer.toBoolean()) {
|
|
|
|
rename '(.+_at.cfg)', 'META-INF/$1' // Access Transformers
|
|
|
|
}
|
2023-04-24 13:23:28 +03:00
|
|
|
|
|
|
|
if (project.use_mixins.toBoolean()) {
|
|
|
|
// Embed mixin refmap
|
|
|
|
from refMap
|
|
|
|
dependsOn("compileJava")
|
|
|
|
}
|
2022-01-20 19:56:26 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
jar {
|
|
|
|
manifest {
|
2022-09-05 17:04:02 +03:00
|
|
|
def attribute_map = [:]
|
|
|
|
if (project.use_coremod.toBoolean()) {
|
|
|
|
attribute_map['FMLCorePlugin'] = project.coremod_plugin_class_name
|
|
|
|
if (project.include_mod.toBoolean()) {
|
|
|
|
attribute_map['FMLCorePluginContainsFMLMod'] = true
|
|
|
|
attribute_map['ForceLoadAsMod'] = project.gradle.startParameter.taskNames[0] == "build"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (project.use_access_transformer.toBoolean()) {
|
|
|
|
attribute_map['FMLAT'] = project.archives_base_name + '_at.cfg'
|
|
|
|
}
|
2022-01-20 19:56:26 +03:00
|
|
|
attributes(attribute_map)
|
|
|
|
}
|
2023-04-24 17:39:55 +03:00
|
|
|
// Add all embedded dependencies into the jar
|
|
|
|
from(provider{ configurations.embed.collect {it.isDirectory() ? it : zipTree(it)} })
|
2022-01-06 14:59:55 +03:00
|
|
|
}
|
2023-04-24 13:23:28 +03:00
|
|
|
|
|
|
|
idea {
|
|
|
|
module { inheritOutputDirs = true }
|
|
|
|
project { settings {
|
|
|
|
runConfigurations {
|
|
|
|
"1. Run Client"(Gradle) {
|
|
|
|
taskNames = ["runClient"]
|
|
|
|
}
|
|
|
|
"2. Run Server"(Gradle) {
|
|
|
|
taskNames = ["runServer"]
|
|
|
|
}
|
|
|
|
"3. Run Obfuscated Client"(Gradle) {
|
|
|
|
taskNames = ["runObfClient"]
|
|
|
|
}
|
|
|
|
"4. Run Obfuscated Server"(Gradle) {
|
|
|
|
taskNames = ["runObfServer"]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
compiler.javac {
|
|
|
|
afterEvaluate {
|
|
|
|
javacAdditionalOptions = "-encoding utf8"
|
|
|
|
moduleJavacAdditionalOptions = [
|
|
|
|
(project.name + ".main"): tasks.compileJava.options.compilerArgs.collect { '"' + it + '"' }.join(' ')
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
}
|
|
|
|
|
|
|
|
tasks.named("processIdeaSettings").configure {
|
|
|
|
dependsOn("injectTags")
|
|
|
|
}
|