aboutsummaryrefslogtreecommitdiff
path: root/build.gradle
diff options
context:
space:
mode:
Diffstat (limited to 'build.gradle')
-rw-r--r--build.gradle207
1 files changed, 207 insertions, 0 deletions
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..9e82e74
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,207 @@
+import org.jetbrains.gradle.ext.Gradle
+
+plugins {
+ id 'java'
+ id 'java-library'
+ id 'maven-publish'
+ id 'org.jetbrains.gradle.plugin.idea-ext' version '1.1.7'
+ id 'eclipse'
+ id 'com.gtnewhorizons.retrofuturagradle' version '1.3.16'
+ id 'com.matthewprenger.cursegradle' version '1.4.0'
+}
+
+version = project.mod_version
+group = project.maven_group
+archivesBaseName = project.archives_base_name
+
+// 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()
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.encoding = 'UTF-8'
+}
+
+configurations {
+ embed
+ implementation.extendsFrom(embed)
+}
+
+minecraft {
+ mcVersion = '1.12.2'
+
+ // MCP Mappings
+ mcpMappingChannel = 'stable'
+ mcpMappingVersion = '39'
+
+ // Set username here, the UUID will be looked up automatically
+ username = 'Developer'
+
+ // Add any additional tweaker classes here
+ // extraTweakClasses.add('org.spongepowered.asm.launch.MixinTweaker')
+
+ // Add various JVM arguments here for runtime
+ def args = ["-ea:${project.group}"]
+ 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'
+ }
+ extraRunJvmArguments.addAll(args)
+
+ // Include and use dependencies' Access Transformer files
+ useDependencyAccessTransformers = true
+
+ // Add any properties you want to swap out for a dynamic value at build time here
+ // Any properties here will be added to a class at build time, the name can be configured below
+ // Example:
+ // injectedTags.put('VERSION', project.version)
+ // injectedTags.put('MOD_ID', project.archives_base_name)
+}
+
+// Generate a group.archives_base_name.Tags class
+tasks.injectTags.configure {
+ // Change Tags class' name here:
+ outputClassName.set("${project.group}.${project.archives_base_name}.Tags")
+}
+
+repositories {
+ maven {
+ name 'CleanroomMC Maven'
+ url 'https://maven.cleanroommc.com'
+ }
+ maven {
+ name 'SpongePowered Maven'
+ url 'https://repo.spongepowered.org/maven'
+ }
+ maven {
+ name 'CurseMaven'
+ url 'https://cursemaven.com'
+ content {
+ includeGroup 'curse.maven'
+ }
+ }
+ mavenLocal() // Must be last for caching to work
+}
+
+dependencies {
+ if (project.use_assetmover.toBoolean()) {
+ implementation 'com.cleanroommc:assetmover:2.5'
+ }
+ if (project.use_mixins.toBoolean()) {
+ implementation 'zone.rong:mixinbooter:7.1'
+ }
+
+ // Example of deobfuscating a dependency
+ // implementation rfg.deobf('curse.maven:had-enough-items-557549:4543375')
+
+ if (project.use_mixins.toBoolean()) {
+ // Change your mixin refmap name here:
+ String mixin = modUtils.enableMixins('org.spongepowered:mixin:0.8.3', "mixins.${project.archives_base_name}.refmap.json")
+ api (mixin) {
+ 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 (mixin) {
+ transitive = false
+ }
+ }
+
+}
+
+// Adds Access Transformer files to tasks
+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)
+ }
+ }
+}
+
+processResources {
+ // This will ensure that this task is redone when the versions change
+ inputs.property 'version', project.version
+ inputs.property 'mcversion', project.minecraft.version
+
+ // Replace various properties in mcmod.info and pack.mcmeta if applicable
+ filesMatching(['mcmod.info', 'pack.mcmeta']) { fcd ->
+ // Replace version and mcversion
+ fcd.expand (
+ 'version': project.version,
+ 'mcversion': project.minecraft.version
+ )
+ }
+
+ if (project.use_access_transformer.toBoolean()) {
+ rename '(.+_at.cfg)', 'META-INF/$1' // Make sure Access Transformer files are in META-INF folder
+ }
+}
+
+jar {
+ manifest {
+ 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'
+ }
+ attributes(attribute_map)
+ }
+ // Add all embedded dependencies into the jar
+ from(provider{ configurations.embed.collect {it.isDirectory() ? it : zipTree(it)} })
+}
+
+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")
+}