diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 5036603cd..000000000
--- a/build.gradle
+++ /dev/null
@@ -1,330 +0,0 @@
-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"
- id "io.sentry.jvm.gradle" version "5.7.0"
-}
-
-
-version '3.6.10-1.20.1-1.21.5'
-
-// 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_R4", "1.21.5-R0.1-SNAPSHOT",
- "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'
- relocate "io.sentry", "com.volmit.iris.util.sentry"
- 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'
- apply plugin: 'io.sentry.jvm.gradle'
-
- 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
- }
-
- sentry {
- includeSourceContext = true
-
- org = "volmit-software"
- projectName = "iris"
- authToken = hasProperty("sentry.auth.token") ?
- property("sentry.auth.token") :
- System.getenv("SENTRY_AUTH_TOKEN")
- }
-}
-
-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)
-
-def cli = file("sentry-cli.exe")
-tasks.register("downloadCli", Download) {
- group = "sentry"
- src "https://release-registry.services.sentry.io/apps/sentry-cli/latest?response=download&arch=x86_64&platform=${System.getProperty("os.name")}&package=sentry-cli"
- dest cli
-
- doLast {
- cli.setExecutable(true)
- }
-}
-
-tasks.register("release") {
- group = "sentry"
- dependsOn("downloadCli")
- doLast {
- def authToken = project.hasProperty("sentry.auth.token") ?
- project.property("sentry.auth.token") :
- System.getenv("SENTRY_AUTH_TOKEN")
- def org = "volmit-software"
- def projectName = "iris"
- exec {
- executable(cli)
- args("releases", "new", "--auth-token", authToken, "-o", org, "-p", projectName, version)
- }
- exec {
- executable(cli)
- args("releases", "set-commits", "--auth-token", authToken, "-o", org, "-p", projectName, version, "--auto")
- }
- exec {
- executable(cli)
- args("releases", "finalize", "--auth-token", authToken, "-o", org, "-p", projectName, version)
- }
- cli.delete()
- }
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 000000000..1ccc60382
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,276 @@
+import com.volmit.nmstools.NMSToolsExtension
+import com.volmit.nmstools.NMSToolsPlugin
+import de.undercouch.gradle.tasks.download.Download
+import xyz.jpenilla.runpaper.task.RunServer
+import kotlin.system.exitProcess
+
+/*
+ * 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("https://jitpack.io")
+ dependencies.classpath("com.github.VolmitSoftware:NMSTools:c5cbc46ce6")
+}
+
+plugins {
+ java
+ `java-library`
+ id("com.gradleup.shadow") version "8.3.6"
+ id("de.undercouch.download") version "5.0.1"
+ id("xyz.jpenilla.run-paper") version "2.3.1"
+ id("io.sentry.jvm.gradle") version "5.7.0"
+}
+
+version = "3.6.10-1.20.1-1.21.5"
+
+// 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")
+// ==============================================================
+
+val serverMinHeap = "2G"
+val serverMaxHeap = "8G"
+//Valid values are: none, truecolor, indexed256, indexed16, indexed8
+val color = "truecolor"
+
+val nmsBindings = mapOf(
+ "v1_21_R4" to "1.21.5-R0.1-SNAPSHOT",
+ "v1_21_R3" to "1.21.4-R0.1-SNAPSHOT",
+ "v1_21_R2" to "1.21.3-R0.1-SNAPSHOT",
+ "v1_21_R1" to "1.21.1-R0.1-SNAPSHOT",
+ "v1_20_R4" to "1.20.6-R0.1-SNAPSHOT",
+ "v1_20_R3" to "1.20.4-R0.1-SNAPSHOT",
+ "v1_20_R2" to "1.20.2-R0.1-SNAPSHOT",
+ "v1_20_R1" to "1.20.1-R0.1-SNAPSHOT",
+)
+val jvmVersion = mapOf()
+nmsBindings.forEach { key, value ->
+ project(":nms:$key") {
+ apply()
+ apply()
+
+ repositories {
+ maven("https://libraries.minecraft.net")
+ }
+
+ extensions.configure(NMSToolsExtension::class) {
+ jvm = jvmVersion.getOrDefault(key, 21)
+ version = value
+ }
+
+ dependencies {
+ compileOnly(project(":core"))
+ compileOnly("org.jetbrains:annotations:26.0.2")
+ }
+ }
+
+ tasks.register("runServer-$key") {
+ group = "servers"
+ minecraftVersion(value.split("-")[0])
+ minHeapSize = serverMinHeap
+ maxHeapSize = serverMaxHeap
+ pluginJars(tasks.jar.flatMap { it.archiveFile })
+ javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(jvmVersion.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)
+ }
+}
+
+tasks {
+ jar {
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+ nmsBindings.forEach { key, _ ->
+ from(project(":nms:$key").tasks.named("remap").map { zipTree(it.outputs.files.singleFile) })
+ }
+ from(project(":core").tasks.shadowJar.flatMap { it.archiveFile }.map { zipTree(it) })
+ archiveFileName.set("Iris-${project.version}.jar")
+ }
+
+ register("iris") {
+ group = "iris"
+ dependsOn("jar")
+ from(layout.buildDirectory.file("libs/Iris-${project.version}.jar"))
+ into(layout.buildDirectory)
+ }
+
+ register("irisDev") {
+ group = "iris"
+ from(project(":core").layout.buildDirectory.files("libs/core-javadoc.jar", "libs/core-sources.jar"))
+ rename { it.replace("core", "Iris-${project.version}") }
+ into(layout.buildDirectory)
+ dependsOn(":core:sourcesJar")
+ dependsOn(":core:javadocJar")
+ }
+
+ val cli = file("sentry-cli.exe")
+ register("downloadCli") {
+ group = "sentry"
+ src("https://release-registry.services.sentry.io/apps/sentry-cli/latest?response=download&arch=x86_64&platform=${System.getProperty("os.name")}&package=sentry-cli")
+ dest(cli)
+
+ doLast {
+ cli.setExecutable(true)
+ }
+ }
+
+ register("release") {
+ dependsOn("downloadCli")
+ doLast {
+ val authToken = project.property("sentry.auth.token") ?: System.getenv("SENTRY_AUTH_TOKEN")
+ val org = "volmit-software"
+ val projectName = "iris"
+ providers.exec {
+ executable(cli)
+ args("releases", "new", "--auth-token", authToken, "-o", org, "-p", projectName, version)
+ }.result.get()
+ providers.exec {
+ executable(cli)
+ args("releases", "set-commits", "--auth-token", authToken, "-o", org, "-p", projectName, version, "--auto")
+ }.result.get()
+ providers.exec {
+ executable(cli)
+ args("releases", "finalize", "--auth-token", authToken, "-o", org, "-p", projectName, version)
+ }.result.get()
+ cli.delete()
+ }
+ }
+}
+
+dependencies {
+ implementation(project(":core"))
+}
+
+configurations.configureEach {
+ resolutionStrategy.cacheChangingModulesFor(60, "minutes")
+ resolutionStrategy.cacheDynamicVersionsFor(60, "minutes")
+}
+
+allprojects {
+ apply()
+
+ repositories {
+ mavenCentral()
+ maven("https://repo.papermc.io/repository/maven-public/")
+ maven("https://repo.codemc.org/repository/maven-public/")
+ maven("https://mvn.lumine.io/repository/maven-public/")
+ maven("https://jitpack.io")
+
+ maven("https://s01.oss.sonatype.org/content/repositories/snapshots")
+ maven("https://mvn.lumine.io/repository/maven/")
+ maven("https://repo.triumphteam.dev/snapshots")
+ maven("https://repo.mineinabyss.com/releases")
+ maven("https://hub.jeff-media.com/nexus/repository/jeff-media-public/")
+ maven("https://repo.nexomc.com/releases/")
+ }
+
+ dependencies {
+ // Provided or Classpath
+ compileOnly("org.projectlombok:lombok:1.18.36")
+ annotationProcessor("org.projectlombok:lombok:1.18.36")
+ }
+
+ /**
+ * We need parameter meta for the decree command system
+ */
+ tasks {
+ compileJava {
+ options.compilerArgs.add("-parameters")
+ options.encoding = "UTF-8"
+ }
+
+ javadoc {
+ options.encoding = "UTF-8"
+ options.quiet()
+ //options.addStringOption("Xdoclint:none") // TODO: Re-enable this
+ }
+
+ register("sourcesJar") {
+ archiveClassifier.set("sources")
+ from(sourceSets.main.map { it.allSource })
+ }
+
+ register("javadocJar") {
+ archiveClassifier.set("javadoc")
+ from(javadoc.map { it.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()
+ exitProcess(69)
+}
+
+
+fun registerCustomOutputTask(name: String, path: String) {
+ if (!System.getProperty("os.name").lowercase().contains("windows")) {
+ return
+ }
+
+ tasks.register("build$name") {
+ group = "development"
+ outputs.upToDateWhen { false }
+ dependsOn("iris")
+ from(layout.buildDirectory.file("Iris-${project.version}.jar"))
+ into(file(path))
+ rename { "Iris.jar" }
+ }
+}
+
+fun registerCustomOutputTaskUnix(name: String, path: String) {
+ if (System.getProperty("os.name").lowercase().contains("windows")) {
+ return
+ }
+
+ tasks.register("build$name") {
+ group = "development"
+ outputs.upToDateWhen { false }
+ dependsOn("iris")
+ from(layout.buildDirectory.file("Iris-${project.version}.jar"))
+ into(file(path))
+ rename { "Iris.jar" }
+ }
+}
\ No newline at end of file
diff --git a/core/build.gradle b/core/build.gradle
deleted file mode 100644
index 9effb5654..000000000
--- a/core/build.gradle
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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 "io.freefair.lombok" version "8.6"
-}
-
-def apiVersion = '1.19'
-def main = 'com.volmit.iris.Iris'
-
-/**
- * We need parameter meta for the decree command system
- */
-compileJava {
- options.compilerArgs << '-parameters'
- options.encoding = "UTF-8"
-}
-
-repositories {
- maven { url 'https://nexus.phoenixdevt.fr/repository/maven-public/'}
- maven { url 'https://repo.auxilor.io/repository/maven-public/' }
-}
-
-/**
- * Dependencies.
- *
- * Provided or classpath dependencies are not shaded and are available on the runtime classpath
- *
- * Shaded dependencies are not available at runtime, nor are they available on mvn central so they
- * need to be shaded into the jar (increasing binary size)
- *
- * Dynamically loaded dependencies are defined in the plugin.yml (updating these must be updated in the
- * plugin.yml also, otherwise they wont be available). These do not increase binary size). Only declare
- * these dependencies if they are available on mvn central.
- */
-dependencies {
- // Provided or Classpath
- compileOnly 'org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT'
- compileOnly 'org.apache.logging.log4j:log4j-api:2.19.0'
- compileOnly 'org.apache.logging.log4j:log4j-core:2.19.0'
- compileOnly 'commons-io:commons-io:2.13.0'
- compileOnly 'commons-lang:commons-lang:2.6'
- compileOnly 'com.github.oshi:oshi-core:5.8.5'
- compileOnly 'org.lz4:lz4-java:1.8.0'
-
- // Third Party Integrations
- compileOnly 'com.ticxo.playeranimator:PlayerAnimator:R1.2.7'
- compileOnly 'com.nexomc:nexo:1.6.0'
- compileOnly 'com.github.LoneDev6:api-itemsadder:3.4.1-r4'
- compileOnly 'com.github.PlaceholderAPI:placeholderapi:2.11.3'
- compileOnly 'com.github.Ssomar-Developement:SCore:4.23.10.8'
- compileOnly 'net.Indyuce:MMOItems-API:6.9.5-SNAPSHOT'
- compileOnly 'com.willfp:EcoItems:5.44.0'
- //implementation files('libs/CustomItems.jar')
-}
-
-java {
- disableAutoTargetJvm()
-}
-
-/**
- * Gradle is weird sometimes, we need to delete the plugin yml from the build folder to actually filter properly.
- */
-file(jar.archiveFile.get().getAsFile().getParentFile().getParentFile().getParentFile().getAbsolutePath() + '/build/resources/main/plugin.yml').delete()
-
-/**
- * Expand properties into plugin yml
- */
-processResources {
- filesMatching('**/plugin.yml') {
- expand(
- 'name': rootProject.name.toString(),
- 'version': rootProject.version.toString(),
- 'main': main.toString(),
- 'apiversion': apiVersion.toString()
- )
- }
-}
\ No newline at end of file
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
new file mode 100644
index 000000000..a6a1a20c5
--- /dev/null
+++ b/core/build.gradle.kts
@@ -0,0 +1,151 @@
+/*
+ * 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 {
+ java
+ `java-library`
+ id("com.gradleup.shadow")
+ id("io.sentry.jvm.gradle")
+}
+
+val apiVersion = "1.19"
+val main = "com.volmit.iris.Iris"
+
+repositories {
+ maven("https://nexus.phoenixdevt.fr/repository/maven-public/")
+ maven("https://repo.auxilor.io/repository/maven-public/")
+}
+
+/**
+ * Dependencies.
+ *
+ * Provided or classpath dependencies are not shaded and are available on the runtime classpath
+ *
+ * Shaded dependencies are not available at runtime, nor are they available on mvn central so they
+ * need to be shaded into the jar (increasing binary size)
+ *
+ * Dynamically loaded dependencies are defined in the plugin.yml (updating these must be updated in the
+ * plugin.yml also, otherwise they wont be available). These do not increase binary size). Only declare
+ * these dependencies if they are available on mvn central.
+ */
+dependencies {
+ // Provided or Classpath
+ compileOnly("org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT")
+ compileOnly("org.apache.logging.log4j:log4j-api:2.19.0")
+ compileOnly("org.apache.logging.log4j:log4j-core:2.19.0")
+ compileOnly("commons-io:commons-io:2.13.0")
+ compileOnly("commons-lang:commons-lang:2.6")
+ compileOnly("com.github.oshi:oshi-core:5.8.5")
+ compileOnly("org.lz4:lz4-java:1.8.0")
+
+ // Third Party Integrations
+ compileOnly("com.nexomc:nexo:1.6.0")
+ compileOnly("com.github.LoneDev6:api-itemsadder:3.4.1-r4")
+ compileOnly("com.github.PlaceholderAPI:placeholderapi:2.11.3")
+ compileOnly("com.github.Ssomar-Developement:SCore:4.23.10.8")
+ compileOnly("net.Indyuce:MMOItems-API:6.9.5-SNAPSHOT")
+ compileOnly("com.willfp:EcoItems:5.44.0")
+ //implementation files("libs/CustomItems.jar")
+
+
+ // 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")
+}
+
+java {
+ disableAutoTargetJvm()
+}
+
+sentry {
+ includeSourceContext = true
+
+ org = "volmit-software"
+ projectName = "iris"
+ authToken = property("sentry.auth.token") as String? ?: System.getenv("SENTRY_AUTH_TOKEN")
+}
+
+tasks {
+ /**
+ * We need parameter meta for the decree command system
+ */
+ compileJava {
+ options.compilerArgs.add("-parameters")
+ options.encoding = "UTF-8"
+ }
+
+ /**
+ * Expand properties into plugin yml
+ */
+ processResources {
+ inputs.properties(
+ "name" to rootProject.name,
+ "version" to rootProject.version,
+ "apiVersion" to apiVersion,
+ "main" to main
+ )
+ filesMatching("**/plugin.yml") {
+ expand(inputs.properties)
+ }
+ }
+
+ shadowJar {
+ mergeServiceFiles()
+ 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.iris.util.metrics")
+ relocate("io.sentry", "com.volmit.iris.util.sentry")
+
+ //minimize()
+ dependencies {
+ exclude(dependency("org.ow2.asm:asm:"))
+ exclude(dependency("org.jetbrains:"))
+ }
+ }
+}
+
+/**
+ * Gradle is weird sometimes, we need to delete the plugin yml from the build folder to actually filter properly.
+ */
+afterEvaluate {
+ layout.buildDirectory.file("resources/main/plugin.yml").get().asFile.delete()
+}
\ No newline at end of file
diff --git a/core/src/main/resources/plugin.yml b/core/src/main/resources/plugin.yml
index 7ff73ff7e..0a58f5d00 100644
--- a/core/src/main/resources/plugin.yml
+++ b/core/src/main/resources/plugin.yml
@@ -23,5 +23,5 @@ libraries:
commands:
iris:
aliases: [ ir, irs ]
-api-version: '${apiversion}'
+api-version: '${apiVersion}'
hotload-dependencies: false
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 7454180f2..e6441136f 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 48c0a02ca..ff23a68d7 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 1b6c78733..1aa94a426 100755
--- a/gradlew
+++ b/gradlew
@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,11 @@ do
esac
done
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,22 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
@@ -205,6 +214,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \
"$@"
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/gradlew.bat b/gradlew.bat
index ac1b06f93..7101f8e46 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -14,7 +14,7 @@
@rem limitations under the License.
@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,13 +41,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -56,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/settings.gradle b/settings.gradle.kts
similarity index 74%
rename from settings.gradle
rename to settings.gradle.kts
index 9315a1131..c45462895 100644
--- a/settings.gradle
+++ b/settings.gradle.kts
@@ -23,19 +23,19 @@ pluginManagement {
}
}
plugins {
- id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0"
+ id ("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
-rootProject.name = 'Iris'
+rootProject.name = "Iris"
-include(':core')
+include(":core")
include(
- ':nms:v1_21_R4',
- ':nms:v1_21_R3',
- ':nms:v1_21_R2',
- ':nms:v1_21_R1',
- ':nms:v1_20_R4',
- ':nms:v1_20_R3',
- ':nms:v1_20_R2',
- ':nms:v1_20_R1',
+ ":nms:v1_21_R4",
+ ":nms:v1_21_R3",
+ ":nms:v1_21_R2",
+ ":nms:v1_21_R1",
+ ":nms:v1_20_R4",
+ ":nms:v1_20_R3",
+ ":nms:v1_20_R2",
+ ":nms:v1_20_R1",
)
\ No newline at end of file