diff --git a/.upstream-data b/.upstream-data deleted file mode 100644 index 18151be..0000000 --- a/.upstream-data +++ /dev/null @@ -1,2 +0,0 @@ -purpurCommit = c46cb7ef66675e00a48e20c40febed7ff914f35d -pufferfishCommit = bc89152d4cd4bb0f9644da2fe10774df4cc25661 diff --git a/build.gradle.kts b/build.gradle.kts index 566ac9b..f3c0cbe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,18 @@ -import io.papermc.paperweight.util.* import io.papermc.paperweight.util.constants.PAPERCLIP_CONFIG +group = "org.plazmamc.plazma" + plugins { java `maven-publish` - id("com.github.johnrengelman.shadow") version "8.1.1" apply false - id("io.papermc.paperweight.patcher") version "1.5.10" + `kotlin-dsl` + `always-up-to-date` + alias(libs.plugins.shadow) apply false + alias(libs.plugins.paperweight) +} + +kotlin.jvmToolchain { + languageVersion = JavaLanguageVersion.of(17) } repositories { @@ -18,9 +25,9 @@ repositories { } dependencies { - remapper("net.fabricmc:tiny-remapper:0.8.11:fat") - decompiler("net.minecraftforge:forgeflower:2.0.627.2") - paperclip("io.papermc:paperclip:3.0.3") + remapper(libs.remapper) + decompiler(libs.decompiler) + paperclip(libs.paperclip) } allprojects { @@ -103,6 +110,15 @@ paperweight { } } +alwaysUpToDate { + paperRepository.set("https://github.com/PaperMC/Paper") + paperBranch.set("master") + purpurRepository.set("https://github.com/PurpurMC/Purpur") + purpurBranch.set("ver/1.20.4") + pufferfishRepository.set("https://github.com/pufferfish-gg/Pufferfish") + pufferfishBranch.set("ver/1.20") +} + tasks { generateDevelopmentBundle { apiCoordinates.set("org.plazmamc.plazma:plazma-api") @@ -112,30 +128,4 @@ tasks { "https://papermc.io/repo/repository/maven-public/" ) } - - register("updateUpstream") { - val tempDir = layout.cacheDir("updateUpstream") - val file = "gradle.properties" - - doFirst { - val apiResponse = layout.cache.resolve("apiResponse.json") - download.get().download("https://api.github.com/repos/PaperMC/Paper/commits/master", apiResponse) - val latestCommit = gson.fromJson(apiResponse)["sha"].asString - - copy { - from(file) - into(tempDir) - filter { line: String -> - line.replace("paperCommit = .*".toRegex(), "paperCommit = $latestCommit") - } - } - } - - doLast { - copy { - from(tempDir.file("gradle.properties")) - into(project.file(file).parent) - } - } - } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..8eb7aa9 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + java + `kotlin-dsl` + id("com.github.johnrengelman.shadow") version "8.1.1" +} + +repositories { + mavenCentral() + maven("https://papermc.io/repo/repository/maven-public/") +} + +kotlin.jvmToolchain { + languageVersion = JavaLanguageVersion.of(17) +} + +dependencies { + shadow("io.papermc.paperweight:paperweight-patcher:1.5.11-SNAPSHOT") +} + +tasks { + jar { + finalizedBy(shadowJar) + } + + shadowJar { + archiveFileName.set("buildSrc.jar") + configurations = listOf(project.configurations["shadow"]) + + exclude("META-INF/gradle-plugins/io.papermc.paperweight.patcher.properties") + relocate("io.papermc.paperweight", "org.plazmamc.alwaysuptodate.internal.paperweight") + minimize() + } +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt new file mode 100644 index 0000000..01c7174 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDate.kt @@ -0,0 +1,15 @@ +package org.plazmamc.alwaysuptodate + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.plazmamc.alwaysuptodate.tasks.* + +class AlwaysUpToDate : Plugin { + + override fun apply(target: Project) { + target.extensions.create("alwaysUpToDate", AlwaysUpToDateExtension::class.java) + target.tasks.register("updatePaper", PaperUpdateTask::class.java) + target.tasks.register("updatePurpur", PurpurUpdateTask::class.java) + } + +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDateException.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDateException.kt new file mode 100644 index 0000000..4e0d0fa --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDateException.kt @@ -0,0 +1,6 @@ +package org.plazmamc.alwaysuptodate + +class AlwaysUpToDateException : Exception { + constructor(message: String) : super(message) + constructor(message: String, cause: Throwable?) : super(message, cause) +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDateExtension.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDateExtension.kt new file mode 100644 index 0000000..0e3f51c --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/AlwaysUpToDateExtension.kt @@ -0,0 +1,16 @@ +package org.plazmamc.alwaysuptodate + +import org.gradle.api.provider.Property + +interface AlwaysUpToDateExtension { + + val paperRepository: Property + val paperBranch: Property + + val pufferfishRepository: Property + val pufferfishBranch: Property + + val purpurRepository: Property + val purpurBranch: Property + +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt new file mode 100644 index 0000000..849b859 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PaperUpdateTask.kt @@ -0,0 +1,44 @@ +package org.plazmamc.alwaysuptodate.tasks + +import io.papermc.paperweight.util.Git +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.get +import org.plazmamc.alwaysuptodate.AlwaysUpToDateException +import org.plazmamc.alwaysuptodate.AlwaysUpToDateExtension +import org.plazmamc.alwaysuptodate.utils.pathIO +import java.io.File + +abstract class PaperUpdateTask : Task() { + + private val property = project.extensions["alwaysUpToDate"] as AlwaysUpToDateExtension + private val regex = "[a-z0-9]{40}\trefs/heads/${property.paperBranch}".toRegex() + private val git = Git(project.pathIO) + + override fun init() { + outputs.upToDateWhen { check() } + } + + private fun check(): Boolean { + val latestCommit = git("ls-remote", property.paperRepository.get()).readText()?.lines() + ?.filterNot { regex.matches(it) }?.first()?.split("\t")?.first() + ?: throw AlwaysUpToDateException("Failed to get latest Paper commit") + val currentCommit = project.properties["paperCommit"] as String + + return currentCommit == latestCommit + } + + @TaskAction + fun update() { + if (check()) return + updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), project.file("gradle.properties")) + } + +} + +fun updatePaperCommit(repo: String, branch: String, properties: File) { + val latestCommit = Git(properties.parentFile.toPath())("ls-remote", repo).readText()?.lines() + ?.filterNot { "[a-z0-9]{40}\trefs/heads/$branch".toRegex().matches(it) }?.first()?.split("\t")?.first() + ?: throw AlwaysUpToDateException("Failed to get latest Paper commit") + + properties.writeText(properties.readText().replace("paperCommit = .*".toRegex(), "paperCommit = $latestCommit")) +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt new file mode 100644 index 0000000..444a6dc --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt @@ -0,0 +1,157 @@ +package org.plazmamc.alwaysuptodate.tasks + +import io.papermc.paperweight.util.* +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.get +import org.plazmamc.alwaysuptodate.AlwaysUpToDateException +import org.plazmamc.alwaysuptodate.AlwaysUpToDateExtension +import org.plazmamc.alwaysuptodate.utils.Gradle +import org.plazmamc.alwaysuptodate.utils.addCommit +import org.plazmamc.alwaysuptodate.utils.clone +import org.plazmamc.alwaysuptodate.utils.pathIO +import java.nio.file.Path +import kotlin.io.path.createDirectories +import kotlin.io.path.exists + +abstract class PurpurUpdateTask : Task() { + + private val property = project.extensions["alwaysUpToDate"] as AlwaysUpToDateExtension + private val pufferfishCommit = """ + Pufferfish + Copyright (C) 2024 Pufferfish Studios LLC + + 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 . + """.trimIndent() + private val purpurCommit = """ + PurpurMC + Copyright (C) 2024 PurpurMC + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + """.trimIndent() + + override fun init() { + outputs.upToDateWhen { check() } + } + + private fun check(): Boolean { + val regex = "[a-z0-9]{40}\trefs/heads/${property.purpurBranch}".toRegex() + val latestCommit = Git(project.pathIO)("ls-remote", property.purpurRepository.get()).readText()?.lines() + ?.filterNot { regex.matches(it) }?.first()?.split("\t")?.first() + ?: throw AlwaysUpToDateException("Failed to get latest Purpur commit") + val currentCommit = project.properties["purpurCommit"] as String + + return currentCommit == latestCommit + } + + @TaskAction + fun update() { + if (check()) return + Git.checkForGit() + + val dir = project.layout.cache.resolve("AlwaysUpToDate/UpdatePurpur") + if (dir.exists()) dir.toFile().deleteRecursively() + + dir.createDirectories() + + val git = Git(dir) + val pufferfish = git.clone("Pufferfish", property.pufferfishRepository.get(), property.pufferfishBranch.get(), dir) + val purpur = git.clone("Purpur", property.purpurRepository.get(), property.purpurBranch.get(), dir) + + updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), pufferfish.resolve("gradle.properties").toFile()) + updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), purpur.resolve("gradle.properties").toFile()) + updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), project.file("gradle.properties")) + + val purpurGradle = Gradle(purpur) + val purpurPatches = purpur.resolve("patches").also { + val puffefishPatches = pufferfish.resolve("patches").also { that -> that.toFile().deleteRecursively() } + copyPatch(it.resolve("server"), puffefishPatches.resolve("server"), "0001-Pufferfish-Server-Changes.patch") + copyPatch(it.resolve("api"), puffefishPatches.resolve("api"), "0001-Pufferfish-API-Changes.patch") + } + + Gradle(pufferfish)("applyPatches").executeOut() + purpurGradle("applyPatches").executeOut() + + pufferfish.resolve("pufferfish-server").also { + val dotGit = it.resolve(".git").toFile() + dotGit.deleteRecursively() + copySource(it) + + val paper = pufferfish.resolve(".gradle/caches/paperweight/upstreams/paper/Paper-Server") + copySource(paper) + Git(paper)("add", ".").executeOut() + Git(paper)("commit", "-m", "Vanilla Sources", "--author=Vanilla ").executeOut() + paper.resolve(".git").toFile().copyRecursively(dotGit, overwrite = true) + + Git(it).addCommit("Pufferfish Server Changes\n\n$pufferfishCommit", "--author=Kevin Raneri ") + + val server = purpur.resolve("Purpur-Server") + copySource(server) + dotGit.copyRecursively(server.resolve(".git").toFile().also { that -> that.deleteRecursively() }, overwrite = true) + Git(server).addCommit("Purpur Server Changes\n\n$purpurCommit", "--author=granny ") + } + + with(purpur.resolve("Purpur-API")) { + pufferfish.resolve("pufferfish-api/.git").toFile() + .copyRecursively(resolve(".git").toFile().also { it.deleteRecursively() }, overwrite = true) + Git(this).addCommit("Purpur API Changes\n\n$purpurCommit", "--author=granny ") + } + + purpurGradle("rebuildPatches").executeOut() + project.layout.projectDirectory.path.resolve("patches").also { + with(purpurPatches.resolve("server")) { + val target = it.resolve("server") + copyPatch(this, target, "0001-Pufferfish-Server-Changes.patch") + copyPatch(this, target, "0002-Purpur-Server-Changes.patch") + } + + with(purpurPatches.resolve("api")) { + val target = it.resolve("api") + copyPatch(this, target, "0001-Pufferfish-API-Changes.patch") + copyPatch(this, target, "0002-Purpur-API-Changes.patch") + } + } + } + + private fun copySource(dir: Path) { + with(dir.resolve(".gradle/caches/paperweight/mc-dev-sources")) { + val target = dir.resolve("src/main") + resolve("net").toFile().copyRecursively(target.resolve("java/net").toFile(), overwrite = true) + resolve("data").toFile().copyRecursively(target.resolve("resources/data").toFile(), overwrite = true) + } + } + + private fun copyPatch(from: Path, to: Path, name: String) { + with(from.resolve(name)) { + if (exists()) toFile().copyTo(to.resolve(name).toFile(), overwrite = true) + else from.toFile().walk().filter { it.name.endsWith(name.substring(4)) }.first().copyTo(to.resolve(name).toFile(), overwrite = true) + } + } + +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/Task.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/Task.kt new file mode 100644 index 0000000..04e7fa0 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/Task.kt @@ -0,0 +1,14 @@ +package org.plazmamc.alwaysuptodate.tasks + +import org.gradle.api.DefaultTask + +abstract class Task : DefaultTask() { + + protected open fun init() { + } + + init { + this.init() + } + +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Git.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Git.kt new file mode 100644 index 0000000..8d584ec --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Git.kt @@ -0,0 +1,18 @@ +package org.plazmamc.alwaysuptodate.utils + +import io.papermc.paperweight.util.Git +import org.plazmamc.alwaysuptodate.AlwaysUpToDateException +import java.nio.file.Path +import kotlin.io.path.notExists + +fun Git.clone(name: String, uri: String, branch: String, dir: Path): Path { + val target = dir.resolve(name) + this("clone", "--depth", "1", "--branch", branch, uri, target.toString()).executeSilently(silenceErr = true) + if (target.notExists()) throw AlwaysUpToDateException("Failed to clone repository") + return target +} + +fun Git.addCommit(vararg args: String) { + this("add", ".").executeSilently(silenceErr = true) + this("commit", "-m", *args).executeSilently(silenceErr = true) +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Gradle.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Gradle.kt new file mode 100644 index 0000000..04ca42a --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Gradle.kt @@ -0,0 +1,27 @@ +package org.plazmamc.alwaysuptodate.utils + +import io.papermc.paperweight.util.Command +import io.papermc.paperweight.util.directory +import org.plazmamc.alwaysuptodate.AlwaysUpToDateException +import java.nio.file.Path +import kotlin.io.path.notExists + +class Gradle(private val repo: Path) { + + init { + if (repo.resolve("gradle").notExists()) + throw AlwaysUpToDateException("Git repository does not exist: $repo") + } + + operator fun invoke(vararg args: String): Command { + val builder = ProcessBuilder("java", "-cp", "gradle/wrapper/gradle-wrapper.jar", "org.gradle.wrapper.GradleWrapperMain", *args, "--no-daemon", "--stacktrace").directory(repo) + val command = builder.command().joinToString(" ") { if (it.codePoints().anyMatch(Character::isWhitespace)) "\"$it\"" else it } + + return try { + Command(builder, command) + } catch (e: Exception) { + throw AlwaysUpToDateException("Failed to execute command: $command", e) + } + } + +} diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Utils.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Utils.kt new file mode 100644 index 0000000..ca34570 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/utils/Utils.kt @@ -0,0 +1,7 @@ +package org.plazmamc.alwaysuptodate.utils + +import io.papermc.paperweight.util.path +import org.gradle.api.Project +import java.nio.file.Path + +val Project.pathIO: Path get() = layout.projectDirectory.path diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/always-up-to-date.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/always-up-to-date.properties new file mode 100644 index 0000000..d2f93e5 --- /dev/null +++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/always-up-to-date.properties @@ -0,0 +1 @@ +implementation-class=org.plazmamc.alwaysuptodate.AlwaysUpToDate diff --git a/fxapi.sh b/fxapi similarity index 100% rename from fxapi.sh rename to fxapi diff --git a/fxsrv.sh b/fxsrv similarity index 100% rename from fxsrv.sh rename to fxsrv diff --git a/gradle.properties b/gradle.properties index 2853a2b..98d02f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,9 @@ -group = org.plazmamc.plazma version = 1.20.2-R0.1-SNAPSHOT mcVersion = 1.20.2 paperCommit = 931781c220b98dde0159c9a3c8dce06c3b2b1e13 +purpurCommit = c46cb7ef66675e00a48e20c40febed7ff914f35d +pufferfishCommit = bc89152d4cd4bb0f9644da2fe10774df4cc25661 org.gradle.caching = true org.gradle.parallel = true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..02be563 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,15 @@ +[versions] +shadow = "8.1.1" +paperweight = "1.5.10" +paperclip = "3.0.3" +decompiler = "2.0.627.2" +remapper = "0.3.0:fat" + +[libraries] +remapper = { group = "net.fabricmc", name = "tiny-remapper", version.ref="remapper" } +decompiler = { group = "net.minecraftforge", name = "forgeflower", version.ref = "decompiler" } +paperclip = { group = "io.papermc", name = "paperclip", version.ref = "paperclip" } + +[plugins] +shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" } +paperweight = { id = "io.papermc.paperweight.patcher", version.ref = "paperweight" } diff --git a/libs/api.versions.toml b/libs/api.versions.toml new file mode 100644 index 0000000..4519023 --- /dev/null +++ b/libs/api.versions.toml @@ -0,0 +1,29 @@ +[versions] +gson = "2.10.1" +joml = "1.10.5" +guava = "32.1.2-jre" +sentry = "5.4.0" +fastutil = "8.5.6" +findbugs = "1.3.9" +slf4j-api = "1.8.0-beta4" +bungeechat = "1.20-R0.1-deprecated+build.14" +json-simple = "1.1.1" +annotations = "24.0.1" +checkerqual = "3.21.0" + +[libraries] +joml = { group = "org.joml", name = "joml", version.ref = "joml" } +gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } +guava = { group = "com.google.guava", name = "guava", version.ref = "guava" } +sentry = { group = "io.sentry", name = "sentry", version.ref = "sentry" } +fastutil = { group = "it.unimi.dsi", name = "fastutil", version.ref = "fastutil" } +findbugs = { group = "com.google.code.findbugs", name = "jsr305", version.ref = "findbugs" } +slf4j-api = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j-api" } +bungeechat = { group = "net.md-5", name = "bungeecord-chat", version.ref = "bungeechat" } +jsonsimple = { group = "com.googlecode.json-simple", name = "json-simple", version.ref = "json-simple" } +annotations = { group = "org.jetbrains", name = "annotations", version.ref = "annotations" } +checkerqual = { group = "org.checkerframework", name = "checker-qual", version.ref = "checkerqual" } + +[bundles] +api = [ "guava", "gson", "bungeechat", "joml", "fastutil", "slf4j-api", "sentry" ] +annotations = [ "annotations", "checkerqual" ] diff --git a/libs/common.versions.toml b/libs/common.versions.toml new file mode 100644 index 0000000..89798d5 --- /dev/null +++ b/libs/common.versions.toml @@ -0,0 +1,45 @@ +[versions] +asm = "9.6" +log4j = "2.19.0" +mockito = "5.5.0" +jupiter = "5.10.0" +hamcrest = "2.2" +snakeyaml = "2.2" +adventure = "4.14.0" +commons-lang2 = "2.6" +commons-lang3 = "3.12.0" +maven-provider = "3.8.5" +maven-resolver = "1.7.3" + +[libraries] +mockito = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } +jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "jupiter" } +hamcrest = { group = "org.hamcrest", name = "hamcrest", version.ref = "hamcrest" } +snakeyaml = { group = "org.yaml", name = "snakeyaml", version.ref = "snakeyaml" } + +asm-head = { group = "org.ow2.asm", name = "asm", version.ref = "asm" } +asm-tree = { group = "org.ow2.asm", name = "asm-tree", version.ref = "asm" } +asm-commons = { group = "org.ow2.asm", name = "asm-commons", version.ref = "asm" } +log4j-api = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" } +log4j-core = { group = "org.apache.logging.log4j", name = "log4j-core", version.ref = "log4j" } +log4j-iostreams = { group = "org.apache.logging.log4j", name = "log4j-iostreams", version.ref = "log4j" } +maven-provider = { group = "org.apache.maven", name = "maven-resolver-provider", version.ref = "maven-provider" } +maven-connector = { group = "org.apache.maven.resolver", name = "maven-resolver-connector-basic", version.ref = "maven-resolver" } +maven-transport = { group = "org.apache.maven.resolver", name = "maven-resolver-transport-http", version.ref = "maven-resolver" } +commons-lang2 = { group = "commons-lang", name = "commons-lang", version.ref = "commons-lang2" } +commons-lang3 = { group = "org.apache.commons", name = "commons-lang3", version.ref = "commons-lang3" } + +adventure-bom = { group = "net.kyori", name = "adventure-bom", version.ref = "adventure" } +adventure-api = { group = "net.kyori", name = "adventure-api", version.ref = "adventure" } +adventure-slf4j = { group = "net.kyori", name = "adventure-text-logger-slf4j", version.ref = "adventure" } +adventure-minimessage = { group = "net.kyori", name = "adventure-text-minimessage", version.ref = "adventure" } +adventure-serializer-gson = { group = "net.kyori", name = "adventure-text-serializer-gson", version.ref = "adventure" } +adventure-serializer-ansi = { group = "net.kyori", name = "adventure-text-serializer-ansi", version.ref = "adventure" } +adventure-serializer-plain = { group = "net.kyori", name = "adventure-text-serializer-plain", version.ref = "adventure" } +adventure-serializer-legacy = { group = "net.kyori", name = "adventure-text-serializer-legacy", version.ref = "adventure" } + +[bundles] +asm = [ "asm-head", "asm-commons" ] +test = [ "jupiter", "hamcrest", "mockito" ] +maven = [ "maven-connector", "maven-transport" ] +adventure = [ "adventure-api", "adventure-slf4j", "adventure-minimessage", "adventure-serializer-gson", "adventure-serializer-plain", "adventure-serializer-legacy" ] diff --git a/libs/server.versions.toml b/libs/server.versions.toml new file mode 100644 index 0000000..e3303c6 --- /dev/null +++ b/libs/server.versions.toml @@ -0,0 +1,35 @@ +[versions] +ansi = "1.0.3" +jansi = "3.21.0" +rhino = "1.7.14" +mysql = "8.1.0" +sqlite = "3.42.0.1" +haproxy = "4.1.97.Final" +velocity = "3.1.2-SNAPSHOT" +disruptor = "3.4.4" +simpleyaml = "1.8.4" +classgraph = "4.8.47" +mapping-io = "0.5.0" +configurate = "4.2.0-SNAPSHOT" +terminal-appender = "1.3.0" + +[libraries] +ansi = { group = "net.kyori", name = "ansi", version.ref = "ansi" } +mysql = { group = "com.mysql", name = "mysql-connector-j", version.ref = "mysql" } +jansi = { group = "org.jline", name = "jline-terminal-jansi", version.ref = "jansi" } +sqlite = { group = "org.xerial", name = "sqlite-jdbc", version.ref = "sqlite" } +haproxy = { group = "io.netty", name = "netty-codec-haproxy", version.ref = "haproxy" } +velocity = { group = "com.velocitypowered", name = "velocity-native", version.ref = "velocity" } +disruptor = { group = "com.lmax", name = "disruptor", version.ref = "disruptor" } +mappingio = { group = "net.fabricmc", name = "mapping-io", version.ref = "mapping-io" } +classgraph = { group = "io.github.classgraph", name = "classgraph", version.ref = "classgraph" } +simpleyaml = { group = "com.github.carleslc.Simple-YAML", name = "Simple-Yaml", version.ref = "simpleyaml" } +configurate = { group = "org.spongepowered", name = "configurate-yaml", version.ref = "configurate" } + +rhino-engine = { group = "org.mozilla", name = "rhino-engine", version.ref = "rhino" } +rhino-runtime = { group = "org.mozilla", name = "rhino-runtime", version.ref = "rhino" } +terminal-appender = { group = "net.minecrell", name = "terminalconsoleappender", version.ref="terminal-appender" } + +[bundles] +runtime = [ "sqlite", "mysql", "disruptor" ] +implementation = [ "jansi", "terminal-appender", "ansi", "haproxy", "configurate", "mappingio", "rhino-engine", "rhino-runtime" ] diff --git a/mkapi.sh b/mkapi similarity index 100% rename from mkapi.sh rename to mkapi diff --git a/mksrv.sh b/mksrv similarity index 100% rename from mksrv.sh rename to mksrv diff --git a/patches/api/0003-Build-system-changes.patch b/patches/api/0003-Build-system-changes.patch new file mode 100644 index 0000000..49663de --- /dev/null +++ b/patches/api/0003-Build-system-changes.patch @@ -0,0 +1,115 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Sun, 14 Jan 2024 19:50:29 +0900 +Subject: [PATCH] Build system changes + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 41d7b75e904b94073dfcd12b776a7759a963b66f..96974f191c13424d72839d85dfa2a6c29b9f4d1d 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -9,11 +9,13 @@ java { + withJavadocJar() + } + ++/* // Plazma - Use libs.versions.toml + val annotationsVersion = "24.0.1" + val bungeeCordChatVersion = "1.20-R0.1" + val adventureVersion = "4.14.0" + val slf4jVersion = "1.8.0-beta4" + val log4jVersion = "2.17.1" ++ */ // Plazma - Use libs.versions.toml + val apiAndDocs: Configuration by configurations.creating { + attributes { + attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION)) +@@ -28,15 +30,39 @@ configurations.api { + + dependencies { + // api dependencies are listed transitively to API consumers ++ /* // Plazma - Use libs.versions.toml + api("com.google.guava:guava:32.1.2-jre") + api("com.google.code.gson:gson:2.10.1") + api("net.md-5:bungeecord-chat:$bungeeCordChatVersion-deprecated+build.14") // Paper + api("org.yaml:snakeyaml:2.2") + api("org.joml:joml:1.10.5") ++ */ // Plazma - Use libs.versions.toml + // Paper start +- api("com.googlecode.json-simple:json-simple:1.1.1") { ++ api(api.jsonsimple) { // Plazma - Use libs.versions.toml + isTransitive = false // includes junit + } ++ // Plazma start ++ implementation(common.bundles.asm) ++ ++ compileOnly(api.findbugs) ++ compileOnly(common.bundles.maven) ++ ++ compileOnly(api.annotations) ++ compileOnlyApi(api.checkerqual) ++ testCompileOnly(api.bundles.annotations) ++ ++ testImplementation(common.asm.tree) ++ testImplementation(common.bundles.test) ++ testImplementation(common.commons.lang3) ++ ++ api(api.bundles.api) ++ api(common.snakeyaml) ++ api(common.log4j.api) ++ api(common.maven.provider) ++ apiAndDocs(platform(common.adventure.bom)) ++ apiAndDocs(common.bundles.adventure) ++ /* ++ // Plazma end + api("it.unimi.dsi:fastutil:8.5.6") + apiAndDocs(platform("net.kyori:adventure-bom:$adventureVersion")) + apiAndDocs("net.kyori:adventure-api") +@@ -73,6 +99,7 @@ dependencies { + testImplementation("org.hamcrest:hamcrest:2.2") + testImplementation("org.mockito:mockito-core:5.5.0") + testImplementation("org.ow2.asm:asm-tree:9.5") ++ */ // Plazma - Use libs.versions.toml + } + + // Paper start +@@ -133,25 +160,27 @@ tasks.withType { + options.use() + options.isDocFilesSubDirs = true + options.links( +- "https://guava.dev/releases/32.1.2-jre/api/docs/", +- "https://javadoc.io/doc/org.yaml/snakeyaml/2.2/", +- "https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", // Paper - we don't want Java 5 annotations ++ // Plazma start - Use libs.versions.toml ++ "https://guava.dev/releases/${api.guava.orNull?.version}/api/docs/", ++ "https://javadoc.io/doc/org.yaml/snakeyaml/${common.snakeyaml.orNull?.version}/", ++ "https://javadoc.io/doc/org.jetbrains/annotations/${api.annotations.orNull?.version}/", // Paper - we don't want Java 5 annotations + // "https://javadoc.io/doc/net.md-5/bungeecord-chat/$bungeeCordChatVersion/", // Paper - don't link to bungee chat + // Paper start - add missing javadoc links +- "https://javadoc.io/doc/org.joml/joml/1.10.5/index.html", +- "https://www.javadoc.io/doc/com.google.code.gson/gson/2.10.1", ++ "https://javadoc.io/doc/org.joml/joml/${api.joml.orNull?.version}/index.html", ++ "https://www.javadoc.io/doc/com.google.code.gson/gson/${api.gson.orNull?.version}", + // Paper end + // Paper start +- "https://jd.advntr.dev/api/$adventureVersion/", +- "https://jd.advntr.dev/text-minimessage/$adventureVersion/", +- "https://jd.advntr.dev/text-serializer-gson/$adventureVersion/", +- "https://jd.advntr.dev/text-serializer-legacy/$adventureVersion/", +- "https://jd.advntr.dev/text-serializer-plain/$adventureVersion/", +- "https://jd.advntr.dev/text-logger-slf4j/$adventureVersion/", +- "https://javadoc.io/doc/org.slf4j/slf4j-api/$slf4jVersion/", +- "https://javadoc.io/doc/org.apache.logging.log4j/log4j-api/$log4jVersion/", ++ "https://jd.advntr.dev/api/${common.adventure.api.orNull?.version}/", ++ "https://jd.advntr.dev/text-minimessage/${common.adventure.api.orNull?.version}/", ++ "https://jd.advntr.dev/text-serializer-gson/${common.adventure.api.orNull?.version}/", ++ "https://jd.advntr.dev/text-serializer-legacy/${common.adventure.api.orNull?.version}/", ++ "https://jd.advntr.dev/text-serializer-plain/${common.adventure.api.orNull?.version}/", ++ "https://jd.advntr.dev/text-logger-slf4j/${common.adventure.api.orNull?.version}/", ++ "https://javadoc.io/doc/org.slf4j/slf4j-api/${api.slf4j.api.orNull?.version}/", ++ "https://javadoc.io/doc/org.apache.logging.log4j/log4j-api/${common.log4j.api.orNull?.version}/", + // Paper end +- "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", // Paper ++ "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/${common.maven.provider.orNull?.version}", // Paper ++ // Plazma end + ) + options.tags("apiNote:a:API Note:") + diff --git a/patches/api/0003-Plazma-Configurations.patch b/patches/api/0004-Plazma-Configurations.patch similarity index 100% rename from patches/api/0003-Plazma-Configurations.patch rename to patches/api/0004-Plazma-Configurations.patch diff --git a/patches/api/0004-Optimize-spigot-event-bus.patch b/patches/api/0005-Optimize-spigot-event-bus.patch similarity index 100% rename from patches/api/0004-Optimize-spigot-event-bus.patch rename to patches/api/0005-Optimize-spigot-event-bus.patch diff --git a/patches/api/0005-Implement-No-Chat-Reports.patch b/patches/api/0006-Implement-No-Chat-Reports.patch similarity index 100% rename from patches/api/0005-Implement-No-Chat-Reports.patch rename to patches/api/0006-Implement-No-Chat-Reports.patch diff --git a/patches/server/0003-Build-system-changes.patch b/patches/server/0003-Build-system-changes.patch new file mode 100644 index 0000000..d736001 --- /dev/null +++ b/patches/server/0003-Build-system-changes.patch @@ -0,0 +1,78 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Sun, 14 Jan 2024 19:51:19 +0900 +Subject: [PATCH] Build system changes + + +diff --git a/build.gradle.kts b/build.gradle.kts +index f083d422678f5fd21825439944af888fbdc9bf3c..e30b51ed329f0c66a2329da45996ef0fc0db8ffb 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -19,6 +19,7 @@ dependencies { + exclude("io.papermc.paper", "paper-api") + } + // Purpur end ++ /* // Plazma - Use libs.versions.toml + // Paper start + implementation("org.jline:jline-terminal-jansi:3.21.0") + implementation("net.minecrell:terminalconsoleappender:1.3.0") +@@ -46,9 +47,32 @@ dependencies { + runtimeOnly("com.mysql:mysql-connector-j:8.1.0") + runtimeOnly("com.lmax:disruptor:3.4.4") // Paper + // Paper start - Use Velocity cipher +- implementation("com.velocitypowered:velocity-native:3.1.2-SNAPSHOT") { ++ // Plazma start - Use libs.versions.toml ++ */ ++ implementation(common.snakeyaml) ++ implementation(common.bundles.asm) ++ implementation(common.commons.lang2) ++ implementation(common.adventure.serializer.ansi) ++ implementation(common.log4j.core) ++ implementation(common.log4j.iostreams) ++ log4jPlugins.annotationProcessorConfigurationName(common.log4j.core) ++ runtimeOnly(log4jPlugins.output) ++ alsoShade(log4jPlugins.output) ++ ++ implementation(server.ansi) ++ implementation(server.bundles.implementation) ++ implementation(server.velocity) { ++ // Plazma end + isTransitive = false + } ++ ++ runtimeOnly(common.bundles.maven) ++ runtimeOnly(common.maven.provider) ++ runtimeOnly(server.bundles.runtime) ++ ++ testImplementation(common.bundles.test) ++ testImplementation(server.classgraph) ++ /* // Plazma - Use libs.versions.toml + // Paper end + + runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.5") +@@ -57,19 +81,22 @@ dependencies { + + // Pufferfish start + implementation("org.yaml:snakeyaml:1.32") +- implementation ("com.github.carleslc.Simple-YAML:Simple-Yaml:1.8.4") { ++ */ // Plazma - Use libs.versions.toml ++ implementation(server.simpleyaml) { // Plazma - Use libs.versions.toml + exclude(group="org.yaml", module="snakeyaml") + } + // Pufferfish end + +- implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur +- implementation("org.mozilla:rhino-engine:1.7.14") // Purpur ++ //implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur // Plazma - Use libs.versions.toml ++ //implementation("org.mozilla:rhino-engine:1.7.14") // Purpur // Plazma - Use libs.versions.toml + implementation("dev.omega24:upnp4j:1.0") // Purpur + ++ /* // Plazma - Use libs.versions.toml + testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test + testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") + testImplementation("org.hamcrest:hamcrest:2.2") + testImplementation("org.mockito:mockito-core:5.5.0") ++ */ // Plazma - Use libs.versions.toml + } + + val craftbukkitPackageVersion = "1_20_R2" // Paper diff --git a/patches/server/0003-MC-Dev-fixes.patch b/patches/server/0004-MC-Dev-fixes.patch similarity index 100% rename from patches/server/0003-MC-Dev-fixes.patch rename to patches/server/0004-MC-Dev-fixes.patch diff --git a/patches/server/0004-Rebrand.patch b/patches/server/0005-Rebrand.patch similarity index 99% rename from patches/server/0004-Rebrand.patch rename to patches/server/0005-Rebrand.patch index a1cf7ff..9c524be 100644 --- a/patches/server/0004-Rebrand.patch +++ b/patches/server/0005-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index f083d422678f5fd21825439944af888fbdc9bf3c..526f25bdf5216dba09d51eca73f38884c106e872 100644 +index e30b51ed329f0c66a2329da45996ef0fc0db8ffb..d91928799014596de519d1a1b3f1bb0a80ac925c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ val alsoShade: Configuration by configurations.creating @@ -17,7 +17,7 @@ index f083d422678f5fd21825439944af888fbdc9bf3c..526f25bdf5216dba09d51eca73f38884 implementation("io.papermc.paper:paper-mojangapi:${project.version}") { exclude("io.papermc.paper", "paper-api") } -@@ -93,7 +93,7 @@ tasks.jar { +@@ -120,7 +120,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", diff --git a/patches/server/0005-Rebrand-Logo.patch b/patches/server/0006-Rebrand-Logo.patch similarity index 100% rename from patches/server/0005-Rebrand-Logo.patch rename to patches/server/0006-Rebrand-Logo.patch diff --git a/patches/server/0006-Plazma-Configurations.patch b/patches/server/0007-Plazma-Configurations.patch similarity index 100% rename from patches/server/0006-Plazma-Configurations.patch rename to patches/server/0007-Plazma-Configurations.patch diff --git a/patches/server/0007-Setup-basic-configuration-sections.patch b/patches/server/0008-Setup-basic-configuration-sections.patch similarity index 100% rename from patches/server/0007-Setup-basic-configuration-sections.patch rename to patches/server/0008-Setup-basic-configuration-sections.patch diff --git a/patches/server/0008-Always-agree-EULA-on-development-mode.patch b/patches/server/0009-Always-agree-EULA-on-development-mode.patch similarity index 100% rename from patches/server/0008-Always-agree-EULA-on-development-mode.patch rename to patches/server/0009-Always-agree-EULA-on-development-mode.patch diff --git a/patches/server/0009-Add-more-metrics.patch b/patches/server/0010-Add-more-metrics.patch similarity index 100% rename from patches/server/0009-Add-more-metrics.patch rename to patches/server/0010-Add-more-metrics.patch diff --git a/patches/server/0010-Optimize-default-configurations.patch b/patches/server/0011-Optimize-default-configurations.patch similarity index 99% rename from patches/server/0010-Optimize-default-configurations.patch rename to patches/server/0011-Optimize-default-configurations.patch index a61ce2c..94b551c 100644 --- a/patches/server/0010-Optimize-default-configurations.patch +++ b/patches/server/0011-Optimize-default-configurations.patch @@ -351,7 +351,7 @@ index 9b8bdffbbfe45c6712d0f4da3643424fa94fc69e..84eca01450db5b737c676cab2439d041 File commandFile = (File) optionset.valueOf("commands-settings"); diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index cda4544ae96a4fcb5c6c4483df67a59f1b53fd27..2282992d04669a705a5b67f616fe921c289182ab 100644 +index fe82a20efb2b130a568bc06aec5b86d3082062a3..8dddcacec38bf2d5d79ce7fc0f26a2cced5d271d 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -131,14 +131,14 @@ public class DedicatedServerProperties extends Settings