import xyz.jpenilla.runpaper.task.RunServer /* * 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 . */ buildscript() { repositories { maven { url 'https://jitpack.io'} } dependencies { classpath 'com.github.VolmitSoftware:NMSTools:1.0.1' } } plugins { id 'java' id 'java-library' id "io.github.goooler.shadow" version "8.1.7" id "de.undercouch.download" version "5.0.1" id "xyz.jpenilla.run-paper" version "2.3.1" } version '3.6.8-1.20.1-1.21.4' // 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('PixelFury', 'C://Users/repix/workplace/Iris/1.21.3 - Development-Public-v3/plugins') registerCustomOutputTask('PixelFuryDev', 'C://Users/repix/workplace/Iris/1.21 - Development-v3/plugins') // ========================== UNIX ============================== registerCustomOutputTaskUnix('CyberpwnLT', '/Users/danielmills/development/server/plugins') registerCustomOutputTaskUnix('PsychoLT', '/Users/brianfopiano/Developer/RemoteGit/Server/plugins') registerCustomOutputTaskUnix('PixelMac', '/Users/test/Desktop/mcserver/plugins') registerCustomOutputTaskUnix('CrazyDev22LT', '/home/julian/Desktop/server/plugins') // ============================================================== def MIN_HEAP_SIZE = "2G" def MAX_HEAP_SIZE = "8G" //Valid values are: none, truecolor, indexed256, indexed16, indexed8 def COLOR = "truecolor" def NMS_BINDINGS = Map.of( "v1_21_R3", "1.21.4-R0.1-SNAPSHOT", "v1_21_R2", "1.21.3-R0.1-SNAPSHOT", "v1_21_R1", "1.21.1-R0.1-SNAPSHOT", "v1_20_R4", "1.20.6-R0.1-SNAPSHOT", "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", ) def JVM_VERSION = Map.of() NMS_BINDINGS.forEach { key, value -> project(":nms:$key") { apply plugin: 'java' apply plugin: 'com.volmit.nmstools' nmsTools { it.jvm = JVM_VERSION.getOrDefault(key, 21) it.version = value } dependencies { implementation project(":core") } } tasks.register("runServer-$key", RunServer) { group("servers") minecraftVersion(value.split("-")[0]) minHeapSize(MIN_HEAP_SIZE) maxHeapSize(MAX_HEAP_SIZE) pluginJars(tasks.shadowJar.archiveFile) javaLauncher = javaToolchains.launcherFor { it.languageVersion = JavaLanguageVersion.of(JVM_VERSION.getOrDefault(key, 21))} runDirectory.convention(layout.buildDirectory.dir("run/$key")) systemProperty("disable.watchdog", "") systemProperty("net.kyori.ansi.colorLevel", COLOR) systemProperty("com.mojang.eula.agree", true) } } shadowJar { NMS_BINDINGS.each { dependsOn(":nms:${it.key}:remap") from("${project(":nms:${it.key}").layout.buildDirectory.asFile.get()}/libs/${it.key}-mapped.jar") } //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' relocate 'org.bstats', 'com.volmit.util.metrics' archiveFileName.set("Iris-${project.version}.jar") dependencies { exclude(dependency("org.ow2.asm:asm:")) exclude(dependency("org.jetbrains:")) } } dependencies { implementation project(':core') } configurations.configureEach { resolutionStrategy.cacheChangingModulesFor 60, 'minutes' resolutionStrategy.cacheDynamicVersionsFor 60, 'minutes' } allprojects { apply plugin: 'java' repositories { 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/' } maven { url "https://repo.nexomc.com/releases/" } maven { url "https://libraries.minecraft.net" } } dependencies { // Provided or Classpath compileOnly 'org.projectlombok:lombok:1.18.36' annotationProcessor 'org.projectlombok:lombok:1.18.36' // Shaded implementation 'com.dfsek:paralithic:0.8.1' implementation 'io.papermc:paperlib:1.0.5' implementation "net.kyori:adventure-text-minimessage:4.17.0" implementation 'net.kyori:adventure-platform-bukkit:4.3.4' implementation 'net.kyori:adventure-api:4.17.0' implementation 'org.bstats:bstats-bukkit:3.1.0' //implementation 'org.bytedeco:javacpp:1.5.10' //implementation 'org.bytedeco:cuda-platform:12.3-8.9-1.5.10' compileOnly 'io.lumine:Mythic-Dist:5.2.1' compileOnly 'io.lumine:MythicCrucible-Dist:2.0.0' // 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.10.1' compileOnly 'org.ow2.asm:asm:9.2' compileOnly 'com.google.guava:guava:33.0.0-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' compileOnly 'com.github.oshi:oshi-core:6.6.5' } /** * We need parameter meta for the decree command system */ compileJava { options.compilerArgs << '-parameters' options.encoding = "UTF-8" } javadoc { options.encoding = "UTF-8" options.addStringOption('Xdoclint:none', '-quiet') } task sourcesJar(type: Jar, dependsOn: classes) { archiveClassifier.set('sources') from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { archiveClassifier.set('javadoc') from javadoc.destinationDir } } if (JavaVersion.current().toString() != "21") { System.err.println() System.err.println("=========================================================================================================") System.err.println("You must run gradle on Java 21. You are using " + JavaVersion.current()) System.err.println() System.err.println("=== For IDEs ===") System.err.println("1. Configure the project for Java 21") System.err.println("2. Configure the bundled gradle to use Java 21 in settings") System.err.println() System.err.println("=== For Command Line (gradlew) ===") System.err.println("1. Install JDK 21 from https://www.oracle.com/java/technologies/javase/jdk21-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-21.0.4") 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(layout.buildDirectory.asFile.get(), "libs/Iris-${version}.jar") into layout.buildDirectory.asFile.get() dependsOn(build) } // with classifier: 'javadoc' and 'sources' task irisDev(type: Copy) { group "iris" from("core/build/libs/core-javadoc.jar", "core/build/libs/core-sources.jar") rename { String fileName -> fileName.replace("core", "Iris-${version}") } into layout.buildDirectory.asFile.get() dependsOn(iris) dependsOn("core:sourcesJar") dependsOn("core:javadocJar") } 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)