import java.util.function.Consumer /* * Iris is a World Generator for Minecraft Bukkit Servers * Copyright (c) 2021 Arcane Arts (Volmit Software) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ plugins { id 'java' id 'java-library' id "com.github.johnrengelman.shadow" version "7.1.2" id "de.undercouch.download" version "5.0.1" } version '3.2.0-1.19.2-1.20.4' def specialSourceVersion = '1.11.0' //[NMS] // ADD YOURSELF AS A NEW LINE IF YOU WANT YOUR OWN BUILD TASK GENERATED // ======================== WINDOWS ============================= registerCustomOutputTask('Cyberpwn', 'C://Users/cyberpwn/Documents/development/server/plugins') registerCustomOutputTask('Psycho', 'C://Dan/MinecraftDevelopment/Server/plugins') registerCustomOutputTask('ArcaneArts', 'C://Users/arcane/Documents/development/server/plugins') registerCustomOutputTask('Coco', 'D://mcsm/plugins') registerCustomOutputTask('Strange', 'D://Servers/1.17 Test Server/plugins') registerCustomOutputTask('Vatuu', 'D://Minecraft/Servers/1.19.4/plugins') registerCustomOutputTask('CrazyDev22', 'C://Users/Julian/Desktop/server/plugins') registerCustomOutputTask('Pixel', 'C://Users/repix/Iris Dimension Engine/1.20.1 - Iris Coding/plugins') // ========================== UNIX ============================== registerCustomOutputTaskUnix('CyberpwnLT', '/Users/danielmills/development/server/plugins') registerCustomOutputTaskUnix('PsychoLT', '/Volumes/PRO-G40/Minecraft/MinecraftDevelopment/Server/plugins') // ============================================================== def NMS_BINDINGS = Map.of( "v1_20_R3", "1.20.4-R0.1-SNAPSHOT", "v1_20_R2", "1.20.2-R0.1-SNAPSHOT", "v1_20_R1", "1.20.1-R0.1-SNAPSHOT", "v1_19_R3", "1.19.4-R0.1-SNAPSHOT", "v1_19_R2", "1.19.3-R0.1-SNAPSHOT", "v1_19_R1", "1.19.2-R0.1-SNAPSHOT" ) NMS_BINDINGS.each { def key = it.key def value = it.value def nms = value.split("-")[0]; project(":nms:${key}") { apply plugin: 'java-library' apply plugin: 'de.undercouch.download' dependencies { implementation project(":core") compileOnly "org.spigotmc:spigot-api:${value}" compileOnly "org.bukkit:craftbukkit:${value}:remapped-mojang" //[NMS] } def buildToolsJar = new File(rootProject.buildDir, "tools/BuildTools.jar") def specialSourceJar = new File(rootProject.buildDir, "tools/SpecialSource.jar") def buildToolsFolder = new File(buildDir, "buildtools") def specialSourceFolder = new File(buildDir, "specialsource") def buildToolsHint = new File(buildDir, "buildtools/craftbukkit-" + nms + ".jar") def outputJar = new File(buildDir, "libs/${key}.jar") def ssiJar = new File(buildDir, "specialsource/${key}.jar") def ssobfJar = new File(buildDir, "specialsource/${key}-rmo.jar") def ssJar = new File(buildDir, "specialsource/${key}-rma.jar") def homePath = System.properties['user.home'] def m2 = new File(homePath + "/.m2/repository") def m2s = m2.getAbsolutePath(); // ======================== Building Mapped Jars ============================= ext { executeBuildTools = new Runnable() { @Override void run() { //Download if (!buildToolsJar.exists()) { download.run { src 'https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar' dest buildToolsJar } } //Execute if (!buildToolsHint.exists()) { buildToolsFolder.mkdirs() project.javaexec { classpath = files(buildToolsJar) workingDir = buildToolsFolder args = [ "--rev", nms, "--compile", "craftbukkit", "--remap" ] } } } } } tasks.register("executeBuildTools") { doLast { property("executeBuildTools").run(); } } tasks.build.doLast { //Download if (!specialSourceJar.exists()) { download.run { src 'https://repo.maven.apache.org/maven2/net/md-5/SpecialSource/' + specialSourceVersion + '/SpecialSource-'+specialSourceVersion+'-shaded.jar' dest specialSourceJar } } specialSourceFolder.mkdirs(); //Copy copy { from outputJar into specialSourceFolder } //obfuscate javaexec { workingDir = specialSourceFolder classpath = files(specialSourceJar, new File(m2s + "/org/spigotmc/spigot/" + value + "/spigot-" + value + "-remapped-mojang.jar")) mainClass = "net.md_5.specialsource.SpecialSource" args = [ "--live", "-i", ssiJar.getName(), "-o", ssobfJar.getName(), "-m", m2s + "/org/spigotmc/minecraft-server/" + value + "/minecraft-server-" + value + "-maps-mojang.txt", "--reverse", ] } //remap javaexec { workingDir = specialSourceFolder classpath = files(specialSourceJar, new File(m2s + "/org/spigotmc/spigot/" + value + "/spigot-" + value + "-remapped-obf.jar")) mainClass = "net.md_5.specialsource.SpecialSource" args = [ "--live", "-i", ssobfJar.getName(), "-o", ssJar.getName(), "-m", m2s + "/org/spigotmc/minecraft-server/" + value + "/minecraft-server-" + value + "-maps-spigot.csrg" ] } //copy copy { from ssJar into outputJar.getParentFile() rename { outputJar.getName() } } } } } shadowJar { NMS_BINDINGS.each {dependsOn(":nms:${it.key}:build")} //minimize() append("plugin.yml") relocate 'com.dfsek.paralithic', 'com.volmit.iris.util.paralithic' relocate 'io.papermc.lib', 'com.volmit.iris.util.paper' relocate 'net.kyori', 'com.volmit.iris.util.kyori' archiveFileName.set("Iris-${project.version}.jar") } dependencies { implementation project(':core') NMS_BINDINGS.each { implementation project(":nms:${it.key}") } } configurations.configureEach { resolutionStrategy.cacheChangingModulesFor 60, 'minutes' resolutionStrategy.cacheDynamicVersionsFor 60, 'minutes' } allprojects { apply plugin: 'java' repositories { mavenLocal { content { includeGroup("org.bukkit") includeGroup("org.spigotmc") } } mavenCentral() maven { url "https://repo.papermc.io/repository/maven-public/"} maven { url "https://repo.codemc.org/repository/maven-public" } maven { url "https://mvn.lumine.io/repository/maven-public/" } maven { url "https://jitpack.io"} maven { url "https://s01.oss.sonatype.org/content/repositories/snapshots" } maven { url "https://mvn.lumine.io/repository/maven/" } maven { url "https://repo.triumphteam.dev/snapshots" } maven { url "https://repo.mineinabyss.com/releases" } maven { url 'https://hub.jeff-media.com/nexus/repository/jeff-media-public/' } } dependencies { // Provided or Classpath compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24' // Shaded implementation 'com.dfsek:Paralithic:0.4.0' implementation 'io.papermc:paperlib:1.0.5' implementation "net.kyori:adventure-text-minimessage:4.13.1" implementation 'net.kyori:adventure-platform-bukkit:4.3.0' implementation 'net.kyori:adventure-api:4.13.1' compileOnly 'io.lumine:Mythic-Dist:5.2.1' // Dynamically Loaded compileOnly 'io.timeandspace:smoothie-map:2.0.2' compileOnly 'it.unimi.dsi:fastutil:8.5.8' compileOnly 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2' compileOnly 'org.zeroturnaround:zt-zip:1.14' compileOnly 'com.google.code.gson:gson:2.9.0' compileOnly 'org.ow2.asm:asm:9.2' compileOnly 'com.google.guava:guava:31.1-jre' compileOnly 'bsf:bsf:2.4.0' compileOnly 'rhino:js:1.7R2' compileOnly 'com.github.ben-manes.caffeine:caffeine:3.0.6' compileOnly 'org.apache.commons:commons-lang3:3.12.0' } /** * We need parameter meta for the decree command system */ compileJava { options.compilerArgs << '-parameters' options.encoding = "UTF-8" } } if (JavaVersion.current().toString() != "17") { System.err.println() System.err.println("=========================================================================================================") System.err.println("You must run gradle on Java 17. You are using " + JavaVersion.current()) System.err.println() System.err.println("=== For IDEs ===") System.err.println("1. Configure the project for Java 17") System.err.println("2. Configure the bundled gradle to use Java 17 in settings") System.err.println() System.err.println("=== For Command Line (gradlew) ===") System.err.println("1. Install JDK 17 from https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html") System.err.println("2. Set JAVA_HOME environment variable to the new jdk installation folder such as C:\\Program Files\\Java\\jdk-17.0.1") System.err.println("3. Open a new command prompt window to get the new environment variables if need be.") System.err.println("=========================================================================================================") System.err.println() System.exit(69); } task iris(type: Copy) { group "iris" from new File(buildDir, "libs/Iris-${version}.jar") into buildDir dependsOn(build) } task setup() { group "iris" dependsOn(clean) NMS_BINDINGS.each { dependsOn(":nms:${it.key}:clean"); } doLast { NMS_BINDINGS.each { project(":nms:${it.key}").property("executeBuildTools").run(); } } } NMS_BINDINGS.keySet().forEach { def nms = it tasks.register("setup-${nms}") { group "iris" dependsOn(":nms:${nms}:clean") dependsOn(":nms:${nms}:executeBuildTools") } } def registerCustomOutputTask(name, path) { if (!System.properties['os.name'].toLowerCase().contains('windows')) { return; } tasks.register('build' + name, Copy) { group('development') outputs.upToDateWhen { false } dependsOn(iris) from(new File(buildDir, "Iris-" + version + ".jar")) into(file(path)) rename { String fileName -> fileName.replace("Iris-" + version + ".jar", "Iris.jar") } } } def registerCustomOutputTaskUnix(name, path) { if (System.properties['os.name'].toLowerCase().contains('windows')) { return; } tasks.register('build' + name, Copy) { group('development') outputs.upToDateWhen { false } dependsOn(iris) from(new File(buildDir, "Iris-" + version + ".jar")) into(file(path)) rename { String fileName -> fileName.replace("Iris-" + version + ".jar", "Iris.jar") } } } tasks.build.dependsOn(shadowJar)