diff --git a/build.gradle.kts b/build.gradle.kts index 34e1486..6afb8f5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,8 +11,8 @@ plugins { } val jdkVersion = property("jdkVersion").toString().toInt() -val projectName = property("projectName").toString() -val projectRepo = property("projectRepo").toString() +val providerRepo = property("providerRepo").toString() +val brandName = property("brandName").toString() kotlin.jvmToolchain(jdkVersion) @@ -35,21 +35,13 @@ allprojects { java.toolchain.languageVersion.set(JavaLanguageVersion.of(jdkVersion)) - publishing { - repositories { - maven { - name = "githubPackage" - url = uri("https://maven.pkg.github.com/$projectRepo") + publishing.repositories.maven("https://maven.pkg.github.com/$providerRepo") { + name = "githubPackage" + url = uri("https://maven.pkg.github.com/$providerRepo") - credentials { - username = System.getenv("GITHUB_USERNAME") - password = System.getenv("GITHUB_TOKEN") - } - } - - publications.register("gpr") { - from(components["java"]) - } + credentials { + username = System.getenv("GITHUB_USERNAME") + password = System.getenv("GITHUB_TOKEN") } } } @@ -90,7 +82,7 @@ subprojects { } paperweight { - serverProject = project(":${projectName.lowercase()}-server") + serverProject = project(":${brandName.lowercase()}-server") remapRepo = "https://repo.papermc.io/repository/maven-public/" decompileRepo = "https://repo.papermc.io/repository/maven-public/" @@ -98,10 +90,10 @@ paperweight { usePaperUpstream(providers.gradleProperty("paperCommit")) { withPaperPatcher { apiPatchDir.set(projectDir.resolve("patches/api")) - apiOutputDir.set(projectDir.resolve("$projectName-API")) + apiOutputDir.set(projectDir.resolve("$brandName-API")) serverPatchDir.set(projectDir.resolve("patches/server")) - serverOutputDir.set(projectDir.resolve("$projectName-Server")) + serverOutputDir.set(projectDir.resolve("$brandName-Server")) } patchTasks.register("generatedApi") { @@ -139,10 +131,10 @@ tasks { } generateDevelopmentBundle { - apiCoordinates.set("${project.group}:${projectName.lowercase()}-api") + apiCoordinates.set("${project.group}:${brandName.lowercase()}-api") libraryRepositories.addAll( "https://repo.maven.apache.org/maven2/", - "https://maven.pkg.github.com/$projectRepo", + "https://maven.pkg.github.com/$providerRepo", "https://papermc.io/repo/repository/maven-public/" ) } @@ -151,8 +143,8 @@ tasks { doLast { listOf( ".gradle/caches", - "$projectName-API", - "$projectName-Server", + "$brandName-API", + "$brandName-Server", "paper-api-generator", "run", diff --git a/gradle.properties b/gradle.properties index 10c348a..06c98b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,8 +8,9 @@ paper.runMemoryGb = 8 paper.runDisableWatchdog = true group = org.plazmamc.plazma -projectName = Plazma -projectRepo = PlazmaMC/PlazmaBukkit +brandName = Plazma +providerName = PlazmaMC +providerRepo = PlazmaMC/PlazmaBukkit version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 @@ -23,5 +24,5 @@ pufferfishRepo = https://github.com/PlazmaMC/Pufferfish pufferfishBranch = ver/1.20 usePufferfish = true -paperCommit = 3fc93581bb876e8149b2ca423375a98f5ca12d27 -purpurCommit = 150395f1dc7bc64b1e8099f9f41ee7f9bcc94519 +paperCommit = 4e10fadfdc8f854feeabf916c23a71e21fb0b29f +purpurCommit = e8f8f9345b7f7110e8f85e542c0cbccbb0fb1475 diff --git a/patches/api/0001-Pufferfish-API-Changes.patch b/patches/api/0001-Pufferfish-API-Changes.patch index 7854ab5..77db9d3 100644 --- a/patches/api/0001-Pufferfish-API-Changes.patch +++ b/patches/api/0001-Pufferfish-API-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 -Date: Tue, 14 May 2024 19:21:24 +0900 +Date: Sun, 26 May 2024 19:50:35 +0900 Subject: [PATCH] Pufferfish API Changes diff --git a/patches/api/0002-Purpur-API-Changes.patch b/patches/api/0002-Purpur-API-Changes.patch index 2f6a373..dd79546 100644 --- a/patches/api/0002-Purpur-API-Changes.patch +++ b/patches/api/0002-Purpur-API-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: granny -Date: Wed, 15 May 2024 03:16:50 +0000 +Date: Sun, 26 May 2024 20:53:49 +0900 Subject: [PATCH] Purpur API Changes PurpurMC @@ -198,11 +198,29 @@ index ab5fea0b03224bf249352ce340e94704ff713345..3441cdad70da1bd523c5933b1a914688 return false; } else { SIMDDetection.testRun = true; +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java +index 9df9d09aa477d4cd3c496ba0933c816df1ef0964..7107eabf02d9d9b69d97c978ba421ad52031ec3f 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java +@@ -18,6 +18,13 @@ public interface ServerBuildInfo { + */ + Key BRAND_PAPER_ID = Key.key("papermc", "paper"); + ++ // Purpur start ++ /** ++ * The brand id for Purpur. ++ */ ++ Key BRAND_PURPUR_ID = Key.key("purpurmc", "purpur"); ++ // Purpur end ++ + /** + * Gets the {@code ServerBuildInfo}. + * diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 5d1b55fdbcbe63f6b42b694d05211a3cc691a09d..70ef8f63ab79e102cb4326c21cc344488f4fbdd3 100644 +index 9a219b255b63f10005fc68faacb771dd32f61ac2..83b979fbb8c0dd64f0a19feef654af2b165bd603 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2910,4 +2910,127 @@ public final class Bukkit { +@@ -2913,4 +2913,127 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } @@ -421,10 +439,10 @@ index 918a045165cdcde264bc24082b7afebb407271de..687d11619379aead7f665d4a5f8f8bcc + // Purpur end } diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index 81f9ad99699a78b97e4accaaf1a98eacf29493ce..e3e996d932db689ba62a43f7f01d6f003f8337d3 100644 +index 7509b61dfdc0a6675256970cb850b08f9e814580..c1986ca90c3adb81daca4f72b62cda65e5465bff 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -5701,4 +5701,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -5733,4 +5733,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla } return Registry.BLOCK.get(material.key); } @@ -577,7 +595,7 @@ index 30298a629b39bd43ce14b414fc697b2dfcbea89c..ce00af9121de7a910aaea4e0685a06d4 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index c8595ffcfcbdd79794d464415287d46acef72b72..ec8b9b2cbe65838a194281f7d76d0e17defc5211 100644 +index 49d2547fcdaf779e284f513e58c1ac2ae3000bda..916db0d6096338c4f1b8707048eb38b50a2b027d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2257,6 +2257,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -599,7 +617,7 @@ index c8595ffcfcbdd79794d464415287d46acef72b72..ec8b9b2cbe65838a194281f7d76d0e17 /** * Sends the component to the player * -@@ -2542,4 +2554,105 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2546,4 +2558,105 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ boolean isOwnedByCurrentRegion(@NotNull Entity entity); // Paper end - Folia region threading API @@ -864,7 +882,7 @@ index c3a9cf65db73ed534bf20996c7f05b5eb0aaebe1..fdedac32544be6534288c8ba28abe7f5 server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerCommandException(ex, target, sender, args))); // Paper //target.timings.stopTiming(); // Spigot // Paper diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -index fd5d9881abfd930bb883120f018f76dc78b62b14..d3dadad49df09e85c724c93e8cc88da2c985e9b4 100644 +index fd5d9881abfd930bb883120f018f76dc78b62b14..3d29c47ac0620af82d990faf5dfc266c6f0235f1 100644 --- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java +++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java @@ -214,7 +214,7 @@ public class VersionCommand extends BukkitCommand { @@ -886,7 +904,7 @@ index fd5d9881abfd930bb883120f018f76dc78b62b14..d3dadad49df09e85c724c93e8cc88da2 + // Purpur start + int distance = getVersionFetcher().distance(); + final Component message = Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), -+ ChatColor.parseMM("Current: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), ++ ChatColor.parseMM("Current Purpur Version: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), + // Purpur end msg ); @@ -2041,7 +2059,7 @@ index c64413a6740b604282984dea2a8430a6e7478d68..5c609d916e2d2f08ba90ebd23f13c5c9 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java -index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d9fa66a26 100644 +index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f7390795fd9f55c 100644 --- a/src/main/java/org/bukkit/inventory/RecipeChoice.java +++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java @@ -10,6 +10,7 @@ import java.util.function.Predicate; @@ -2052,7 +2070,7 @@ index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d /** * Represents a potential item match within a recipe. All choices within a -@@ -157,6 +158,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -180,6 +181,7 @@ public interface RecipeChoice extends Predicate, Cloneable { public static class ExactChoice implements RecipeChoice { private List choices; @@ -2060,7 +2078,7 @@ index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d public ExactChoice(@NotNull ItemStack stack) { this(Arrays.asList(stack)); -@@ -206,6 +208,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -229,6 +231,7 @@ public interface RecipeChoice extends Predicate, Cloneable { @Override public boolean test(@NotNull ItemStack t) { @@ -2068,7 +2086,7 @@ index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d for (ItemStack match : choices) { if (t.isSimilar(match)) { return true; -@@ -215,6 +218,17 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -238,6 +241,17 @@ public interface RecipeChoice extends Predicate, Cloneable { return false; } @@ -2138,7 +2156,7 @@ index 301e82369603f3dd6e6c1bd380da4bacacd7ef6c..0c6ca7588fb3d6b6497ddf032fe75e5c /** * This class was not meant to be constructed explicitly diff --git a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java -index 8e1b6be2462aaa692efa1f72986921a6dc357196..b6e18b12fd4d61ce92203582906d24b4d14e6cc5 100644 +index c66252802c51174bc26f266cb5cdecdd856ff220..97f580fccd06a8db5f592a53c8b95a7a6159adac 100644 --- a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java +++ b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java @@ -68,6 +68,7 @@ public class LibraryLoader @@ -2149,7 +2167,7 @@ index 8e1b6be2462aaa692efa1f72986921a6dc357196..b6e18b12fd4d61ce92203582906d24b4 logger.log( Level.INFO, "Downloading {0}", event.getResource().getRepositoryUrl() + event.getResource().getResourceName() ); } } ); -@@ -88,6 +89,7 @@ public class LibraryLoader +@@ -94,6 +95,7 @@ public class LibraryLoader { return null; } @@ -2157,7 +2175,7 @@ index 8e1b6be2462aaa692efa1f72986921a6dc357196..b6e18b12fd4d61ce92203582906d24b4 logger.log( Level.INFO, "[{0}] Loading {1} libraries... please wait", new Object[] { java.util.Objects.requireNonNullElseGet(desc.getPrefix(), desc::getName), desc.getLibraries().size() // Paper - use configured log prefix -@@ -135,6 +137,7 @@ public class LibraryLoader +@@ -144,6 +146,7 @@ public class LibraryLoader } jarFiles.add( url ); diff --git a/patches/api/0004-Rebrand.patch b/patches/api/0004-Rebrand.patch index 515c303..967352c 100644 --- a/patches/api/0004-Rebrand.patch +++ b/patches/api/0004-Rebrand.patch @@ -31,3 +31,90 @@ index 0000000000000000000000000000000000000000..67d405764ed68083d0164b1af0eabc0a +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. +diff --git a/src/main/java/co/aikar/timings/TimingHandler.java b/src/main/java/co/aikar/timings/TimingHandler.java +index 199789d56d22fcb1b77ebd56805cc28aa5a5ab0a..3b3bcfa6fa2dbcc7fef899cc7570da097437ab3a 100644 +--- a/src/main/java/co/aikar/timings/TimingHandler.java ++++ b/src/main/java/co/aikar/timings/TimingHandler.java +@@ -127,7 +127,7 @@ class TimingHandler implements Timing { + while ((last = TIMING_STACK.removeLast()) != this) { + last.timingDepth = 0; + if ("Minecraft".equalsIgnoreCase(last.identifier.group)) { +- Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Look above this for any errors and report this to Paper unless it has a plugin in the stack trace (" + last.identifier + " did not stopTiming)"); ++ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Look above this for any errors and report this to " + io.papermc.paper.ServerBuildInfo.buildInfo().brandName() + " unless it has a plugin in the stack trace (" + last.identifier + " did not stopTiming)"); + } else { + Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Report this to the plugin " + last.identifier.group + " (Look for errors above this in the logs) (" + last.identifier + " did not stopTiming)", new Throwable()); + } +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java +index 7107eabf02d9d9b69d97c978ba421ad52031ec3f..098125a57409b480f045c3a8c3b58db74a6605f3 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java +@@ -25,6 +25,29 @@ public interface ServerBuildInfo { + Key BRAND_PURPUR_ID = Key.key("purpurmc", "purpur"); + // Purpur end + ++ // Plazma start - Rebranding ++ /** ++ * The brand id for Plazma. ++ */ ++ Key BRAND_PLAZMA_ID = Key.key("plazmamc", "plazma"); ++ ++ // For those who fork Plazma - please add the new branding key here ++ ++ /** ++ * The brand id of the server. ++ */ ++ Key BRAND_ID = BRAND_PLAZMA_ID; ++ ++ /** ++ * Supported brands of the server. ++ */ ++ java.util.List SUPPORTED_BRANDS = java.util.Arrays.asList( ++ BRAND_PAPER_ID, ++ BRAND_PURPUR_ID, ++ BRAND_PLAZMA_ID ++ ); ++ // Plazma end - Rebranding ++ + /** + * Gets the {@code ServerBuildInfo}. + * +diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java +index 3d29c47ac0620af82d990faf5dfc266c6f0235f1..0dd22efb7f318867d0f099e336505d2830883745 100644 +--- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java ++++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java +@@ -258,7 +258,7 @@ public class VersionCommand extends BukkitCommand { + // Purpur start + int distance = getVersionFetcher().distance(); + final Component message = Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), +- ChatColor.parseMM("Current Purpur Version: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), ++ ChatColor.parseMM("Current " + io.papermc.paper.ServerBuildInfo.buildInfo().brandName() + " Version: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), + // Purpur end + msg + ); +@@ -281,6 +281,7 @@ public class VersionCommand extends BukkitCommand { + } + } + ++ /* // Plazma - Fork-friendly Rebranding + private static int getDistance(@NotNull String repo, @NotNull String hash) { + try { + BufferedReader reader = Resources.asCharSource( +@@ -301,4 +302,5 @@ public class VersionCommand extends BukkitCommand { + return -1; + } + } ++ */ // Plazma - Fork-friendly Rebranding + } +diff --git a/src/main/java/org/bukkit/plugin/EventExecutor.java b/src/main/java/org/bukkit/plugin/EventExecutor.java +index 60e086be70529e0804280b24a2a3e7ae72d8d363..dcf1d53af919e94a6947bc3f81121bd4fad1a163 100644 +--- a/src/main/java/org/bukkit/plugin/EventExecutor.java ++++ b/src/main/java/org/bukkit/plugin/EventExecutor.java +@@ -54,7 +54,7 @@ public interface EventExecutor { + if (m.getReturnType() != Void.TYPE) { + final org.bukkit.plugin.java.JavaPlugin plugin = org.bukkit.plugin.java.JavaPlugin.getProvidingPlugin(m.getDeclaringClass()); + org.bukkit.Bukkit.getLogger().warning("@EventHandler method " + m.getDeclaringClass().getName() + (Modifier.isStatic(m.getModifiers()) ? '.' : '#') + m.getName() +- + " returns non-void type " + m.getReturnType().getName() + ". This is unsupported behavior and will no longer work in a future version of Paper." ++ + " returns non-void type " + m.getReturnType().getName() + ". This is unsupported behavior and will no longer work in a future version of " + io.papermc.paper.ServerBuildInfo.buildInfo().brandName() + "." // Plazma - Fork-friendly Rebranding + + " This should be reported to the developers of " + plugin.getPluginMeta().getDisplayName() + " (" + String.join(",", plugin.getPluginMeta().getAuthors()) + ')'); + } + if (Modifier.isStatic(m.getModifiers())) { diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch index 81e0818..d2c331a 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Kevin Raneri -Date: Wed, 15 May 2024 03:16:48 +0000 +Date: Sun, 26 May 2024 20:53:48 +0900 Subject: [PATCH] Pufferfish Server Changes Pufferfish @@ -20,19 +20,19 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..00b31bbf6a5832799eae65e5be67cc6e92c69a56 100644 +index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d877dbae82b775250739b5b8d84e163d37a39e35 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -12,7 +12,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { +@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { - implementation(project(":paper-api")) -+ implementation(project(":pufferfish-api")) // Pufferfish // Paper ++ implementation(project(":pufferfish-api")) // Pufferfish // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -46,6 +46,14 @@ dependencies { +@@ -47,6 +47,14 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") @@ -47,7 +47,7 @@ index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..00b31bbf6a5832799eae65e5be67cc6e testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -66,6 +74,13 @@ paperweight { +@@ -67,6 +75,13 @@ paperweight { craftBukkitPackageVersion.set("v1_20_R4") // also needs to be updated in MappingEnvironment } @@ -61,15 +61,15 @@ index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..00b31bbf6a5832799eae65e5be67cc6e tasks.jar { archiveClassifier.set("dev") -@@ -78,7 +93,7 @@ tasks.jar { +@@ -75,7 +90,7 @@ tasks.jar { + val mcVersion = rootProject.providers.gradleProperty("mcVersion").get() + val build = System.getenv("BUILD_NUMBER") ?: null + val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim() +- val implementationVersion = "$mcVersion-${build ?: "DEV"}-$gitHash" ++ val implementationVersion = "git-Pufferfish-$gitHash" // Pufferfish + val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper + val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( - "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Paper-$implementationVersion", -+ "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish - "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", - "Specification-Version" to project.version, diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java index 7620c72a4c243cbeea245203ce03a97cbfa7d922..b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java @@ -2251,10 +2251,10 @@ index 300929a406905f5ff1ede664d5b99fb0938d4d2e..01a6b1135420ea659d092ddca499f281 throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.OUT_OF_ORDER_CHAT, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes } else { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 39303bb4e336732db0ab19dee0c1f8b609bbb134..b5b5d467231b571455f82d1943e6a8a46d75c7dc 100644 +index 0ed42fa899721f83b598db05be1b5f321af3614a..d3ac9185d16099daac9144d7adf6dc38827ab0dc 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -319,6 +319,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); -@@ -1240,6 +1241,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper +- return io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); // Paper ++ return "Pufferfish"; // Paper // Pufferfish - Use dedicated VersionFetcher } public SystemReport fillSystemReport(SystemReport details) { -@@ -2561,6 +2568,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tag, double speed) { @@ -2730,7 +2730,7 @@ index 2bc85351e6e52f90da5fdb29d8d042a06132d742..c246be0aa8e88d9c60260176fe4cbc07 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4495,14 +4506,61 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4501,14 +4512,61 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -2798,7 +2798,7 @@ index 2bc85351e6e52f90da5fdb29d8d042a06132d742..c246be0aa8e88d9c60260176fe4cbc07 if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4524,9 +4582,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4530,9 +4588,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end } } @@ -2825,7 +2825,7 @@ index a46bf73c608641bf1f00fd55242de71a0f2ee06e..e6edbe6177b168d85759bd9c414dc87e private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 517e10c3d8b1549cd30fd0e7cf2bcb35e88eb8ed..6bc0f6256851b1aa3c0e590692a949cd1e9c337d 100644 +index ef0f118aecf0893e45cb9423a677d7e42496324b..d2f3597e590d54753f53759680c6617a98d4f913 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -150,7 +150,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; @@ -2887,7 +2887,7 @@ index 517e10c3d8b1549cd30fd0e7cf2bcb35e88eb8ed..6bc0f6256851b1aa3c0e590692a949cd if (this.isSpectator()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index e89f9c3e887601d8461eb967ae0bf582b672f631..9aa42d6ce2c9f64142dd6f35a34319983bf7f3e4 100644 +index a80f313771575c1f772d23ef2469a2dce7b1688c..4dcd23324921373975d4ef8e1c4b3fd10292fdca 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -237,14 +237,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -3497,10 +3497,10 @@ index 3554109bcc4651ca93b6275c914e57e007e2204e..60c7a9520335de8e2638572100affcfd autorecipestackmanager.initialize(this); // Paper - better exact choice recipes int i = 0; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index b4ef3ad2c17168085372f1fe46809f02d9dfe74a..876990240293740046c6a6b43aebad6d7d5075d6 100644 +index 0a8eeebb2d702ebcefd9f26cc0f41d1eab497902..85368ac2e4b420d91c96860344f86d1a64d0d47e 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -212,6 +212,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -203,6 +203,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end public abstract ResourceKey getTypeKey(); @@ -3509,7 +3509,7 @@ index b4ef3ad2c17168085372f1fe46809f02d9dfe74a..876990240293740046c6a6b43aebad6d protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot -@@ -1308,13 +1310,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1299,13 +1301,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { try { tickConsumer.accept(entity); MinecraftServer.getServer().executeMidTickTasks(); // Paper - execute chunk tasks mid tick @@ -3525,7 +3525,7 @@ index b4ef3ad2c17168085372f1fe46809f02d9dfe74a..876990240293740046c6a6b43aebad6d // Paper end - Prevent block entity and entity crashes } } -@@ -1789,6 +1791,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1780,6 +1782,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -4058,19 +4058,19 @@ index 88a4a72bb390947dc17e5da09a99b2d1b3ac4621..284c76ddb9724b44bb2e93f590685c72 @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index da1aed63af837b193900bb85393611edbd56c363..6262147f9d3fc1a988d9362573d3736e3ddd88a1 100644 +index af015237214cebc4d1c4bb9e9c5f939d433e365c..49794050997ee1f0511ce4fa6c191906e4f4ca47 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -269,7 +269,7 @@ import javax.annotation.Nullable; // Paper +@@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { -- private final String serverName = "Paper"; // Paper -+ private final String serverName = "Pufferfish"; // Paper // Pufferfish +- private final String serverName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); // Paper ++ private final String serverName = "Pufferfish"; // Paper // Pufferfish - Use dedicated VersionFetcher private final String serverVersion; private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); -@@ -1129,6 +1129,11 @@ public final class CraftServer implements Server { +@@ -1124,6 +1124,11 @@ public final class CraftServer implements Server { plugin.getPluginMeta().getDisplayName(), "This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies." )); @@ -4132,10 +4132,10 @@ index 66bdac50130f523f9dc4379b103b7a469f9ca36b..ef780e0566dbac07da88ba26dc595b49 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 5a382907285a288f2a223189e690d3dbdf45594c..16d6a515e93619a0c9fdcaec5b99e0a36f8faec5 100644 +index e46714f38df931350d81c30907560c381c8d2725..d9f1164ab63017124a9601f980ee6a6ddb3626eb 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -511,7 +511,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -502,7 +502,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { diff --git a/patches/server/0002-Purpur-Server-Changes.patch b/patches/server/0002-Purpur-Server-Changes.patch index 488a8e2..fa73163 100644 --- a/patches/server/0002-Purpur-Server-Changes.patch +++ b/patches/server/0002-Purpur-Server-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: granny -Date: Wed, 15 May 2024 03:16:50 +0000 +Date: Sun, 26 May 2024 20:53:49 +0900 Subject: [PATCH] Purpur Server Changes PurpurMC @@ -25,19 +25,19 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build.gradle.kts b/build.gradle.kts -index 00b31bbf6a5832799eae65e5be67cc6e92c69a56..3bece6335887414d1388505febf6b8796e32bf9a 100644 +index d877dbae82b775250739b5b8d84e163d37a39e35..4c4d242475c5229e9cdae69fcc328d52af6df4b8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -12,7 +12,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { +@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { -- implementation(project(":pufferfish-api")) // Pufferfish // Paper -+ implementation(project(":purpur-api")) // Pufferfish // Paper // Purpur +- implementation(project(":pufferfish-api")) // Pufferfish ++ implementation(project(":purpur-api")) // Pufferfish // Purpur // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -54,6 +54,10 @@ dependencies { +@@ -55,6 +55,10 @@ dependencies { // Pufferfish end implementation("com.github.technove:Flare:34637f3f87") // Pufferfish - flare @@ -48,16 +48,27 @@ index 00b31bbf6a5832799eae65e5be67cc6e92c69a56..3bece6335887414d1388505febf6b879 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -93,7 +97,7 @@ tasks.jar { +@@ -95,14 +99,14 @@ tasks.jar { + val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish -+ "Implementation-Version" to "git-Purpur-$implementationVersion", // Pufferfish // Purpur +- "Implementation-Title" to "Paper", ++ "Implementation-Title" to "Purpur", // Purpur + "Implementation-Version" to implementationVersion, "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", +- "Specification-Title" to "Paper", ++ "Specification-Title" to "Purpur", // Purpur "Specification-Version" to project.version, -@@ -152,7 +156,7 @@ fun TaskContainer.registerRunTask( +- "Specification-Vendor" to "Paper Team", +- "Brand-Id" to "papermc:paper", +- "Brand-Name" to "Paper", ++ "Specification-Vendor" to "Purpur Team", // Purpur ++ "Brand-Id" to "purpurmc:purpur", // Purpur ++ "Brand-Name" to "Purpur", // Purpur + "Build-Number" to (build ?: ""), + "Build-Time" to Instant.now().toString(), + "Git-Branch" to gitBranch, // Paper +@@ -159,7 +163,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -190,97 +201,83 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..462a6eed350fd660ddaf25d567bb6e97b77d0b2b 100644 +index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..6d36fc6d8e22d9b68dea3830f6ecc8763184c343 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -19,8 +19,10 @@ import java.util.stream.StreamSupport; - - public class PaperVersionFetcher implements VersionFetcher { - private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end -- private static final String GITHUB_BRANCH_NAME = "master"; +@@ -35,7 +35,10 @@ public class PaperVersionFetcher implements VersionFetcher { + private static final Logger LOGGER = LogUtils.getClassLogger(); + private static final int DISTANCE_ERROR = -1; + private static final int DISTANCE_UNKNOWN = -2; - private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper"; + // Purpur start + private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; -+ private static int distance = -2; public int distance() { return distance; } ++ private static int distance = DISTANCE_UNKNOWN; public int distance() { return distance; } + // Purpur end - private static @Nullable String mcVer; @Override -@@ -31,11 +33,11 @@ public class PaperVersionFetcher implements VersionFetcher { - @Nonnull - @Override - public Component getVersionMessage(@Nonnull String serverVersion) { -- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); -- final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); -+ String[] parts = serverVersion.substring("git-Purpur-".length()).split("[-\\s]"); // Purpur -+ final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur - final Component history = getHistory(); + public long getCacheTime() { +@@ -49,7 +52,7 @@ public class PaperVersionFetcher implements VersionFetcher { + if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { + updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); + } else { +- updateMessage = getUpdateStatusMessage("PaperMC/Paper", build); ++ updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", build); // Purpur + } + final @Nullable Component history = this.getHistory(); -- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; -+ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur +@@ -57,7 +60,7 @@ public class PaperVersionFetcher implements VersionFetcher { } - private static @Nullable String getMinecraftVersion() { -@@ -45,7 +47,7 @@ public class PaperVersionFetcher implements VersionFetcher { - String result = matcher.group(); - mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-' - } else { -- org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to PaperMC!"); -+ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Purpur!"); // Purpur - org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); - org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); - } -@@ -55,7 +57,7 @@ public class PaperVersionFetcher implements VersionFetcher { - } + private static Component getUpdateStatusMessage(final String repo, final ServerBuildInfo build) { +- int distance = DISTANCE_ERROR; ++ //int distance = DISTANCE_ERROR; // Purpur - use field - private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) { -- int distance; -+ //int distance; // Purpur - use field - try { - int jenkinsBuild = Integer.parseInt(versionInfo); - distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion()); -@@ -66,13 +68,13 @@ public class PaperVersionFetcher implements VersionFetcher { + final OptionalInt buildNumber = build.buildNumber(); + if (buildNumber.isPresent()) { +@@ -71,10 +74,10 @@ public class PaperVersionFetcher implements VersionFetcher { + } - switch (distance) { - case -1: -- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); -+ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur - case 0: -- return Component.text("You are running the latest version", NamedTextColor.GREEN); -+ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur - case -2: -- return Component.text("Unknown version", NamedTextColor.YELLOW); -+ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur - default: -- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) -+ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur - .append(Component.newline()) - .append(Component.text("Download the new version at: ") - .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD) -@@ -85,15 +87,11 @@ public class PaperVersionFetcher implements VersionFetcher { - if (siteApiVersion == null) { return -1; } + return switch (distance) { +- case DISTANCE_ERROR -> text("Error obtaining version information", NamedTextColor.YELLOW); +- case 0 -> text("You are running the latest version", NamedTextColor.GREEN); +- case DISTANCE_UNKNOWN -> text("Unknown version", NamedTextColor.YELLOW); +- default -> text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) ++ case DISTANCE_ERROR -> text("* Error obtaining version information", NamedTextColor.RED); // Purpur ++ case 0 -> text("* You are running the latest version", NamedTextColor.GREEN); // Purpur ++ case DISTANCE_UNKNOWN -> text("* Unknown version", NamedTextColor.YELLOW); // Purpur ++ default -> text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur + .append(Component.newline()) + .append(text("Download the new version at: ") + .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) +@@ -86,18 +89,15 @@ public class PaperVersionFetcher implements VersionFetcher { + private static int fetchDistanceFromSiteApi(final ServerBuildInfo build, final int jenkinsBuild) { try { - try (BufferedReader reader = Resources.asCharSource( -- new URL("https://api.papermc.io/v2/projects/paper/versions/" + siteApiVersion), -+ new URL("https://api.purpurmc.org/v2/purpur/" + siteApiVersion), // Purpur + try (final BufferedReader reader = Resources.asCharSource( +- URI.create("https://api.papermc.io/v2/projects/paper/versions/" + build.minecraftVersionId()).toURL(), ++ URI.create("https://api.purpurmc.org/v2/purpur/" + build.minecraftVersionId()).toURL(), // Purpur Charsets.UTF_8 ).openBufferedStream()) { - JsonObject json = new Gson().fromJson(reader, JsonObject.class); -- JsonArray builds = json.getAsJsonArray("builds"); -- int latest = StreamSupport.stream(builds.spliterator(), false) -- .mapToInt(e -> e.getAsInt()) + final JsonObject json = new Gson().fromJson(reader, JsonObject.class); +- final JsonArray builds = json.getAsJsonArray("builds"); +- final int latest = StreamSupport.stream(builds.spliterator(), false) +- .mapToInt(JsonElement::getAsInt) - .max() -- .getAsInt(); -+ int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur +- .orElseThrow(); ++ //final JsonArray builds = json.getAsJsonArray("builds"); // Purpur ++ final int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur return latest - jenkinsBuild; - } catch (JsonSyntaxException ex) { - ex.printStackTrace(); -@@ -144,6 +142,6 @@ public class PaperVersionFetcher implements VersionFetcher { + } catch (final JsonSyntaxException ex) { +- LOGGER.error("Error parsing json from Paper's downloads API", ex); ++ LOGGER.error("Error parsing json from Purpur's downloads API", ex); // Purpur + return DISTANCE_ERROR; + } + } catch (final IOException e) { +@@ -141,6 +141,6 @@ public class PaperVersionFetcher implements VersionFetcher { return null; } -- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); -+ return org.bukkit.ChatColor.parseMM("Previous: %s", oldVersion); // Purpur +- return text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); ++ return text("Previous: " + oldVersion, NamedTextColor.GRAY); // Purpur } } diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -381,6 +378,39 @@ index 1ca25529245ed369b8705075a8c2e32fa4d9b1d1..cba3d725245223c5d9e8e59dcceec61f "Throttles the AI goal selector in entity inactive ticks.", "This can improve performance by a few percent, but has minor gameplay implications."); } +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +index 790bad0494454ca12ee152e3de6da3da634d9b20..a6e5950b5875cafd734300cdfbf58f5d3736f3c8 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +@@ -31,6 +31,7 @@ public record ServerBuildInfoImpl( + private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit"; + + private static final String BRAND_PAPER_NAME = "Paper"; ++ private static final String BRAND_PURPUR_NAME = "Purpur"; // Purpur + + private static final String BUILD_DEV = "DEV"; + +@@ -42,9 +43,9 @@ public record ServerBuildInfoImpl( + this( + getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) + .map(Key::key) +- .orElse(BRAND_PAPER_ID), ++ .orElse(BRAND_PURPUR_ID), // Purpur + getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) +- .orElse(BRAND_PAPER_NAME), ++ .orElse(BRAND_PURPUR_NAME), // Purpur + SharedConstants.getCurrentVersion().getId(), + SharedConstants.getCurrentVersion().getName(), + getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) +@@ -61,7 +62,7 @@ public record ServerBuildInfoImpl( + + @Override + public boolean isBrandCompatible(final @NotNull Key brandId) { +- return brandId.equals(this.brandId); ++ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur + } + + @Override diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java index 6bc7c6f16a1649fc9e24e7cf90fca401e5bd4875..e1ffd62f4ebceecb9bc5471df3da406cffea0483 100644 --- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java @@ -786,7 +816,7 @@ index 59d7e8a3d83d3ab7aa28606401bb129ccaeff240..684536f600cca94ea346129a139ec4aa boolean flag1 = this.source.acceptsSuccess() && !this.silent; boolean flag2 = broadcastToOps && this.source.shouldInformAdmins() && !this.silent; diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 24086a82e1687cb1925398218b18c2384fa8f6e3..55b29e9a540cfc00dc32c7ae14d603c150e8863d 100644 +index 86af3494f3d86c7b9fb90ce5a877ec23f5a79e7f..36f65fd7b3b291daf2d0138278b47a9d74560a89 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -166,7 +166,7 @@ public class Commands { @@ -816,8 +846,8 @@ index 24086a82e1687cb1925398218b18c2384fa8f6e3..55b29e9a540cfc00dc32c7ae14d603c1 + org.purpurmc.purpur.command.CreditsCommand.register(this.dispatcher); // Purpur + org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur + org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur -+ org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur + org.purpurmc.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur ++ org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur + org.purpurmc.purpur.command.CompassCommand.register(this.dispatcher); // Purpur + org.purpurmc.purpur.command.RamBarCommand.register(this.dispatcher); // Purpur + org.purpurmc.purpur.command.RamCommand.register(this.dispatcher); // Purpur @@ -1108,7 +1138,7 @@ index 76ef195a5074006b009acd9cc1744667c6aecbb9..659577549e132754281df76a7a1bfd88 public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..411f1f8c6be072cfc5ba88cbec38dbc4300a41d1 100644 +index 244a19ecd0234fa1d7a6ecfea20751595688605d..0f7d6da8685716604f0749d4f5b60730a44cde73 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -119,6 +119,12 @@ public class Main { @@ -1125,18 +1155,18 @@ index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..411f1f8c6be072cfc5ba88cbec38dbc4 Bootstrap.bootStrap(); Bootstrap.validate(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b5b5d467231b571455f82d1943e6a8a46d75c7dc..4e989dd5919e29d04dcd9f6af0f3922f94d41742 100644 +index d3ac9185d16099daac9144d7adf6dc38827ab0dc..4c192b138810650ca0ab5e5d4f2407c0dc3d9fd0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -300,6 +300,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // Paper - don't store the vanilla dispatcher -@@ -310,11 +311,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1608,20 +1638,20 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -1405,7 +1435,7 @@ index b5b5d467231b571455f82d1943e6a8a46d75c7dc..4e989dd5919e29d04dcd9f6af0f3922f // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1726,22 +1756,22 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.updateLagCompensationTick(); // Paper - lag compensation @@ -1493,7 +1523,7 @@ index b5b5d467231b571455f82d1943e6a8a46d75c7dc..4e989dd5919e29d04dcd9f6af0f3922f } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Exception ticking world"); -@@ -1803,33 +1834,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper -+ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Pufferfish > // Paper +- return "Pufferfish"; // Paper // Pufferfish - Use dedicated VersionFetcher ++ return org.purpurmc.purpur.PurpurConfig.serverModName; // Paper // Pufferfish - Use dedicated VersionFetcher // Purpur } public SystemReport fillSystemReport(SystemReport details) { -@@ -2568,7 +2599,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2825,40 +2856,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= i) { // CraftBukkit @@ -4407,7 +4437,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a this.portalTime = i; // Paper start - Add EntityPortalReadyEvent io.papermc.paper.event.entity.EntityPortalReadyEvent event = new io.papermc.paper.event.entity.EntityPortalReadyEvent(this.getBukkitEntity(), worldserver1 == null ? null : worldserver1.getWorld(), org.bukkit.PortalType.NETHER); -@@ -3247,7 +3297,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3253,7 +3303,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } // Paper - Add EntityPortalReadyEvent // CraftBukkit end @@ -4416,7 +4446,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a } this.isInsidePortal = false; -@@ -3438,7 +3488,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3444,7 +3494,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -4425,7 +4455,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a } public int getAirSupply() { -@@ -3707,14 +3757,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3713,14 +3763,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { @@ -4442,7 +4472,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a PortalInfo shapedetectorshape = (location == null) ? this.findDimensionEntryPoint(worldserver) : new PortalInfo(new Vec3(location.x(), location.y(), location.z()), Vec3.ZERO, this.yRot, this.xRot, worldserver, null); // CraftBukkit if (shapedetectorshape == null) { -@@ -3753,7 +3803,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3759,7 +3809,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.unRide(); // CraftBukkit end @@ -4451,7 +4481,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3780,10 +3830,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3786,10 +3836,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.removeAfterChangingDimensions(); @@ -4464,7 +4494,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a return entity; } } else { -@@ -3903,7 +3953,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3909,7 +3959,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean canChangeDimensions() { @@ -4473,7 +4503,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a } public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { -@@ -4199,6 +4249,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4205,6 +4255,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return SlotAccess.NULL; } @@ -4494,7 +4524,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a @Override public void sendSystemMessage(Component message) {} -@@ -4486,6 +4550,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4492,6 +4556,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.yRotO = this.getYRot(); } @@ -4507,7 +4537,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip return false; -@@ -4884,7 +4954,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4890,7 +4960,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -4516,7 +4546,7 @@ index c246be0aa8e88d9c60260176fe4cbc076ddbcbcf..1a5aec1612947bbc1df78c0eeda9b98a } public void onExplosionHit(@Nullable Entity entity) {} -@@ -5056,4 +5126,46 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5062,4 +5132,46 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -4721,7 +4751,7 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..3e2ea26c23e88c395856b65001f2895d protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 6bc0f6256851b1aa3c0e590692a949cd1e9c337d..12841498369db7020bb844040bc5464745312082 100644 +index d2f3597e590d54753f53759680c6617a98d4f913..2b72c98c0827e91ed11007c4cfc8155a89df38c7 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -228,9 +228,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -5150,7 +5180,7 @@ index 6bc0f6256851b1aa3c0e590692a949cd1e9c337d..12841498369db7020bb844040bc54647 this.gameEvent(GameEvent.ELYTRA_GLIDE); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 9aa42d6ce2c9f64142dd6f35a34319983bf7f3e4..0d138d36b86e4d31b28455640a82b6097e0a2b36 100644 +index 4dcd23324921373975d4ef8e1c4b3fd10292fdca..a2bae50c126208621909ada50cdddd625c8b1912 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -75,6 +75,7 @@ import net.minecraft.world.item.SpawnEggItem; @@ -12998,7 +13028,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..dbfcca8adb7afa7a3101f22c2bc48aff if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state continue; diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 5215fa54666979ef4da074ddfdb082e7274f2957..1afa6dc4f2a6437cd4cc3e49694e79641fcc13ad 100644 +index e03119f88719c8d6d44793a6b3706ae97b2da307..5e2a47d910f4bd2cd28008fcf5063cb3dd41da90 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -23,6 +23,8 @@ import net.minecraft.tags.DamageTypeTags; @@ -13079,7 +13109,7 @@ index 5215fa54666979ef4da074ddfdb082e7274f2957..1afa6dc4f2a6437cd4cc3e49694e7964 this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{this.getClass()})).setAlertOthers()); this.targetSelector.addGoal(2, new Shulker.ShulkerNearestAttackGoal(this)); this.targetSelector.addGoal(3, new Shulker.ShulkerDefenseAttackGoal(this)); -@@ -475,12 +526,21 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() { @@ -13115,7 +13145,7 @@ index 5215fa54666979ef4da074ddfdb082e7274f2957..1afa6dc4f2a6437cd4cc3e49694e7964 } @Nullable -@@ -602,7 +662,7 @@ public class Shulker extends AbstractGolem implements VariantHolder explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions + public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here + // Purpur start + private com.google.common.cache.Cache playerBreedingCooldowns; @@ -17168,7 +17198,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 public CraftWorld getWorld() { return this.world; } -@@ -212,12 +256,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -203,12 +247,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end public abstract ResourceKey getTypeKey(); @@ -17185,7 +17215,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); -@@ -1259,18 +1305,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1250,18 +1296,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } protected void tickBlockEntities() { @@ -17209,7 +17239,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1299,10 +1345,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1290,10 +1336,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 @@ -17222,7 +17252,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 this.spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1517,7 +1563,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1508,7 +1554,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -17231,7 +17261,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 List list = Lists.newArrayList(); ((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call return list; -@@ -1536,7 +1582,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1527,7 +1573,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public void getEntities(EntityTypeTest filter, AABB box, Predicate predicate, List result, int limit) { @@ -17240,7 +17270,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 // Paper start - optimise this call //TODO use limit if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) { -@@ -1791,7 +1837,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1782,7 +1828,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -17249,7 +17279,7 @@ index 876990240293740046c6a6b43aebad6d7d5075d6..16eb159ab4533f5101461bc4f417b942 return (ProfilerFiller) this.profiler.get(); } -@@ -1903,4 +1949,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1894,4 +1940,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } // Paper end - optimize redstone (Alternate Current) @@ -19804,19 +19834,19 @@ index 9d93130f23addb18b97d7f5ec013faef17a74529..29d2fb87a65778926aea2cfc7a5b486c + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab85048354ac96 100644 +index 49794050997ee1f0511ce4fa6c191906e4f4ca47..54c42f43981aee3da869343b078775fd39994b9e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -269,7 +269,7 @@ import javax.annotation.Nullable; // Paper +@@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { -- private final String serverName = "Pufferfish"; // Paper // Pufferfish -+ private final String serverName = "Purpur"; // Paper // Pufferfish // Purpur +- private final String serverName = "Pufferfish"; // Paper // Pufferfish - Use dedicated VersionFetcher ++ private final String serverName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); // Paper // Pufferfish - Use dedicated VersionFetcher // Purpur private final String serverVersion; private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); -@@ -410,6 +410,20 @@ public final class CraftServer implements Server { +@@ -405,6 +405,20 @@ public final class CraftServer implements Server { this.paperPluginManager = new io.papermc.paper.plugin.manager.PaperPluginManagerImpl(this, this.commandMap, pluginManager); this.pluginManager.paperPluginManager = this.paperPluginManager; // Paper end @@ -19837,7 +19867,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 CraftRegistry.setMinecraftRegistry(console.registryAccess()); -@@ -1038,6 +1052,7 @@ public final class CraftServer implements Server { +@@ -1033,6 +1047,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -19845,7 +19875,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1053,6 +1068,7 @@ public final class CraftServer implements Server { +@@ -1048,6 +1063,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -19853,7 +19883,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1069,6 +1085,7 @@ public final class CraftServer implements Server { +@@ -1064,6 +1080,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -19861,7 +19891,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -1582,6 +1599,55 @@ public final class CraftServer implements Server { +@@ -1572,6 +1589,55 @@ public final class CraftServer implements Server { return true; } @@ -19917,7 +19947,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 @Override public List getRecipesFor(ItemStack result) { Preconditions.checkArgument(result != null, "ItemStack cannot be null"); -@@ -3044,6 +3110,18 @@ public final class CraftServer implements Server { +@@ -3034,6 +3100,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -19936,7 +19966,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 @Override public void restart() { org.spigotmc.RestartCommand.restart(); -@@ -3073,6 +3151,7 @@ public final class CraftServer implements Server { +@@ -3063,6 +3141,7 @@ public final class CraftServer implements Server { @Override public double[] getTPS() { return new double[] { @@ -19944,7 +19974,7 @@ index 6262147f9d3fc1a988d9362573d3736e3ddd88a1..ba939f147edcedf0e8311e73a1ab8504 net.minecraft.server.MinecraftServer.getServer().tps1.getAverage(), net.minecraft.server.MinecraftServer.getServer().tps5.getAverage(), net.minecraft.server.MinecraftServer.getServer().tps15.getAverage() -@@ -3274,4 +3353,16 @@ public final class CraftServer implements Server { +@@ -3261,4 +3340,16 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end @@ -20015,10 +20045,10 @@ index f2b20ed5063a293f0b464548f590d652170cd1d8..226ff7c6048b510be2e71ecc5d5ff358 public Collection getStructures(int x, int z) { return this.getStructures(x, z, struct -> true); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index c988afa496d25314451435eedd64079a0d87cef0..43df9d815e86e8fb009b47cf16a419ddc6dbe6a7 100644 +index e02102280ed1dc300191d19bbca8f00e17701753..549d01337e9a89b356287567db101de383d45c9c 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -175,6 +175,20 @@ public class Main { +@@ -176,6 +176,20 @@ public class Main { .describedAs("Jar file"); // Paper end @@ -20039,7 +20069,7 @@ index c988afa496d25314451435eedd64079a0d87cef0..43df9d815e86e8fb009b47cf16a419dd // Paper start acceptsAll(asList("server-name"), "Name of the server") .withRequiredArg() -@@ -294,7 +308,7 @@ public class Main { +@@ -295,7 +309,7 @@ public class Main { System.setProperty(net.minecrell.terminalconsole.TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); // Paper } @@ -20348,7 +20378,7 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..5c1cda88080850314dac196dbe71ff12 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index aa351df679f300018367244c7ccb3e5a59e9276f..b452ebbe11145987fb5e66b39993898457322080 100644 +index 2d4e49f386be35ee8912c1bca38f74b8d8926f3a..9060380754e5553b1628f17402bcb80ba9042fae 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -505,7 +505,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -20405,7 +20435,7 @@ index 351f42842b780d053cd2e5bad9ae299449141b10..4860574e7fad7a9527dda599703c573c + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 561a7a8e96e2d91bbb87fe6230e94b5f38073d27..2c9726d0f2dec1136a2f45768e8f8169ce165a1d 100644 +index 7e6116963d835d4606ef3d93b69d3e44b61288e1..241340a6d66f17f2a31fb03ff0dfab121b856368 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -574,10 +574,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -20733,7 +20763,7 @@ index 9ee14589d63bbfc0880f2eee5e924fe946ee0035..0a5841fa26698e60bdeadbb58b9343fe + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java -index 6ba29875d78ede4aa7978ff689e588f7fed11528..4afec4387971612f62b825e9e56c2ead7424a7c2 100644 +index c76c78bb7757d407102271463e14716a1b012deb..458b91582a22fb1e6deb1551c38d2a10e33e24f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java @@ -29,6 +29,7 @@ public interface CraftRecipe extends Recipe { @@ -20741,9 +20771,9 @@ index 6ba29875d78ede4aa7978ff689e588f7fed11528..4afec4387971612f62b825e9e56c2ead stack = new Ingredient(((RecipeChoice.ExactChoice) bukkit).getChoices().stream().map((mat) -> new net.minecraft.world.item.crafting.Ingredient.ItemValue(CraftItemStack.asNMSCopy(mat)))); stack.exact = true; + stack.predicate = ((RecipeChoice.ExactChoice) bukkit).getPredicate(); // Purpur - } else { - throw new IllegalArgumentException("Unknown recipe stack instance " + bukkit); - } + // Paper start - support "empty" choices + } else if (bukkit == RecipeChoice.empty()) { + stack = Ingredient.EMPTY; diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java index ae6d9453cbfb708ed00a61a221bd425110b291a4..9dba941b28e1f9d9b6f8d106cf8f6adcd5a436be 100644 --- a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java @@ -20858,10 +20888,10 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..d3ec817e95628f1fc8be4a29c9a0f13c // Paper end - add timings for scoreboard search } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 16d6a515e93619a0c9fdcaec5b99e0a36f8faec5..ef222478b46b5edc7b4c6d636a5b452fb10221bc 100644 +index d9f1164ab63017124a9601f980ee6a6ddb3626eb..6f24422beb7d3db6dbed0efcba2935f542519827 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -511,7 +511,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -502,7 +502,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { @@ -20906,7 +20936,7 @@ index 52649f82351ab4f675c3cc3cd6640956b0f76b91..eb51c88c7a0658190d3a8bfd5d18dca7 DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168bd9cc839b +index 0000000000000000000000000000000000000000..cdb4d9a76640fbf0fa202d7b70f5c2bc7005a84b --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -0,0 +1,596 @@ @@ -21094,15 +21124,15 @@ index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168b + public static String creditsCommandOutput = "%s has been shown the end credits"; + public static String demoCommandOutput = "%s has been shown the demo screen"; + public static String pingCommandOutput = "%s's ping is %sms"; -+ public static String ramCommandOutput = "Ram Usage: / ()"; -+ public static String rambarCommandOutput = "Rambar toggled for "; + public static String tpsbarCommandOutput = "Tpsbar toggled for "; + public static String dontRunWithScissors = "Don't run with scissors!"; -+ public static String uptimeCommandOutput = "Server uptime is "; + public static String unverifiedUsername = "default"; ++ public static String uptimeCommandOutput = "Server uptime is "; + public static String sleepSkippingNight = "default"; + public static String sleepingPlayersPercent = "default"; + public static String sleepNotPossible = "default"; ++ public static String ramCommandOutput = "Ram Usage: / ()"; ++ public static String rambarCommandOutput = "Rambar toggled for "; + private static void messages() { + cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); + afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); @@ -21113,17 +21143,17 @@ index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168b + creditsCommandOutput = getString("settings.messages.credits-command-output", creditsCommandOutput); + demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput); + pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); -+ ramCommandOutput = getString("settings.messages.ram-command-output", ramCommandOutput); -+ rambarCommandOutput = getString("settings.messages.rambar-command-output", rambarCommandOutput); + tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput); + dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors); -+ uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput); + unverifiedUsername = getString("settings.messages.unverified-username", unverifiedUsername); ++ uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput); + sleepSkippingNight = getString("settings.messages.sleep-skipping-night", sleepSkippingNight); + sleepingPlayersPercent = getString("settings.messages.sleeping-players-percent", sleepingPlayersPercent); + sleepNotPossible = getString("settings.messages.sleep-not-possible", sleepNotPossible); ++ ramCommandOutput = getString("settings.messages.ram-command-output", ramCommandOutput); ++ rambarCommandOutput = getString("settings.messages.rambar-command-output", rambarCommandOutput); + } -+ ++ + public static String deathMsgRunWithScissors = " slipped and fell on their shears"; + public static String deathMsgStonecutter = " has sawed themself in half"; + private static void deathMessages() { @@ -21143,7 +21173,7 @@ index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168b + deathMessageOnlyBroadcastToAffectedPlayer = getBoolean("settings.broadcasts.death.only-broadcast-to-affected-player", deathMessageOnlyBroadcastToAffectedPlayer); + } + -+ public static String serverModName = "Purpur"; ++ public static String serverModName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); + private static void serverModName() { + serverModName = getString("settings.server-mod-name", serverModName); + } @@ -21163,15 +21193,6 @@ index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168b + disableGiveCommandDrops = getBoolean("settings.disable-give-dropping", disableGiveCommandDrops); + } + -+ public static String commandRamBarTitle = "Ram: / ()"; -+ public static BossBar.Overlay commandRamBarProgressOverlay = BossBar.Overlay.NOTCHED_20; -+ public static BossBar.Color commandRamBarProgressColorGood = BossBar.Color.GREEN; -+ public static BossBar.Color commandRamBarProgressColorMedium = BossBar.Color.YELLOW; -+ public static BossBar.Color commandRamBarProgressColorLow = BossBar.Color.RED; -+ public static String commandRamBarTextColorGood = ""; -+ public static String commandRamBarTextColorMedium = ""; -+ public static String commandRamBarTextColorLow = ""; -+ public static int commandRamBarTickInterval = 20; + public static String commandTPSBarTitle = "TPS: MSPT: Ping: ms"; + public static BossBar.Overlay commandTPSBarProgressOverlay = BossBar.Overlay.NOTCHED_20; + public static TPSBarTask.FillMode commandTPSBarProgressFillMode = TPSBarTask.FillMode.MSPT; @@ -21198,17 +21219,16 @@ index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168b + public static String uptimeMinutes = "%02d minutes, and "; + public static String uptimeSecond = "%02d second"; + public static String uptimeSeconds = "%02d seconds"; ++ public static String commandRamBarTitle = "Ram: / ()"; ++ public static BossBar.Overlay commandRamBarProgressOverlay = BossBar.Overlay.NOTCHED_20; ++ public static BossBar.Color commandRamBarProgressColorGood = BossBar.Color.GREEN; ++ public static BossBar.Color commandRamBarProgressColorMedium = BossBar.Color.YELLOW; ++ public static BossBar.Color commandRamBarProgressColorLow = BossBar.Color.RED; ++ public static String commandRamBarTextColorGood = ""; ++ public static String commandRamBarTextColorMedium = ""; ++ public static String commandRamBarTextColorLow = ""; ++ public static int commandRamBarTickInterval = 20; + private static void commandSettings() { -+ commandRamBarTitle = getString("settings.command.rambar.title", commandRamBarTitle); -+ commandRamBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.rambar.overlay", commandRamBarProgressOverlay.name())); -+ commandRamBarProgressColorGood = BossBar.Color.valueOf(getString("settings.command.rambar.progress-color.good", commandRamBarProgressColorGood.name())); -+ commandRamBarProgressColorMedium = BossBar.Color.valueOf(getString("settings.command.rambar.progress-color.medium", commandRamBarProgressColorMedium.name())); -+ commandRamBarProgressColorLow = BossBar.Color.valueOf(getString("settings.command.rambar.progress-color.low", commandRamBarProgressColorLow.name())); -+ commandRamBarTextColorGood = getString("settings.command.rambar.text-color.good", commandRamBarTextColorGood); -+ commandRamBarTextColorMedium = getString("settings.command.rambar.text-color.medium", commandRamBarTextColorMedium); -+ commandRamBarTextColorLow = getString("settings.command.rambar.text-color.low", commandRamBarTextColorLow); -+ commandRamBarTickInterval = getInt("settings.command.rambar.tick-interval", commandRamBarTickInterval); -+ + commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); + commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name())); + commandTPSBarProgressFillMode = TPSBarTask.FillMode.valueOf(getString("settings.command.tpsbar.fill-mode", commandTPSBarProgressFillMode.name())); @@ -21237,6 +21257,16 @@ index 0000000000000000000000000000000000000000..1b1981e80bb0ca5f5edceef96b88168b + uptimeMinutes = getString("settings.command.uptime.minutes", uptimeMinutes); + uptimeSecond = getString("settings.command.uptime.second", uptimeSecond); + uptimeSeconds = getString("settings.command.uptime.seconds", uptimeSeconds); ++ ++ commandRamBarTitle = getString("settings.command.rambar.title", commandRamBarTitle); ++ commandRamBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.rambar.overlay", commandRamBarProgressOverlay.name())); ++ commandRamBarProgressColorGood = BossBar.Color.valueOf(getString("settings.command.rambar.progress-color.good", commandRamBarProgressColorGood.name())); ++ commandRamBarProgressColorMedium = BossBar.Color.valueOf(getString("settings.command.rambar.progress-color.medium", commandRamBarProgressColorMedium.name())); ++ commandRamBarProgressColorLow = BossBar.Color.valueOf(getString("settings.command.rambar.progress-color.low", commandRamBarProgressColorLow.name())); ++ commandRamBarTextColorGood = getString("settings.command.rambar.text-color.good", commandRamBarTextColorGood); ++ commandRamBarTextColorMedium = getString("settings.command.rambar.text-color.medium", commandRamBarTextColorMedium); ++ commandRamBarTextColorLow = getString("settings.command.rambar.text-color.low", commandRamBarTextColorLow); ++ commandRamBarTickInterval = getInt("settings.command.rambar.tick-interval", commandRamBarTickInterval); + } + + public static int barrelRows = 3; @@ -27276,514 +27306,6 @@ index d2a75850af9c6ad2aca66a5f994f1b587d73eac4..a056aa167887abef9e6d531a9edd2cda -diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png -index 8b924977b7886df9ab8790b1e4ff9b1c04a2af45..518591dd83289e041a16e2c2e7d7e7640d4b2e1b 100644 -GIT binary patch -literal 9260 -zcmWk!Wmptl7+qlLS~|W3b}1=IK|*5b5@|#_l0AUP -zC6t~Ie$33hbMG7HJ?G9mbDv4n)lnlSVI~2AK;# -z4OMQt9~6LaN1#s_Fh>FQQNXigV2~Fm&;xWcfNA!dm*#+B)G7nz8bF6QFw6s>Er4EOK&%?bF$4;AfiW&% -zoCBC(2Ns!cigf^wAiz2NZqBnLz$Fx@R=#VuNdgNjK)EK+fB@F$fJ{?BsqoI$ED5Mo -z1rqE4Uti#zCSVl@%tLSX$$)HQ;Jq4~ho`CY^a7vP8(5UvMwUftX}AK<&Iwsa{VUUgUh -z2@c>vB_LZ0XlDV+Z-B?IZf;?2Q{C)P0>ZVx9Q3a7hXhz;0*3DaKX~ub_6P=EnF2ok -zcR7!90-gbPNmi@e3BV~F2=oSCMBV|pg>WmCTgLr-01Q8169d>q-)SS&0%(`GBd$p2 -zE<~Lo5bOy|!S8arrBXcyc!~mEJ_FLt@08Ob4a7eO9#jGH#Xy)lfU>@0405w;9)s13%z-g3FI09k4gZC@SEGh21MSdMw@%zE`WMpeH{Z3F$F%s4K+W4gOWCo -zM2#hp$Mq4nbl;~?VJ4luX8W7#1E`a&x!wY&zb88l -zN1p;u{w(({h5e>J1%Y6K8p;U6z`4mh7wrra#_v{h<9beb_Uu_ssLuklU5mIC>bM*t -zcnDp3!57GGcIWN~=GwhPk`|qj+4X29PCWJ%!mm8dv^)i!1KFLpM5tu4Zu)l4x1`+4 -zuool8`RpVod-L>kH&(y$T!#xcuSSC206r^ApC6SB-*ez^5f|E=>CVr`YArBlJ*aH= -zv9&F3YdaKfe*MZ~i5LpP{mi>QT}i><&#tzbf_0y?pPchedeE97X-j8))~zv`+-R^c -zXW+`~MJv5ye2+%Kvb|-$zve#6Fq3j>e(Z$inlS;)z#xljVJ?019I=wkGZKCb>mY`{ -zC8KIq#mXl@3vR}_b~1^fB_&=iJ$$n&3S*05tirE<8!l{ZZCzis{#|hXxvFTM`o}iR -zq}ASGAx!t@bKd6MjeH3iBEIB}%Yan>#e?6>$^PrcHJlA)z3Hwi9`j3t3g5m_#CTR2 -zJWL`g(S4CEDe2|vYOlPr-diIV^oy)GsZk29-%}jHck!wdB5f==uk13XY9^5>Drj(Jal(oLc`8 -z7D=J9cm#rVYK(uzdmUKaOiVbY*(WAOkmLNmxVRVy4%oluYjcE3ejCZtD>w+KsRMI; -z87X<1i$@!2V<|7#NM2W6ZEQ5}eehW7L)rSeirL`4wOgYhpON3G_`a-$K8jR7b1;WL -z!~?6_@enfHT1uN@893H{iZNi1|9834^3*)D`mGffWf%2a)wvAK&u>(jHANwD#zmPX -zb+%6usxsHvd2-@g4UX8e(%gfc=yCIMYT;LE&!w^Hm;hjMmbIls&Ko=!h)JjeBiK7j -zJg8+Wwf=llHxatzP37JYP2MYV!uiXB_G}g(g)9DJKdnb9^WJMK(TfEmW8+Fb{$ocI -zd_IJNIpT-3}l*&5tlx{G{r8LcDpgZGm&_LCN*L6GgC7m* -z9Ckq~9^@3|Q4>gQQNDOZ2HyVd9pW<)EoE)RyU2C+kH**{1?C-Xq|NDRXjCBSZu!dW -zkWoaF%%=W+tXxD?vrJiW1>QdCcU?IwSAAVKXSF08Ri&so^yCRhU8OJJ-7;U}%kOXh -z;uh`2naxh}@bu)!tqCu)Xf)+K3I8Q5)ZcBvHOp43NX8R{ud%yohLd|fFsJPE=-WnM -zy9)c2e5+K_=dT7ym;4dn(y2MkPN*C+c_fH{ZfAWh`@@h_TYs$2*8y!HC~F*!SDduQi((Yakpx9^)x -zJx6lr@C*IFi6C32_c%iv6B`G$;M6Q37L;6Uui3x9r{WSzT7DwjzcfM?D1LbD#A$qd -zu4>LOEHC&2!$+8)#A2;xEg(p|Jdy(=RRcM>kUoYG*Qz;+&oyU511wbY(v-jRqxsns -z%#|?EAim6T>_zCj2<-iPVp$G)<1~m`qSX7m3`(@)$3!@_Il;X3RXlkq+00DbtS7gY -z>#I3K0|TFc5y9cN<3t=oP_kgwm69oEvtnYz&nRnvO7Njr5W~StAj9NIY?n)l*H$Iz -z2YURl{gS{bBrJXar($8yfT4n#w=5%{AEV-@Grkiy0_J -z=#2;?ULHsk`lZB!Pq?X9XYS_xO{hASO}zKeLGkV?N1%z -z>{sH;{En>vxtZU%K&AU5%Gwj}B-+Pkl=AbytOz{;6ed;B5v9!jh)%X6>$P18-6BW0 -z9}ExHska~pvMsOcE?mMPyWj`s*pbbrIhx_ij%6Esl?wROHn#vuvN1k)+M*(8X8`A{ -zS4o(sjn)kE#;i6MtveA?5(&g98!Mcr!J5=}Qa@!L1e14aJEQmcLzXKl5nn2bAJ$tZtP$P8Z1 -zZ>}d+7jWYR^n<^KOqhO^N==PYrD)O9EEFNs=im5ICPNsHVP!Zx`PfqbpT-5=sn650 -zHSeafmr~){Zr!JcC1%$s2t+!}=}Ip+y3BYtETmoWiR}1P><_9ZZ0FT%gEZStrgdbp -zI0aw6jiD;PvU!g!GH_nZQDTX%5h%9pk4-fdm}0u~yzd;=Cni~sWY3r;O}XL;q&8-M -z47pHP%S*mY4oBx}PU^}#j%4iThs7lM7N=#@Fdn{XdiIW0L(=C2~Fu=G5&Vq%Yr -zY&qWfrH35E^L#BnOgMwRc8B)xMX+GlbUbtr`nPrR=jS(Tb=kQ6o7eVqUZd`0fo9D@ -z`vyo59#*A!saE#!$G7Cxfh7n>ZWX!0gkro``0W{b9=XxNGqu#u6^e-7Kk1lUvA@1| -zbiNNGZAv0UHvN5m{KO8QNS~$+u-B>s_5L`L`jBdrke`Xe{0N -zj*umKyN|_A>O3@@8y|M457h5tzNEqIDV$3|c%QOiW7;H(RNLM9W0najA-;HEwdD>u -zkW^fo^J0f?_u(^NWw(nT>JS~~smIbnC8QxFcuQkHNQUJyj;eYMTmvVN^O|RPDvczq -z>kslY@C$0YBmZR=Y@IEsCWJ9}K@HOu`c4n=$kr9!;n+9We=f8unlK5@c*o|I7(=zG -zS}lWvH_fp;i}4qt9>h_?QzN~ap@7nLh*7DJwfvLZAS*_S4BW3*FwwCv)lD1Vg1t7>@!DLp5Su@bc$d;D_VX! -z57eDlJm5IkuTyc>aw+Wt#V5hkX-B+t+|!Fa@@x7=`8`3dZm3$aHF*y2VcD$(D>J3y -z%YwpO#gY%mqyin8q9uH?7OBC}Uv-@)Hl0)Z2+y3x`{XluljPt{<4TU-m$XDvYU9HDGKSg&cT(@MVe23D -z<wCdy-3tTl}j4kzaCmrni9Diizn#a{@0 -zu;<>ZBofe$`#ML)Z*Aj8mbPS3-(VgSdF3LA8LJgBPj{3IaB~uLBuylKO*>ev*i|tuS(Wff3`Ogj^{GsE -zb-&NcY_)d|4#vv+AW}skSWrN{p$KOp?oug)BPoM*O}*h=wrr-PGYCt{qwP-&I!~hn -z&+*{EI5^09slk8i%kFcTjCcO6Oc}M9iiS}cuLLw0fyMPfjZ_M`;HWDHP^ke=f*5^! -z(0!2p!N9nZ8J+AP5sfunmbw64l@2)3@53_`Q@g&4FYKeDLbz2F-Pl@Er#INAtM()n -z<;MFT;osC}L2=Y4P1?cm)V{7nauSgh -zx4)k@#lLT}(uM?{Z&NvzT8pnJk@-MDvv4wOKsY+l9S8OdOw}cex#$t*B6ppAEloQy -z8u`9L`Ky$*$*G}A=)h6BjVn=_YuPie5epXe0vLKZP=Pxps%a&uGrdg4y#R{YobnDn -zWlMl5J;9|5ev`f`BO3Uh(yuK%@i^`+fAimq+_>*)z(;wrFdXn2nVJw1y_>PcV%p-) -zt#ZCU`}~DIE5y1BiI$qSd5XIebq(uRB-FnL#^x=bDHO-ls3({4R}-PgePOPH8ggGN -z^EAdT|N11qATWCZQ}ZY#=hum&;_xeyp*|O{VN?%jM$?&+DK=8LzLP4?U!YQ_JT0`M -z`m!W@TCB5mlr9&jJ{^cX4Ye=uf(7g!BDG1LQfZM#P5u-^$L1K~rOMk7oWI24W>ZJVoZ8!*NX>jC%2pgw@7$v*amGL8JnA`*TjN)y=JPix$ -zHom^xjfr~ZFvhO?xbJHg&jfEZgboIqN@pk*%G-#&cX5DM>_>dMo{P<(#6bOBlgEyG -zzi7pMrVsz<*TT+n%Xo*+rUVN -ztJqe<9EEg`YU)i$PQ+gn%oA5sG>b*6QUjZVf+Ju4QKWr32^B^>#t1pQ*dNT#SxuC8 -zGNJ9mH6R-92O+m#!DECXMrB|3+|cZ$?^qoag;w8-vr)Z5hx@2MVoazOwqdLo2-lu( -ziwF(a3SNH{+U_=d6KFp}-N^eInrfTZ{p%Yc;K{NXO^Sl0qy(%)%sUXL -zA6Ic}&$4}O+ulD-?|#%otX@aO$zD_RW;|WXeL`u5;iz`2Ja937zabkT*wwyB&2HIU -z%>tpNcvDWCsG=IjRr(V|Z7N`9^tphbhiC}fIrVcS>=>)uMStm;g&z-HK{fFz2ud&X -zKo;y87PhB3IZGZ&D%bJ2dZ<-Z7I$fCrPWl6O0ir})>f~+rM8k@!Q(EpWCD9f!k>me -zRhs@Q3_eZ!{s3QHUMaN0uShhn$y!N+)a -z6F#K#O21}#Wz2NGar1LUq3S|3=0~&VTjxVeqcysO1QIGwgglMcjXc3^9R9i556MW! -zA%G1+Y)mPX16RcVB#B?R~Xl -zIeR6G9EBEoU+Sk|=Q=4gQdT~j9ecG~G45m|E+IkhfuBxT`M%^wZkNkXpL0AjS!$%u -zg-={lr6QW@$p<#-f}T{y|0rAEpY~$9`Ffd=BP+`1#;?ge=@mLGkdmI~u?Dai2i+}> -zr-d}7M&xTHsK7@<3$tPd^Yg3fLzxDa!oOJ_N!hGt&$}5!9&TOIuzhIP>)^&CM1CIF -zY>A-293)fzq2lbB(1wKk=>#3=G1eTT&8(iBSJab=V@AGnDSwOhxKg{m8sa~TR||^x -zH?*-f-l|Zq;GkYEt~~O`56i(Z6gi`*^TxMZuc-f=NMlvry~%u2a>kz*@R^tJ@{7%-A@wfa)Z -z0~dL|Z*tTjEX7ED(M%2gZ|Zi_L4TWr%=BR=y4%;?-COo)8t(xaW)#f?Uhc9^d-1?K -z=UDW-cu8J#%~t1$>T7o{K5NXC7Z^ -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 -zWZQ?eQkgCCqwANoAm&K4|fw*k7ipV -zB1v2pR!seE-oV-2@pAb2ne;%k;&0+LB7z16@)VH1MO9)MHU9kSp)dCNVB91j?4mmO -zv3NP2%#IeX=+W7Ni#8IjoTpc(!3T*dt7!EX8VlAzQq6uvFcs%W{$71OuAvW8Wpseg+*PVYLv?WMN=C|H@$;E_S5fVp$L;GyupU7jZ$kfvC58X?uLqEZijH!v -HqBZh=dic2S - -literal 16900 -zcmaicV|1Ng^k&Q(Hn!T>_Kj`Zc4OO48rwD-Gw*(Xv_UIGaL4*?7e3`t5-R2lSh^xqd84Cs4}W^FDQn9zijsF13M{zVR~<`0dB -z;hww3Rk_uLO*yyZ^N(arMN#SjFcHEi60E_fZug`IjtJ^LVtno=lKj+Jze{_WszRIN1X*HUTCH>C_wc;+D)6YYT -z*RWmTUi`Puu_Uwkj6-qwu_Ue*kO&$%=o%J?6*rej_Ock3znkGIb6 -zWm&yS2Z9LS7slFgUx+?ilDgQBdj7`ruw|IVzJ@wV{&tD)G@SPTMW@9Wl5lcsuU~6` -z7raw|%Or|@Pnlh`7!!rA1H$`p;zz}+92Tp2bFmKDAL`nrC>)<{qBHso -zvJ6|o^vMxL?frh4XZ`3WdH7s_NI0p@{EElbnX*!yp;Vtx&K&w$&to`sW -z79>enm;xWhu;ZKKIN}-h!eBKZM6j$9~*Q(SlE*i_bHS0o#tPY -z5-j+ww|x>h9%`RLUixM!e%f0qVAe5GH83X6?!#^_j-M@lO@*-aD%NMF2;Hg^Wgh@}elrPA3o_&(- -zeNyws4es~%;K1o+pfG(Z!G-nFWzl7)ejRNxY?M~uI=I&MYuz@4>GLH*ptjlQJ`LYr -z*KIIVzBhKHIDwe`X2hc@gsdjzXxX%b<_#kc$vIHFi2)-XM1=fs(`g?0)M{lcJXwp< -zBgIdDXM&n-=+_%;1a?sE$oeN{r%w=8tFfAlQopAk -z%wrVN=r>)oZ0w7^M~Xi~qp6lEaABgF(ck7V3Un;@cg|ODuD7@fw~OZ;^TQV -z$&4AiUj}-4;o`6JV$Y4C2G -z8hVweUdzl78hWzD|&J_)oRr2JdJP -zA&lca);^P(q@hQb9-kqNXVo9An7Q3NoAtyRQw-@JUDD$oluryjE -z3{zzbZhStP-K;xw@Yxf-B=4h(p=4f`k8p2DH$>qQLPR!szD!2|vJ}J`C6=EoRwG^+ -z;`ZDv1SGVO+?IqSxpxSM^_V~@2E+~dZQdl+oz;TP1MX+XXwugMy?Z5AoZ7#R33Y@T -zM)w4;9L0szO3>6i#4fV3q49@wu&`zcvQ!d8!m*dpn&7pp0Y=;QbiyOzhC7)Ki7tDt -zXaIqysWqx53ZgHlO)|YRDG**$7&F{0a8VEECY`3;yx)F>2;4Xr&gC;Iqiqx;orWkF -z8xk0Ty-mK&z`^~Fbs#S;;Qd@1ZFJh4R`+H>Wx$xgn>^oka;w9~QfR>rS7lYHG?D#o -z6Jo`Qg_-DP -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 -zw1mJ8tVoSO-(}absB6M8b$Zqe)Ok0$OkaA#I -z48@e8TAlv;PmB6dbP|{7<%qt@Ea>I;PRL4)=M`_G!A40Y$Xy1Mum)I0#!3<77H4)u -zI6c{)TUsy&o^*@2H9Bp>QJA#S8$`zN?+@z^IIQL|VxYEQfVw~Oc}Wq!FS`G2T=aDu -z-DMYe(1$x=331oN(i#yV%?Q)lcY`}FpGRp*74@@$fX%pE+dAGOh5QRhJ&mcaXOhk4 -zLi_pirw^Zws;d9n^#IE8T1ypZDX|crNABquU?iL2;Ql%4Vg5cNBt}OJdbLKnEi|`g2q%v70%eM&7 -z5gdFefu8Ix3n54MC -zW40SGT11ajrrm5AI24T?-2$|VMsU%VX}AMmt>Pr~B}#An{>%QG>_1FQYV^)CExzx2 -z&7E_9c!fpiCLci|F3H*eM2DQQRtQp4>V2RP=KX3ZVw#OXuFxj$VDmM&HQD{*dc7301976VQyI69%EFvxxn>qC&Lo-`%ImvM -zCv>AXKPcD26Z_;m`1pw)uF6Mp=RnShU^yM81!?jbl!v#-kSa#RLhSOG0?yp1YB6Jr -zW=GrO|0zIRSHiH?DYiO+$EpdMkwz#4I6V(J12-W0+dAo4J*?nDQrFI<*}a92Y%1bU -z`RC_4tyg7>R(8{ -zA8*g?PWv##WoF+p0bJe>whg#+(1_+A+)9HS$|n?k;(r=Le*vR;57rn)2& -zEkD8KBSZm#3Drt?t!*#s#>0+yUNysIKRg=t`KSOcSHieiUP0z8F_$tZ(ciPnq_o~@ -z%-{zhbs{i7 -zt~8q8%WO|MF(FE_ye*bl_-@NcA!S9$IMb6x0`e_oNF!hy5a)H^H)5)t(}ek4a1Nc~FF4@f;5aO%aB&3O%B8NuMWWCzYb`d> -zQ-&3)G|5M|pzcLy>pA(p=?3&XKn+v0^`HNsS?M0eb+60BxF|&Y{?>MI^x``)Vp}1V -z;<0N$BUc(0=p=y>zD3k_I~ -zMC>T|rn!T!wN%lqT@ -z&Afsj|04$m&CH2M?F|6yeqb+e`&JWTP^~~z(;c>5;z6RuFKe)%3j|YzeZB9c)5E08 -zvX9?L9%?PT7Vu(RAIXR}s*=I*@Qp<*vA{&7B2uwdBH$_I`33U5di9weG|3 -zx-Iy`1L`R>G-q<+w-{f5qc<7ls}^cT4Y^Qi+meHXFIDgqkt0wpdBZGY?LB+q9&o`T -zd18L5%R+44Ml^UNbEw58BXP#{+I#J1$;VGO`#6Grd<=RWgP+T+ktE6H^>C;%(}szj -zK;wt^oW!yG4Fz=zm4zKw@$Wdo`VJm=879kp$F&$uMP_qiKSB4L@SV)g55F9Rb=3ocrK>iqIRR9n!X0Do*Ldi{9M&^sg&T_TZz~>`tbXc$p%%BI% -z#MahUA?U0t#2ZA4_41*w&52#TXU^_G4)$#uGOnpIb{Gs?Bge_xP|beH;cUSBec^gk -zu;a`And#3j5LZ)LALL9lQ0{$A?tzx&K6M(;#M))7n&`7KTkT>KvjI7O4?mTa;X`81yn7WAir6 -z^Dv#2{~#3{X=5gyP*2v`3yoLJl)--n2rC2}*3n8(L~4ohHzT6QbyEu{!K3q#&p9Lp -z?3#RrZR0JWoh5V%Au%m2?uSB&RO!i99khjDd#7P;NaxJ<_f>mYXQOtXqBZifoWn1d5WC&hmG;&Gv(>!l)|)selJ-m-pz9Og@*rA -z%Xl~n+gHI_Rjy513U_dEaq-~ZLm%H7RpVbREoW=Zu*D?n%JFyy6(v}{RCOy -z>_wu--o5bv-4rRuWG0oN3a2+(f)C6nR0%>9HdI1mB`d{jE6Q4vSf>>{@~N-bGMc6~ -zn=1MB2?XIjZuOC!s@-pN5{60UUw-L4f1L-3Ohud?4)I$4Y&#w^A*ij(1$$3|Vskv} -z#YKCOBnHKh5QN8fd|k)wI{^HZj_1!`{L&>R(m@P^tYk*J)5>eCrio9{j>kWLDCGrM -z*O<)utCbjQiH>aHzD!~>SNyzV|B?uyizaR*!v`(g6N5ks=aSqWHk#wzbQOx2Ehc(>s -zfl`oSK+EzLOKDeK?n#pu;5qF1g-8bXyN##%K`x2R14CxOh8w&P-kz4U}>3Q=A& -zwAa>sCXe?|fR^Y+S9_jW;=!_GK`1Bc2HY6Y)*s}A##+#}239~LV&Q~wL&4n_6^@vW -z;nGUYJ$5-C#kJr2EtD&Ty$t-H)#GyT->}39LWB1gdo%LwqR8{YbRBL*-FCEc5iY{; -z#TpZ~y8yolNKuWi&enqz%<*)Y)j#ff)9q1ezkI|N7|zr3b=T|b>+m?)d% -zKJ;1@L~w8ZQn0MxZS*{ew-;Ohn^Jl!+U{m|QvgB~tai**t#d>0E=CMjN*SZ+36QnO -z4NrSN!Cd>9SLf?=!Hjh+ek}c}ND_U`vvi9(MS>7nGZ*lPm%4(7(bhfuTHod8y%;N{YO_KMV}N<7D)x5snD;XG -zzCOH#WK2$4mAvQWFCCZW#F8TRInJ+=$6eR`V~dES6+!6-=6lkVCHyCW^Bb-$@=b%3 -zi%hxQwAp^EOp|zR61~UikJsM89qE@P3@X5J>+K)hO6K`Z$80UqhLV&|mVt3wQ#G4H -zi4>T}s*jr9pkN+B@=LbuMW8^kzEFQde*yOdnXiUws9u#OD8dYzm?0F`qCm7pBCNNz -zOJB@PR!5?2&9Zw_Jg~i=TwmStKiYq1_@$ -zZKB*^u}y2o({7rV#Nl+8$2T5 -zthMF3X`+*;4Q-~&-*4NzrU=7>#}h=jB}<^tsAch7Ac~Vq;V7 -ziknpCHOP}_P8F&VE%6e`WG~EVa?$ra`knKZrYWbIZ_w@4vO+{B!(Pb&!YhY8pCfe= -zjxF8x>Zh3;#gw`fu})grVJcf=Ohg_Xc9m?(57$!NXQ#N%;Q{V}EjtmA$m<@Ie2(h2j9T2Xq=0<2R#daW&$ -z85=lCIqjn+?h$SF4u|?#DOOKg9>2c{9GSdlh{<(WR;Mb+bxH>u95roevUiqSmcdG* -zEL`{Qv+mA#hjLxuC*l?ROBgDsPYkDNU%;m09$2^ni=SVA=kS_) -z_h->URCbhQr89T-a-Gg9Dk?P`CT8-=f%@A28AYMmma&Ks#DNDsr^|eI%nHBQ0Nps* -z<{@u^G-9krSD|^{Vm?_nRkW_T!;E*n95To#4sxn;9FH2W%&T043S^Vg_Bk^^&J9*H -z=-^Zd6GYUG(CMkA?hy<&4Tc5fn4$3ys+ZiGw!07qHH1zPDzAJY;{8Oj#B1-LTAZ>D -zKqX)c%j0#o|H%z2zdkxYKaV6<&nEMgP`q%2&v+2dsa++rFeWoOnf$VkCAY6|8|kw{ -zdwe(maC?oeGlx#HVClH?)W&QZ`+=l3PIeQ%9cb~nWxJ9)YD|MPt`v?0-3bMcbZ<2Z -zG7xSnH{QoOr#C@?R{C$168|JMfCxcPAVuEhewgQpYO@AfbP3Fw+|Vi7h~L@$6ydj5 -zyf7_h9Rp$0Gii0mkT9xddqw>hIVCXV203~$D~swIj_)TV=zX)@-tK6Hb66mM;EywH -zsMV;{!i^8fvae3b)iz7_f6$4yU2i-b%Bh|o@eU2$RD^G(AtWlyl0^8dxd<9 -zCi_xU0%&wFugtmc%-uOk=xMY?lR%{7BQRZ~b8}1<=DQI)v2*#3|70VNVV*?SK4O}0 -z-HEICfCoyTwy@{F=Ac>4KISQEgQLDcj|>j}hzn(*RSn -zZw&u6!^Z2~7ae&u`+{IHYm_vxJJ@RRZ!LoCjQ2ecK6E;AqeyJZxfuAC -zaFBgBIQO4DawgA~vN)BCS%`;S38kn@9kWOTMq)$V$+z&4nDQvH*{(1#N58$C)v2#; -zJW|ch#FaXRBNNj6mX)HNV{_ScADWB7#Jn(Th}B15lvrI|-2fj-=SL1AY -zQrI&y#`tyxRIyenc$G7)m}|d;5&h;8q8?ap1~7v{vEXIAhojO|^XI$6=K!f+>;5yx -zJJXiq*Z?mW;Ak{?4<=)9$$a@6Q*=1_%}Nx&bGA3oqS%{I)k3y{#DALAzrPw)h(FU -zj}8a8Xte($dBpT -z_ZLeg50aO#zhmy?M*+dS#c4NyP>CZSyS+OOi>@2;)lr;&A$)(OEO;kV+bz6O57by -zyW>9>Ij2^Du|A83(r~$46%S7?Ancv(6R -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 -LFIp>X81%mY^Bg|U - diff --git a/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java b/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java index 2f3ff50bf3f70b6b404d02d5ffcc079162a63bc1..4e57fdf21d4b7789cd7c3d3a18ddc6227bc77792 100644 --- a/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java diff --git a/patches/server/0003-Use-Gradle-Version-Catalogs.patch b/patches/server/0003-Use-Gradle-Version-Catalogs.patch index c1f46ff..9aedb23 100644 --- a/patches/server/0003-Use-Gradle-Version-Catalogs.patch +++ b/patches/server/0003-Use-Gradle-Version-Catalogs.patch @@ -5,14 +5,13 @@ Subject: [PATCH] Use Gradle Version Catalogs diff --git a/build.gradle.kts b/build.gradle.kts -index 3bece6335887414d1388505febf6b8796e32bf9a..8d1a11c1a1fedb7ae73789abc6f4a9a689fb78c3 100644 +index 4c4d242475c5229e9cdae69fcc328d52af6df4b8..c2a0dd63fe700484ac9473733b10615375d7c2b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -12,66 +12,32 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { - val alsoShade: Configuration by configurations.creating +@@ -14,65 +14,29 @@ val alsoShade: Configuration by configurations.creating dependencies { -- implementation(project(":purpur-api")) // Pufferfish // Paper // Purpur + implementation(project(":purpur-api")) // Pufferfish // Purpur - // Paper start - implementation("org.jline:jline-terminal-jansi:3.21.0") - implementation("net.minecrell:terminalconsoleappender:1.3.0") @@ -39,35 +38,12 @@ index 3bece6335887414d1388505febf6b8796e32bf9a..8d1a11c1a1fedb7ae73789abc6f4a9a6 - // Paper start - Use Velocity cipher - implementation("com.velocitypowered:velocity-native:3.1.2-SNAPSHOT") { - isTransitive = false -+ implementation(project(":purpur-api")) // Purpur -+ -+ // Plazma start - Use Gradle Version Catalogs -+ implementation(server.bundles.implementation) -+ implementation(common.snakeyaml) -+ implementation(common.asm.commons) -+ implementation(common.log4j.iostreams) -+ implementation(common.commons.lang2) -+ implementation(server.velocity) { isTransitive = false } -+ implementation(server.simpleyaml) { -+ exclude(group="org.yaml", module="snakeyaml") - } +- } - // Paper end - Use Velocity cipher - +- - runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6") - runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") - runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") -+ runtimeOnly(common.maven.provider) -+ runtimeOnly(common.bundles.maven) -+ runtimeOnly(server.bundles.runtime) -+ -+ implementation(common.log4j.core) // Paper - implementation -+ log4jPlugins.annotationProcessorConfigurationName(common.log4j.core) // Paper - Needed to generate meta for our Log4j plugins -+ runtimeOnly(log4jPlugins.output) // Plazma - diff on patch -+ alsoShade(log4jPlugins.output) // Plazma - diff on patch -+ -+ testImplementation(server.bundles.test) -+ testImplementation(common.bundles.test) -+ // Plazma end - Use Gradle Version Catalogs - // Pufferfish start - implementation("org.yaml:snakeyaml:1.32") @@ -95,6 +71,28 @@ index 3bece6335887414d1388505febf6b8796e32bf9a..8d1a11c1a1fedb7ae73789abc6f4a9a6 - implementation("io.papermc:reflection-rewriter-runtime:$reflectionRewriterVersion") - implementation("io.papermc:reflection-rewriter-proxy-generator:$reflectionRewriterVersion") - // Paper end - Remap reflection ++ // Plazma start - Use Gradle Version Catalogs ++ implementation(common.snakeyaml) ++ implementation(common.asm.commons) ++ implementation(common.log4j.core) ++ implementation(common.log4j.iostreams) ++ implementation(common.commons.lang2) ++ implementation(common.adventure.serializer.ansi) ++ implementation(server.velocity) { isTransitive = false } ++ implementation(server.simpleyaml) { exclude(group="org.yaml", module="snakeyaml") } ++ implementation(server.bundles.implementation) ++ ++ log4jPlugins.annotationProcessorConfigurationName(common.log4j.core) ++ alsoShade(log4jPlugins.output) // Plazma - Diff on patch ++ runtimeOnly(log4jPlugins.output) // Plazma - Diff on patch ++ ++ runtimeOnly(common.maven.provider) ++ runtimeOnly(common.bundles.maven) ++ runtimeOnly(server.bundles.runtime) ++ ++ testImplementation(common.bundles.test) ++ testImplementation(server.bundles.test) ++ // Plazma end - Use Gradle Version Catalogs } paperweight { diff --git a/patches/server/0004-Fork-friendly-Rebranding.patch b/patches/server/0004-Fork-friendly-Rebranding.patch new file mode 100644 index 0000000..1f4bae6 --- /dev/null +++ b/patches/server/0004-Fork-friendly-Rebranding.patch @@ -0,0 +1,497 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Wed, 21 Dec 2022 19:31:24 +0900 +Subject: [PATCH] Fork-friendly Rebranding + + +diff --git a/build.gradle.kts b/build.gradle.kts +index c2a0dd63fe700484ac9473733b10615375d7c2b4..acca28dd3e99821e4f55794946ed27b7e8c780a5 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { + val alsoShade: Configuration by configurations.creating + + dependencies { +- implementation(project(":purpur-api")) // Pufferfish // Purpur ++ implementation(project(":${rootProject.providers.gradleProperty("brandName").get().lowercase()}-api")) // Pufferfish // Purpur // Plazma - Fork-friendly Rebranding + + // Plazma start - Use Gradle Version Catalogs + implementation(common.snakeyaml) +@@ -63,14 +63,14 @@ tasks.jar { + val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper + attributes( + "Main-Class" to "org.bukkit.craftbukkit.Main", +- "Implementation-Title" to "Purpur", // Purpur ++ "Implementation-Title" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Rebrand // Plazma - Fork-friendly Rebranding + "Implementation-Version" to implementationVersion, + "Implementation-Vendor" to date, // Paper +- "Specification-Title" to "Purpur", // Purpur ++ "Specification-Title" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Fork-friendly Rebranding + "Specification-Version" to project.version, +- "Specification-Vendor" to "Purpur Team", // Purpur +- "Brand-Id" to "purpurmc:purpur", // Purpur +- "Brand-Name" to "Purpur", // Purpur ++ "Specification-Vendor" to rootProject.providers.gradleProperty("providerName").get(), // Purpur // Plazma - Fork-friendly Rebranding ++ "Brand-Id" to rootProject.providers.gradleProperty("brandKey").get(), // Purpur // Plazma - Fork-friendly Rebranding ++ "Brand-Name" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Fork-friendly Rebranding + "Build-Number" to (build ?: ""), + "Build-Time" to Instant.now().toString(), + "Git-Branch" to gitBranch, // Paper +diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java +index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..81b204c03b3c9a997f00fd423daa963757cb0daf 100644 +--- a/src/main/java/com/destroystokyo/paper/Metrics.java ++++ b/src/main/java/com/destroystokyo/paper/Metrics.java +@@ -593,7 +593,7 @@ public class Metrics { + boolean logFailedRequests = config.getBoolean("logFailedRequests", false); + // Only start Metrics, if it's enabled in the config + if (config.getBoolean("enabled", true)) { +- Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur ++ Metrics metrics = new Metrics(io.papermc.paper.ServerBuildInfo.buildInfo().brandName(), serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur // Plazma - Fork-friendly Rebranding + + metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { + String minecraftVersion = Bukkit.getVersion(); +diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +index 6d36fc6d8e22d9b68dea3830f6ecc8763184c343..6995627310de4911d87a2f93a723d6b93dc0612f 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java ++++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +@@ -36,7 +36,7 @@ public class PaperVersionFetcher implements VersionFetcher { + private static final int DISTANCE_ERROR = -1; + private static final int DISTANCE_UNKNOWN = -2; + // Purpur start +- private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; ++ // private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; // Plazma - Fork-friendly Rebranding + private static int distance = DISTANCE_UNKNOWN; public int distance() { return distance; } + // Purpur end + +@@ -52,7 +52,7 @@ public class PaperVersionFetcher implements VersionFetcher { + if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { + updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); + } else { +- updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", build); // Purpur ++ updateMessage = getUpdateStatusMessage("PlazmaMC/Plazma", build); // Purpur // Plazma - Fork-friendly Rebranding + } + final @Nullable Component history = this.getHistory(); + +@@ -63,8 +63,12 @@ public class PaperVersionFetcher implements VersionFetcher { + //int distance = DISTANCE_ERROR; // Purpur - use field + + final OptionalInt buildNumber = build.buildNumber(); +- if (buildNumber.isPresent()) { +- distance = fetchDistanceFromSiteApi(build, buildNumber.getAsInt()); ++ // Plazma start - TODO: CI Checking ++ //noinspection PointlessBooleanExpression ++ if (false && buildNumber.isPresent()) { ++ throw new UnsupportedOperationException("Version fetching from CI is not supported yet"); ++ // distance = fetchDistanceFromSiteApi(build, buildNumber.getAsInt()); ++ // Plazma end - TODO: CI Checking + } else { + final Optional gitBranch = build.gitBranch(); + final Optional gitCommit = build.gitCommit(); +@@ -80,12 +84,13 @@ public class PaperVersionFetcher implements VersionFetcher { + default -> text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur + .append(Component.newline()) + .append(text("Download the new version at: ") +- .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) ++ .append(text(io.papermc.paper.ServerBrandConstants.DOWNLOAD_PAGE, NamedTextColor.GOLD) // Plazma - Fork-friendly Rebranding + .hoverEvent(text("Click to open", NamedTextColor.WHITE)) +- .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE)))); ++ .clickEvent(ClickEvent.openUrl(io.papermc.paper.ServerBrandConstants.DOWNLOAD_PAGE)))); // Plazma - Fork-friendly Rebranding + }; + } + ++ /* // Plazma - TODO: CI Checking + private static int fetchDistanceFromSiteApi(final ServerBuildInfo build, final int jenkinsBuild) { + try { + try (final BufferedReader reader = Resources.asCharSource( +@@ -105,6 +110,7 @@ public class PaperVersionFetcher implements VersionFetcher { + return DISTANCE_ERROR; + } + } ++ */ // Plazma - TODO: CI Checking + + // Contributed by Techcable in GH-65 + private static int fetchDistanceFromGitHub(final String repo, final String branch, final String hash) { +diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +index 3cb56595822799926a8141e60a42f5d1edfc6de5..70d6e514870b5cdf529eb067137a5c1579d3de1e 100644 +--- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java ++++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +@@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { + @Override + protected LineReader buildReader(LineReaderBuilder builder) { + builder +- .appName("Purpur") // Purpur ++ .appName(io.papermc.paper.ServerBuildInfo.buildInfo().brandName()) // Purpur // Plazma - Fork-friendly Rebranding + .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) + .completer(new ConsoleCommandCompleter(this.server)) + .option(LineReader.Option.COMPLETE_IN_WORD, true); +diff --git a/src/main/java/io/papermc/paper/ServerBrandConstants.java b/src/main/java/io/papermc/paper/ServerBrandConstants.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c60e1ce73b80125efaf8bff273d3bffa90a20b39 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/ServerBrandConstants.java +@@ -0,0 +1,33 @@ ++package io.papermc.paper; ++ ++import org.jetbrains.annotations.Nullable; ++ ++public enum ServerBrandConstants {; ++ ++ // Basic brand informations ++ private static final String BRAND_NAME = "Plazma"; ++ public static final String RESOURCE_PATH = "META-INF/maven/org.plazmamc.plazma/plazma-api/pom.properties"; ++ ++ @Nullable ++ public static final String ASCII_LOGO = """ ++ ++ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╗\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m╗\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m \033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m╗\033[38;2;142;54;148m \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m╗\033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m╗ \033[38;2;78;81;161m \033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m╗\033[38;2;56;91;166m\s ++ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m█\033[38;2;196;31;137m█\033[38;2;193;33;138m╗ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m╗ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m╔\033[38;2;116;65;153m╝ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m█\033[38;2;101;72;157m╗\033[38;2;97;73;157m \033[38;2;94;75;158m█\033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m╗ ++ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╔\033[38;2;193;33;138m╝ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m \033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m╔\033[38;2;120;64;153m╝\033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m╔\033[38;2;104;71;156m█\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m█\033[38;2;91;76;159m╔\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ ++ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m═\033[38;2;196;31;137m╝\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m╔\033[38;2;123;62;152m╝\033[38;2;120;64;153m \033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m╚\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m╔\033[38;2;91;76;159m╝\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ ++ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m║\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m█\033[38;2;180;38;140m█\033[38;2;177;39;141m█\033[38;2;174;41;142m█\033[38;2;170;42;142m█\033[38;2;167;43;143m╗ \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m║\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m \033[38;2;101;72;157m╚\033[38;2;97;73;157m═\033[38;2;94;75;158m╝\033[38;2;91;76;159m \033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m║\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ ++ \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m ++ """; ++ ++ // Support URLs ++ public static final String DOWNLOAD_PAGE = "https://plazmamc.org/downloads"; ++ public static final String CONFIG_REFERENCE = "https://docs.plazmamc.org/plazma/administration/reference/configurations"; ++ public static final String START_GUIDE = "https://docs.plazmamc.org/plazma/administration/getting-started"; ++ public static final String USAGE_GUIDE = "https://docs.plazmamc.org/plazma/administration/getting-started/next-step"; ++ public static final String SUPPORT_PAGE = "https://github.com/PlazmaMC/Plazma/issues"; ++ ++ // DO NOT MODIFY BELOW ++ public static final String BRAND_LCASE = BRAND_NAME.toLowerCase(); ++ public static final String BRAND_UCASE = BRAND_NAME.toUpperCase(); ++ ++} +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +index a6e5950b5875cafd734300cdfbf58f5d3736f3c8..a337e2c9576fb70a8ee9082e9b69719c804b286e 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +@@ -30,9 +30,6 @@ public record ServerBuildInfoImpl( + private static final String ATTRIBUTE_GIT_BRANCH = "Git-Branch"; + private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit"; + +- private static final String BRAND_PAPER_NAME = "Paper"; +- private static final String BRAND_PURPUR_NAME = "Purpur"; // Purpur +- + private static final String BUILD_DEV = "DEV"; + + public ServerBuildInfoImpl() { +@@ -43,9 +40,9 @@ public record ServerBuildInfoImpl( + this( + getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) + .map(Key::key) +- .orElse(BRAND_PURPUR_ID), // Purpur ++ .orElse(BRAND_ID), // Purpur // Plazma - Fork-friendly Rebranding + getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) +- .orElse(BRAND_PURPUR_NAME), // Purpur ++ .orElse(ServerBrandConstants.BRAND_NAME), // Purpur // Plazma - Fork-friendly Rebranding + SharedConstants.getCurrentVersion().getId(), + SharedConstants.getCurrentVersion().getName(), + getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) +@@ -62,7 +59,7 @@ public record ServerBuildInfoImpl( + + @Override + public boolean isBrandCompatible(final @NotNull Key brandId) { +- return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur ++ return brandId.equals(this.brandId) || SUPPORTED_BRANDS.contains(brandId); // Purpur // Plazma - Fork-friendly Rebranding + } + + @Override +diff --git a/src/main/java/io/papermc/paper/configuration/Configurations.java b/src/main/java/io/papermc/paper/configuration/Configurations.java +index 96142deb42700f888ea08689ab62c27ef2b881fd..62b602450a53cfebf08f839b505d0e965aff6e20 100644 +--- a/src/main/java/io/papermc/paper/configuration/Configurations.java ++++ b/src/main/java/io/papermc/paper/configuration/Configurations.java +@@ -114,7 +114,12 @@ public abstract class Configurations { + loader.save(node); + } catch (ConfigurateException ex) { + if (ex.getCause() instanceof AccessDeniedException) { +- LOGGER.warn("Could not save {}: Paper could not persist the full set of configuration settings in the configuration file. Any setting missing from the configuration file will be set with its default value in memory. Admins should make sure to review the configuration documentation at https://docs.papermc.io/paper/configuration for more details.", filename, ex); ++ // Plazma start - Fork-friendly Rebranding ++ LOGGER.warn("Could not save {}: {} could not persist the full set of configuration settings in the configuration file." ++ + "Any setting missing from the configuration file will be set with its default value in memory." ++ + "Admins should make sure to review the configuration documentation at {} for more details.", ++ filename, io.papermc.paper.ServerBuildInfo.buildInfo().brandName(), io.papermc.paper.ServerBrandConstants.CONFIG_REFERENCE, ex); ++ // Plazma end - Fork-friendly Rebranding + } else throw ex; + } + } +diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java +index c366d84518979e842a6f10f969a5951539ecac93..4d4a565435c1c73d0693be89b4a6624d1a8515eb 100644 +--- a/src/main/java/net/minecraft/CrashReport.java ++++ b/src/main/java/net/minecraft/CrashReport.java +@@ -37,7 +37,7 @@ public class CrashReport { + io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(cause); // Paper + this.title = message; + this.exception = cause; +- this.systemReport.setDetail("CraftBukkit Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit ++ this.systemReport.setDetail(io.papermc.paper.ServerBuildInfo.buildInfo().brandName() + " Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit // Plazma - Fork-friendly Rebranding + } + + public String getTitle() { +@@ -127,7 +127,7 @@ public class CrashReport { + stringbuilder.append("---- Minecraft Crash Report ----\n"); + // Purpur start + stringbuilder.append("// "); +- stringbuilder.append("// DO NOT REPORT THIS TO PAPER! REPORT TO PURPUR INSTEAD!"); ++ stringbuilder.append("// DO NOT REPORT THIS TO PAPER OR PURPUR! REPORT TO %s INSTEAD!".formatted(io.papermc.paper.ServerBuildInfoImpl.BRAND_UCASE)); // Plazma - Fork-friendly Rebranding + // Purpur end + stringbuilder.append("// "); + stringbuilder.append(CrashReport.getErrorComment()); +diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java +index 0f7d6da8685716604f0749d4f5b60730a44cde73..4911a6d25d12eb9d2b263aeb9b7f521ff828397a 100644 +--- a/src/main/java/net/minecraft/server/Main.java ++++ b/src/main/java/net/minecraft/server/Main.java +@@ -107,6 +107,11 @@ public class Main { + */ // CraftBukkit end + + try { ++ // Plazma start - Fork-friendly Rebranding ++ //noinspection ConstantValue ++ if (io.papermc.paper.ServerBrandConstants.ASCII_LOGO != null) ++ System.out.println(io.papermc.paper.ServerBrandConstants.ASCII_LOGO); ++ // Plazma end - Fork-friendly Rebranding + + Path path = (Path) optionset.valueOf("pidFile"); // CraftBukkit + +@@ -178,7 +183,7 @@ public class Main { + if (awtException != null) { + Main.LOGGER.error("You are using a headless JRE distribution."); + Main.LOGGER.error("This distribution is missing certain graphic libraries that the Minecraft server needs to function."); +- Main.LOGGER.error("For instructions on how to install the non-headless JRE, see https://docs.papermc.io/misc/java-install"); ++ Main.LOGGER.error("For instructions on how to install the non-headless JRE, see {}", io.papermc.paper.ServerBrandConstants.START_GUIDE); // Plazma - Fork-friendly Rebranding + Main.LOGGER.error(""); + Main.LOGGER.error(awtException); + return; +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 4c192b138810650ca0ab5e5d4f2407c0dc3d9fd0..468cb5034f7648e6ef39b1961298f592535aad88 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -960,7 +960,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.server.getQueryPlugins()) { +diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +index 842f382de43df5d5c321422372ec30ccdd7859d7..09aa0c9ec7d66ff82167c035481e5fcccf8618de 100644 +--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java ++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +@@ -56,12 +56,12 @@ public class DedicatedServerProperties extends Settings -Date: Wed, 21 Dec 2022 19:31:24 +0900 -Subject: [PATCH] Rebrand - - -diff --git a/MIT.txt b/MIT.txt -new file mode 100644 -index 0000000000000000000000000000000000000000..67d405764ed68083d0164b1af0eabc0af7f6efea ---- /dev/null -+++ b/MIT.txt -@@ -0,0 +1,21 @@ -+The MIT License (MIT) -+ -+Copyright (c) 2024 Paper Contributors -+ -+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. -diff --git a/build.gradle.kts b/build.gradle.kts -index 8d1a11c1a1fedb7ae73789abc6f4a9a689fb78c3..533418d3514fce41bab403c3ba2db21e96ac134e 100644 ---- a/build.gradle.kts -+++ b/build.gradle.kts -@@ -12,8 +12,8 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { - val alsoShade: Configuration by configurations.creating - - dependencies { -- implementation(project(":purpur-api")) // Purpur - -+ implementation(project(":${parent!!.property("projectName").toString().lowercase()}-api")) // Plazma - Rebrand - // Plazma start - Use Gradle Version Catalogs - implementation(server.bundles.implementation) - implementation(common.snakeyaml) -@@ -63,7 +63,7 @@ tasks.jar { - attributes( - "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Purpur-$implementationVersion", // Pufferfish // Purpur -+ "Implementation-Version" to "git-${parent!!.property("projectName")}-$implementationVersion", // Pufferfish // Purpur // Plazma - Rebrand - "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", - "Specification-Version" to project.version, -diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..5eefe30d47b055fd544caebfb77f6f5a12894fda 100644 ---- a/src/main/java/com/destroystokyo/paper/Metrics.java -+++ b/src/main/java/com/destroystokyo/paper/Metrics.java -@@ -593,7 +593,7 @@ public class Metrics { - boolean logFailedRequests = config.getBoolean("logFailedRequests", false); - // Only start Metrics, if it's enabled in the config - if (config.getBoolean("enabled", true)) { -- Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur -+ Metrics metrics = new Metrics(org.bukkit.craftbukkit.util.Versioning.BRANDING, serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur // Plazma - Rebrand - - metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { - String minecraftVersion = Bukkit.getVersion(); -@@ -603,7 +603,7 @@ public class Metrics { - - metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur -- metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur -+ metrics.addCustomChart(new Metrics.SimplePie(org.bukkit.craftbukkit.util.Versioning.BRAND_L + "_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur // Plazma // Plazma - Rebrand - - metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { - Map> map = new HashMap<>(); -diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..9404c5fa798b00f5532ed7bda050cf183555709d 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -20,7 +20,6 @@ import java.util.stream.StreamSupport; - public class PaperVersionFetcher implements VersionFetcher { - private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end - // Purpur start -- private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; - private static int distance = -2; public int distance() { return distance; } - // Purpur end - private static @Nullable String mcVer; -@@ -33,8 +32,8 @@ public class PaperVersionFetcher implements VersionFetcher { - @Nonnull - @Override - public Component getVersionMessage(@Nonnull String serverVersion) { -- String[] parts = serverVersion.substring("git-Purpur-".length()).split("[-\\s]"); // Purpur -- final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur -+ String[] parts = serverVersion.substring("git--".length() + org.bukkit.craftbukkit.util.Versioning.BRANDING.length()).split("[-\\s]"); // Purpur // Plazma - Rebrand -+ final Component updateMessage = getUpdateStatusMessage(org.bukkit.craftbukkit.util.Versioning.REPOSITORY, (org.bukkit.craftbukkit.util.Versioning.DEVELOPMENT ? "dev/" : "ver/") + getMinecraftVersion(), parts[0]); // Purpur // Plazma - Rebrand - final Component history = getHistory(); - - return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur -@@ -47,7 +46,7 @@ public class PaperVersionFetcher implements VersionFetcher { - String result = matcher.group(); - mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-' - } else { -- org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Purpur!"); // Purpur -+ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to " + org.bukkit.craftbukkit.util.Versioning.BRANDING + "!"); // Purpur // Plazma // Plazma - Rebrand - org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); - org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); - } -@@ -57,6 +56,7 @@ public class PaperVersionFetcher implements VersionFetcher { - } - - private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) { -+ /* // Plazma - Disable CI Checking - //int distance; // Purpur - use field - try { - int jenkinsBuild = Integer.parseInt(versionInfo); -@@ -65,6 +65,11 @@ public class PaperVersionFetcher implements VersionFetcher { - versionInfo = versionInfo.replace("\"", ""); - distance = fetchDistanceFromGitHub(repo, branch, versionInfo); - } -+ // Plazma start - Disable CI Checking -+ */ -+ versionInfo = versionInfo.replace("\"", ""); // Plazma -+ distance = fetchDistanceFromGitHub(repo, branch, versionInfo); // Plazma -+ // Plazma end - Disable CI Checking - - switch (distance) { - case -1: -@@ -77,12 +82,13 @@ public class PaperVersionFetcher implements VersionFetcher { - return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur - .append(Component.newline()) - .append(Component.text("Download the new version at: ") -- .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD) -+ .append(Component.text(org.bukkit.craftbukkit.util.Versioning.DOWNLOAD, NamedTextColor.GOLD) // Plazma - Rebranding - .hoverEvent(Component.text("Click to open", NamedTextColor.WHITE)) -- .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE)))); -+ .clickEvent(ClickEvent.openUrl(org.bukkit.craftbukkit.util.Versioning.DOWNLOAD)))); // Plazma - Rebranding - } - } - -+ /* // Plazma - Disable CI Checking - private static int fetchDistanceFromSiteApi(int jenkinsBuild, @Nullable String siteApiVersion) { - if (siteApiVersion == null) { return -1; } - try { -@@ -102,6 +108,7 @@ public class PaperVersionFetcher implements VersionFetcher { - return -1; - } - } -+ */ // Plazma - Disable CI Checking - - // Contributed by Techcable in GH-65 - private static int fetchDistanceFromGitHub(@Nonnull String repo, @Nonnull String branch, @Nonnull String hash) { -diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index 3cb56595822799926a8141e60a42f5d1edfc6de5..f92edc10fb0f7a00436fd66d1fd1a9a45fb88b95 100644 ---- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -+++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -@@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { - @Override - protected LineReader buildReader(LineReaderBuilder builder) { - builder -- .appName("Purpur") // Purpur -+ .appName(org.bukkit.craftbukkit.util.Versioning.BRANDING) // Purpur // Plazma - Rebrand - .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) - .completer(new ConsoleCommandCompleter(this.server)) - .option(LineReader.Option.COMPLETE_IN_WORD, true); -diff --git a/src/main/java/io/papermc/paper/configuration/Configurations.java b/src/main/java/io/papermc/paper/configuration/Configurations.java -index 96142deb42700f888ea08689ab62c27ef2b881fd..f5d725feb6d32f947eed82073c5594e205f31afe 100644 ---- a/src/main/java/io/papermc/paper/configuration/Configurations.java -+++ b/src/main/java/io/papermc/paper/configuration/Configurations.java -@@ -114,7 +114,11 @@ public abstract class Configurations { - loader.save(node); - } catch (ConfigurateException ex) { - if (ex.getCause() instanceof AccessDeniedException) { -- LOGGER.warn("Could not save {}: Paper could not persist the full set of configuration settings in the configuration file. Any setting missing from the configuration file will be set with its default value in memory. Admins should make sure to review the configuration documentation at https://docs.papermc.io/paper/configuration for more details.", filename, ex); -+ // Plazma start - Rebrand -+ LOGGER.warn("Could not save {}: " + org.bukkit.craftbukkit.util.Versioning.DOWNLOAD + " could not persist the full set of configuration settings in the configuration file." -+ + "Any setting missing from the configuration file will be set with its default value in memory." -+ + "Admins should make sure to review the configuration documentation at https://docs.papermc.io/paper/configuration for more details.", filename, ex); // TODO: Change to Plazma document link -+ // Plazma end - Rebrand - } else throw ex; - } - } -diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java -index c366d84518979e842a6f10f969a5951539ecac93..bc273804a60542efb284409680c6849d165dedaa 100644 ---- a/src/main/java/net/minecraft/CrashReport.java -+++ b/src/main/java/net/minecraft/CrashReport.java -@@ -37,7 +37,7 @@ public class CrashReport { - io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(cause); // Paper - this.title = message; - this.exception = cause; -- this.systemReport.setDetail("CraftBukkit Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit -+ this.systemReport.setDetail(org.bukkit.craftbukkit.util.Versioning.BRANDING + " Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit // Plazma - Rebranding - } - - public String getTitle() { -@@ -127,7 +127,7 @@ public class CrashReport { - stringbuilder.append("---- Minecraft Crash Report ----\n"); - // Purpur start - stringbuilder.append("// "); -- stringbuilder.append("// DO NOT REPORT THIS TO PAPER! REPORT TO PURPUR INSTEAD!"); -+ stringbuilder.append("// DO NOT REPORT THIS TO PAPER OR PURPUR! REPORT TO " + org.bukkit.craftbukkit.util.Versioning.BRAND_U + " INSTEAD!"); // Plazma - Rebranding - // Purpur end - stringbuilder.append("// "); - stringbuilder.append(CrashReport.getErrorComment()); -diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 411f1f8c6be072cfc5ba88cbec38dbc4300a41d1..0fb3eeab083a0b1e9b495bd2c5c556fca2236c22 100644 ---- a/src/main/java/net/minecraft/server/Main.java -+++ b/src/main/java/net/minecraft/server/Main.java -@@ -107,6 +107,26 @@ public class Main { - */ // CraftBukkit end - - try { -+ // Plazma start - Branding -+ // System.out.println(""" -+ // -+ // \033[38;2;236;61;151m┏\033[38;2;236;61;157m━\033[38;2;237;62;163m━\033[38;2;237;62;169m━\033[38;2;238;62;175m━\033[38;2;238;63;181m━\033[38;2;239;63;187m┓\033[38;2;239;63;193m \033[38;2;239;64;200m┏\033[38;2;240;64;206m━\033[38;2;240;64;212m┓\033[38;2;241;65;218m \033[38;2;241;65;224m \033[38;2;242;65;230m \033[38;2;242;66;236m \033[38;2;242;66;242m \033[38;2;237;66;243m \033[38;2;232;67;243m┏\033[38;2;227;67;244m━\033[38;2;221;67;244m━\033[38;2;216;68;244m━\033[38;2;211;68;245m━\033[38;2;205;69;245m┓\033[38;2;200;69;246m \033[38;2;195;69;246m┏\033[38;2;189;70;246m━\033[38;2;184;70;247m━\033[38;2;179;70;247m━\033[38;2;173;71;247m━\033[38;2;168;71;248m━\033[38;2;163;72;248m━\033[38;2;157;72;249m┓\033[38;2;152;72;249m┏\033[38;2;147;73;249m━\033[38;2;141;73;250m━\033[38;2;136;74;250m┓\033[38;2;131;74;250m \033[38;2;125;74;251m \033[38;2;120;75;251m \033[38;2;115;75;251m┏\033[38;2;109;76;252m━\033[38;2;104;76;252m━\033[38;2;99;77;252m┓\033[38;2;94;77;253m \033[38;2;88;77;253m┏\033[38;2;83;78;253m━\033[38;2;78;79;254m━\033[38;2;79;85;254m━\033[38;2;79;91;254m━\033[38;2;80;97;255m┓\033[38;2;80;103;255m\s -+ // \033[38;2;236;61;151m┃\033[38;2;236;61;157m┏\033[38;2;237;62;163m━\033[38;2;237;62;169m━\033[38;2;238;62;175m━\033[38;2;238;63;181m┓\033[38;2;239;63;187m┗\033[38;2;239;63;193m┓\033[38;2;239;64;200m┃\033[38;2;240;64;206m \033[38;2;240;64;212m┃\033[38;2;241;65;218m \033[38;2;241;65;224m \033[38;2;242;65;230m \033[38;2;242;66;236m \033[38;2;242;66;242m \033[38;2;237;66;243m┏\033[38;2;232;67;243m┛\033[38;2;227;67;244m┏\033[38;2;221;67;244m━\033[38;2;216;68;244m━\033[38;2;211;68;245m┓\033[38;2;205;69;245m┗\033[38;2;200;69;246m┓\033[38;2;195;69;246m┗\033[38;2;189;70;246m━\033[38;2;184;70;247m━\033[38;2;179;70;247m┓\033[38;2;173;71;247m \033[38;2;168;71;248m \033[38;2;163;72;248m┏\033[38;2;157;72;249m┛\033[38;2;152;72;249m┃\033[38;2;147;73;249m \033[38;2;141;73;250m \033[38;2;136;74;250m┗\033[38;2;131;74;250m┓\033[38;2;125;74;251m \033[38;2;120;75;251m┏\033[38;2;115;75;251m┛\033[38;2;109;76;252m \033[38;2;104;76;252m \033[38;2;99;77;252m┃\033[38;2;94;77;253m┏\033[38;2;88;77;253m┛\033[38;2;83;78;253m┏\033[38;2;78;79;254m━\033[38;2;79;85;254m━\033[38;2;79;91;254m┓\033[38;2;80;97;255m┗\033[38;2;80;103;255m┓ -+ // \033[38;2;236;61;151m┃\033[38;2;236;61;157m┗\033[38;2;237;62;163m━\033[38;2;237;62;169m━\033[38;2;238;62;175m━\033[38;2;238;63;181m┛\033[38;2;239;63;187m┏\033[38;2;239;63;193m┛\033[38;2;239;64;200m┃\033[38;2;240;64;206m \033[38;2;240;64;212m┃\033[38;2;241;65;218m \033[38;2;241;65;224m \033[38;2;242;65;230m \033[38;2;242;66;236m \033[38;2;242;66;242m \033[38;2;237;66;243m┃\033[38;2;232;67;243m \033[38;2;227;67;244m┗\033[38;2;221;67;244m━\033[38;2;216;68;244m━\033[38;2;211;68;245m┛\033[38;2;205;69;245m \033[38;2;200;69;246m┃\033[38;2;195;69;246m \033[38;2;189;70;246m \033[38;2;184;70;247m┏\033[38;2;179;70;247m┛\033[38;2;173;71;247m \033[38;2;168;71;248m┏\033[38;2;163;72;248m┛\033[38;2;157;72;249m \033[38;2;152;72;249m┃\033[38;2;147;73;249m \033[38;2;141;73;250m┏\033[38;2;136;74;250m┓\033[38;2;131;74;250m┗\033[38;2;125;74;251m━\033[38;2;120;75;251m┛\033[38;2;115;75;251m┏\033[38;2;109;76;252m┓\033[38;2;104;76;252m \033[38;2;99;77;252m┃\033[38;2;94;77;253m┃\033[38;2;88;77;253m \033[38;2;83;78;253m┗\033[38;2;78;79;254m━\033[38;2;79;85;254m━\033[38;2;79;91;254m┛\033[38;2;80;97;255m \033[38;2;80;103;255m┃ -+ // \033[38;2;236;61;151m┃\033[38;2;236;61;157m \033[38;2;237;62;163m┏\033[38;2;237;62;169m━\033[38;2;238;62;175m━\033[38;2;238;63;181m━\033[38;2;239;63;187m┛\033[38;2;239;63;193m \033[38;2;239;64;200m┃\033[38;2;240;64;206m \033[38;2;240;64;212m┃\033[38;2;241;65;218m \033[38;2;241;65;224m \033[38;2;242;65;230m \033[38;2;242;66;236m \033[38;2;242;66;242m \033[38;2;237;66;243m┃\033[38;2;232;67;243m \033[38;2;227;67;244m┏\033[38;2;221;67;244m━\033[38;2;216;68;244m━\033[38;2;211;68;245m┓\033[38;2;205;69;245m \033[38;2;200;69;246m┃\033[38;2;195;69;246m \033[38;2;189;70;246m┏\033[38;2;184;70;247m┛\033[38;2;179;70;247m \033[38;2;173;71;247m┏\033[38;2;168;71;248m┛\033[38;2;163;72;248m \033[38;2;157;72;249m \033[38;2;152;72;249m┃\033[38;2;147;73;249m \033[38;2;141;73;250m┃\033[38;2;136;74;250m┗\033[38;2;131;74;250m┓\033[38;2;125;74;251m \033[38;2;120;75;251m┏\033[38;2;115;75;251m┛\033[38;2;109;76;252m┃\033[38;2;104;76;252m \033[38;2;99;77;252m┃\033[38;2;94;77;253m┃\033[38;2;88;77;253m \033[38;2;83;78;253m┏\033[38;2;78;79;254m━\033[38;2;79;85;254m━\033[38;2;79;91;254m┓\033[38;2;80;97;255m \033[38;2;80;103;255m┃ -+ // \033[38;2;236;61;151m┃\033[38;2;236;61;157m \033[38;2;237;62;163m┃\033[38;2;237;62;169m \033[38;2;238;62;175m \033[38;2;238;63;181m \033[38;2;239;63;187m \033[38;2;239;63;193m \033[38;2;239;64;200m┃\033[38;2;240;64;206m \033[38;2;240;64;212m┗\033[38;2;241;65;218m━\033[38;2;241;65;224m━\033[38;2;242;65;230m━\033[38;2;242;66;236m━\033[38;2;242;66;242m┓\033[38;2;237;66;243m┃\033[38;2;232;67;243m \033[38;2;227;67;244m┃\033[38;2;221;67;244m \033[38;2;216;68;244m \033[38;2;211;68;245m┃\033[38;2;205;69;245m \033[38;2;200;69;246m┃\033[38;2;195;69;246m┏\033[38;2;189;70;246m┛\033[38;2;184;70;247m \033[38;2;179;70;247m \033[38;2;173;71;247m┗\033[38;2;168;71;248m━\033[38;2;163;72;248m━\033[38;2;157;72;249m┓\033[38;2;152;72;249m┃\033[38;2;147;73;249m \033[38;2;141;73;250m┃\033[38;2;136;74;250m \033[38;2;131;74;250m┗\033[38;2;125;74;251m━\033[38;2;120;75;251m┛\033[38;2;115;75;251m \033[38;2;109;76;252m┃\033[38;2;104;76;252m \033[38;2;99;77;252m┃\033[38;2;94;77;253m┃\033[38;2;88;77;253m \033[38;2;83;78;253m┃\033[38;2;78;79;254m \033[38;2;79;85;254m \033[38;2;79;91;254m┃\033[38;2;80;97;255m \033[38;2;80;103;255m┃ -+ // \033[38;2;236;61;151m┗\033[38;2;236;61;157m━\033[38;2;237;62;163m┛\033[38;2;237;62;169m \033[38;2;238;62;175m \033[38;2;238;63;181m \033[38;2;239;63;187m \033[38;2;239;63;193m \033[38;2;239;64;200m┗\033[38;2;240;64;206m━\033[38;2;240;64;212m━\033[38;2;241;65;218m━\033[38;2;241;65;224m━\033[38;2;242;65;230m━\033[38;2;242;66;236m━\033[38;2;242;66;242m┛\033[38;2;237;66;243m┗\033[38;2;232;67;243m━\033[38;2;227;67;244m┛\033[38;2;221;67;244m \033[38;2;216;68;244m \033[38;2;211;68;245m┗\033[38;2;205;69;245m━\033[38;2;200;69;246m┛\033[38;2;195;69;246m┗\033[38;2;189;70;246m━\033[38;2;184;70;247m━\033[38;2;179;70;247m━\033[38;2;173;71;247m━\033[38;2;168;71;248m━\033[38;2;163;72;248m━\033[38;2;157;72;249m┛\033[38;2;152;72;249m┗\033[38;2;147;73;249m━\033[38;2;141;73;250m┛\033[38;2;136;74;250m \033[38;2;131;74;250m \033[38;2;125;74;251m \033[38;2;120;75;251m \033[38;2;115;75;251m \033[38;2;109;76;252m┗\033[38;2;104;76;252m━\033[38;2;99;77;252m┛\033[38;2;94;77;253m┗\033[38;2;88;77;253m━\033[38;2;83;78;253m┛\033[38;2;78;79;254m \033[38;2;79;85;254m \033[38;2;79;91;254m┗\033[38;2;80;97;255m━\033[38;2;80;103;255m┛\033[0m -+ // """); -+ System.out.println(""" -+ -+ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╗\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m╗\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m \033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m╗\033[38;2;142;54;148m \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m╗\033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m╗ \033[38;2;78;81;161m \033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m╗\033[38;2;56;91;166m\s -+ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m█\033[38;2;196;31;137m█\033[38;2;193;33;138m╗ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m╗ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m╔\033[38;2;116;65;153m╝ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m█\033[38;2;101;72;157m╗\033[38;2;97;73;157m \033[38;2;94;75;158m█\033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m╗ -+ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╔\033[38;2;193;33;138m╝ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m \033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m╔\033[38;2;120;64;153m╝\033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m╔\033[38;2;104;71;156m█\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m█\033[38;2;91;76;159m╔\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ -+ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m═\033[38;2;196;31;137m╝\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m╔\033[38;2;123;62;152m╝\033[38;2;120;64;153m \033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m╚\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m╔\033[38;2;91;76;159m╝\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ -+ \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m║\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m█\033[38;2;180;38;140m█\033[38;2;177;39;141m█\033[38;2;174;41;142m█\033[38;2;170;42;142m█\033[38;2;167;43;143m╗ \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m║\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m \033[38;2;101;72;157m╚\033[38;2;97;73;157m═\033[38;2;94;75;158m╝\033[38;2;91;76;159m \033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m║\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ -+ \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m -+ """); -+ // Plazma end - - Path path = (Path) optionset.valueOf("pidFile"); // CraftBukkit - -@@ -178,7 +198,7 @@ public class Main { - if (awtException != null) { - Main.LOGGER.error("You are using a headless JRE distribution."); - Main.LOGGER.error("This distribution is missing certain graphic libraries that the Minecraft server needs to function."); -- Main.LOGGER.error("For instructions on how to install the non-headless JRE, see https://docs.papermc.io/misc/java-install"); -+ Main.LOGGER.error("For instructions on how to install the non-headless JRE, see https://docs.papermc.io/misc/java-install"); // Plazma - Rebrand // TODO: Change to Plazma document url - Main.LOGGER.error(""); - Main.LOGGER.error(awtException); - return; -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4e989dd5919e29d04dcd9f6af0f3922f94d41742..2b015360df398ad8118f7b108cb9474edf373121 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -496,8 +496,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.server.getQueryPlugins()) { -diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index 842f382de43df5d5c321422372ec30ccdd7859d7..55e16ed1151c5d53f492581f66a3406ac418b653 100644 ---- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -@@ -56,12 +56,12 @@ public class DedicatedServerProperties extends Settings finalizers = Lists.newArrayList(); -@@ -56,7 +58,7 @@ public class MinecraftServerGui extends JComponent { - ; - } - -- final JFrame jframe = new JFrame("Purpur Minecraft server"); // Purpur -+ final JFrame jframe = new JFrame(TITLE); // Purpur // Plazma - Rebrand - final MinecraftServerGui servergui = new MinecraftServerGui(server); - - jframe.setDefaultCloseOperation(2); -@@ -64,7 +66,7 @@ public class MinecraftServerGui extends JComponent { - jframe.pack(); - jframe.setLocationRelativeTo((Component) null); - jframe.setVisible(true); -- jframe.setName("Purpur Minecraft server"); // Paper - Improve ServerGUI // Purpur -+ jframe.setName(TITLE); // Paper - Improve ServerGUI // Purpur // Plazma - Rebrand - - // Paper start - Improve ServerGUI - try { -@@ -76,7 +78,7 @@ public class MinecraftServerGui extends JComponent { - jframe.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent windowevent) { - if (!servergui.isClosing.getAndSet(true)) { -- jframe.setTitle("Purpur Minecraft server - shutting down!"); // Purpur -+ jframe.setTitle(SHUTDOWN_TITLE); // Purpur // Plazma - Rebrand - server.halt(true); - servergui.runFinalizers(); - } -@@ -123,7 +125,7 @@ public class MinecraftServerGui extends JComponent { - - // Paper start - Add onboarding message for initial server start - private JComponent buildOnboardingPanel() { -- String onboardingLink = "https://docs.papermc.io/paper/next-steps"; -+ String onboardingLink = org.bukkit.craftbukkit.util.Versioning.STEP_UP; // Plazma - Rebranding - JPanel jPanel = new JPanel(); - - javax.swing.JLabel jLabel = new javax.swing.JLabel("If you need help setting up your server you can visit:"); -diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index f6e3b745fc417354380d4a969f83aee430bad785..d2795cacee1b3dd2d73ec91553bb8aa3206db74a 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -@@ -155,7 +155,7 @@ public class RegionFileStorage implements AutoCloseable { - - // Paper start - private static void printOversizedLog(String msg, Path file, int x, int z) { -- org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER - You may ask for help on Discord, but do not file an issue. These error messages can not be removed."); -+ org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO " + org.bukkit.craftbukkit.util.Versioning.BRANDING + " - You may ask for help on Discord, but do not file an issue. These error messages can not be removed."); // Plazma - Rebrand - } - - private static CompoundTag readOversizedChunk(RegionFile regionfile, ChunkPos chunkCoordinate) throws IOException { -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ba939f147edcedf0e8311e73a1ab85048354ac96..fe78cb60fe6000004c9e567e9046c45dd0e22d59 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -269,7 +269,7 @@ import javax.annotation.Nullable; // Paper - import javax.annotation.Nonnull; // Paper - - public final class CraftServer implements Server { -- private final String serverName = "Purpur"; // Paper // Pufferfish // Purpur -+ private final String serverName = Versioning.BRANDING; // Paper // Pufferfish // Purpur - private final String serverVersion; - private final String bukkitVersion = Versioning.getBukkitVersion(); - private final Logger logger = Logger.getLogger("Minecraft"); -diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 43df9d815e86e8fb009b47cf16a419ddc6dbe6a7..7d7134820ce73de1eef242d14d57a520d3db2a25 100644 ---- a/src/main/java/org/bukkit/craftbukkit/Main.java -+++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -142,7 +142,7 @@ public class Main { - - this.acceptsAll(Main.asList("noconsole"), "Disables the console"); - -- this.acceptsAll(Main.asList("v", "version"), "Show the CraftBukkit Version"); -+ this.acceptsAll(Main.asList("v", "version"), "Show the " + org.bukkit.craftbukkit.util.Versioning.BRANDING + " Version"); // Plazma - Rebrand - - this.acceptsAll(Main.asList("demo"), "Demo mode"); - -@@ -193,7 +193,7 @@ public class Main { - acceptsAll(asList("server-name"), "Name of the server") - .withRequiredArg() - .ofType(String.class) -- .defaultsTo("Unknown Server") -+ .defaultsTo("A " + org.bukkit.craftbukkit.util.Versioning.BRANDING + " Server") // Plazma - Rebrand - .describedAs("Name"); - // Paper end - } -@@ -258,14 +258,14 @@ public class Main { - float javaVersion = Float.parseFloat(System.getProperty("java.class.version")); - boolean isOldVersion = javaVersion < 61.0; - if (!skip && isOldVersion) { -- System.err.println("Unsupported Java detected (" + javaVersion + "). This version of Minecraft requires at least Java 21. Check your Java version with the command 'java -version'. For more info see https://docs.papermc.io/misc/java-install"); -+ System.err.println("Unsupported Java detected (" + javaVersion + "). This version of Minecraft requires at least Java 21. Check your Java version with the command 'java -version'. For more info see https://docs.papermc.io/misc/java-install"); // Plazma - Rebrand // TODO: Change to Plazma document link - return; - } - String javaVersionName = System.getProperty("java.version"); - // J2SE SDK/JRE Version String Naming Convention - boolean isPreRelease = javaVersionName.contains("-"); - if (!skip && isPreRelease) { -- System.err.println("Unsupported Java detected (" + javaVersionName + "). You are running an unsupported, non official, version. Only general availability versions of Java are supported. Please update your Java version. See https://docs.papermc.io/paper/faq#unsupported-java-detected-what-do-i-do for more information."); -+ System.err.println("Unsupported Java detected (" + javaVersionName + "). You are running an unsupported, non official, version. Only general availability versions of Java are supported. Please update your Java version. See https://docs.papermc.io/paper/faq#unsupported-java-detected-what-do-i-do for more information."); // Plazma - Rebrand // TODO: Change to Plazma document link - return; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index ca8ae8e1c51b937dac916e0b0dc94b5e2e61efeb..324495c8be1a54434e7c73158d7d20dba625b7f7 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -@@ -503,7 +503,7 @@ public class CraftScheduler implements BukkitScheduler { - this.parsePending(); - } else { - // this.debugTail = this.debugTail.setNext(new CraftAsyncDebugger(currentTick + CraftScheduler.RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper -- task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Purpur"); // Paper // Purpur -+ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to " + org.bukkit.craftbukkit.util.Versioning.BRANDING + "."); // Paper // Purpur // Plazma - Rebrand - // We don't need to parse pending - // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) - } -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 99597258e8e88cd9e2c901c4ac3ff7faeeabee2b..317ac7c5f1c2d542be260f7e86f9a7281506ebe0 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -2,28 +2,40 @@ package org.bukkit.craftbukkit.util; - - import java.io.IOException; - import java.io.InputStream; -+import java.util.Locale; - import java.util.Properties; - import java.util.logging.Level; - import java.util.logging.Logger; - import org.bukkit.Bukkit; - - public final class Versioning { -- public static String getBukkitVersion() { -- String result = "Unknown-Version"; -- -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Pufferfish // Purpur -+ // Plazma start - Rebrand; Branding utils -+ private static String version = "Unknown-Version"; -+ public static final String BRANDING = "Plazma"; -+ public static final String BRAND_L = BRANDING.toLowerCase(Locale.ROOT); -+ public static final String BRAND_U = BRANDING.toUpperCase(Locale.ROOT); -+ public static final String REPOSITORY = "PlazmaMC/PlazmaBukkit"; -+ public static final String DOWNLOAD = "https://plazmamc.org/downloads"; -+ public static final String DOCUMENT = "https://docs.plazmamc.org/plazma/administration/getting-started"; -+ public static final String STEP_UP = "https://docs.plazmamc.org/plazma/administration/getting-started/next-step"; -+ public static final boolean DEVELOPMENT = false; -+ static { -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.plazmamc.plazma/plazma-api/pom.properties"); - Properties properties = new Properties(); - - if (stream != null) { - try { - properties.load(stream); - -- result = properties.getProperty("version"); -+ version = properties.getProperty("version"); - } catch (IOException ex) { -- Logger.getLogger(Versioning.class.getName()).log(Level.SEVERE, "Could not get Bukkit version!", ex); -+ Logger.getLogger(Versioning.class.getName()).log(Level.SEVERE, "Could not get " + BRANDING + " version!", ex); - } - } -+ } - -- return result; -+ public static String getBukkitVersion() { -+ return version; - } -+ // Plazma end - Rebranding; Branding utils - } -diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 1b1981e80bb0ca5f5edceef96b88168bd9cc839b..2494f0e1c4a1838f6d217d8727d25384180218f5 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -231,7 +231,7 @@ public class PurpurConfig { - deathMessageOnlyBroadcastToAffectedPlayer = getBoolean("settings.broadcasts.death.only-broadcast-to-affected-player", deathMessageOnlyBroadcastToAffectedPlayer); - } - -- public static String serverModName = "Purpur"; -+ public static String serverModName = org.bukkit.craftbukkit.util.Versioning.BRANDING; // Plazma - Rebrand - private static void serverModName() { - serverModName = getString("settings.server-mod-name", serverModName); - } -diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index a353eb9f45af7b7f9bfd92a4a89403335b841840..0bd939fc0f1a13759eaf7c36a7a4874eaec91466 100644 ---- a/src/main/java/org/spigotmc/WatchdogThread.java -+++ b/src/main/java/org/spigotmc/WatchdogThread.java -@@ -96,7 +96,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - - private WatchdogThread(long timeoutTime, boolean restart) - { -- super( "Watchdog Thread" ); // Purpur - use a generic name -+ super( org.bukkit.craftbukkit.util.Versioning.BRANDING + " Watchdog Thread" ); // Purpur - use a generic name // Plazma - Rebranding; nah we dont - this.timeoutTime = timeoutTime; - this.restart = restart; - earlyWarningEvery = Math.min(io.papermc.paper.configuration.GlobalConfiguration.get().watchdog.earlyWarningEvery, timeoutTime); // Paper -@@ -155,14 +155,14 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - if (isLongTimeout) { - // Paper end - log.log( Level.SEVERE, "------------------------------" ); -- log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Purpur bug." ); // Paper // Purpur -+ log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a " + org.bukkit.craftbukkit.util.Versioning.BRANDING + " bug." ); // Paper // Purpur // Plazma - Rebrand - log.log( Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author" ); - log.log( Level.SEVERE, "\t *Especially* if it looks like HTTP or MySQL operations are occurring" ); - log.log( Level.SEVERE, "If you see a world save or edit, then it means you did far more than your server can handle at once" ); - log.log( Level.SEVERE, "\t If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes" ); -- log.log( Level.SEVERE, "If you are unsure or still think this is a Purpur bug, please report this to https://github.com/PurpurMC/Purpur/issues" ); // Purpur -+ log.log( Level.SEVERE, "If you are unsure or still think this is a " + org.bukkit.craftbukkit.util.Versioning.BRANDING + " bug, please report this to " + org.bukkit.craftbukkit.util.Versioning.REPOSITORY ); // Purpur // Plazma - Rebrand - log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" ); -- log.log( Level.SEVERE, "Purpur version: " + Bukkit.getServer().getVersion() ); // Purpur -+ log.log( Level.SEVERE, org.bukkit.craftbukkit.util.Versioning.BRANDING + " version: " + Bukkit.getServer().getVersion() ); // Purpur // Plazma - Rebrand - // - if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) - { -@@ -184,12 +184,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - // Paper end - } else - { -- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PURPUR - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Purpur -+ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO " + org.bukkit.craftbukkit.util.Versioning.BRAND_U + " - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Purpur // Plazma - Rebrand - log.log(Level.SEVERE, "The server has not responded for " + (currentTime - lastTick) / 1000 + " seconds! Creating thread dump"); - } - // Paper end - Different message for short timeout - log.log( Level.SEVERE, "------------------------------" ); -- log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Purpur!):" ); // Paper // Purpur -+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to " + org.bukkit.craftbukkit.util.Versioning.BRANDING + "!):" ); // Paper // Purpur // Plazma - Rebrand - io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper - rewrite chunk system - this.dumpTickingInfo(); // Paper - log detailed tick information - WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); -@@ -205,7 +205,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - WatchdogThread.dumpThread( thread, log ); - } - } else { -- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PURPUR - THIS IS NOT A BUG OR A CRASH ---"); // Purpur -+ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO " + org.bukkit.craftbukkit.util.Versioning.BRAND_U + " - THIS IS NOT A BUG OR A CRASH ---"); // Purpur // Plazma - Rebrand - } - - log.log( Level.SEVERE, "------------------------------" ); diff --git a/patches/server/0005-Cleanup-buildscripts.patch b/patches/server/0005-Cleanup-buildscripts.patch new file mode 100644 index 0000000..ddd0d35 --- /dev/null +++ b/patches/server/0005-Cleanup-buildscripts.patch @@ -0,0 +1,255 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Sun, 26 May 2024 23:18:01 +0900 +Subject: [PATCH] Cleanup buildscripts + + +diff --git a/build.gradle.kts b/build.gradle.kts +index acca28dd3e99821e4f55794946ed27b7e8c780a5..b95eda82341edf50f74da6760b42c47a7365e320 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -43,85 +43,126 @@ paperweight { + craftBukkitPackageVersion.set("v1_20_R4") // also needs to be updated in MappingEnvironment + } + +-// Pufferfish Start +-tasks.withType { +- val compilerArgs = options.compilerArgs +- compilerArgs.add("--add-modules=jdk.incubator.vector") +-} +-// Pufferfish End +- +-tasks.jar { +- archiveClassifier.set("dev") +- +- manifest { +- val git = Git(rootProject.layout.projectDirectory.path) +- val mcVersion = rootProject.providers.gradleProperty("mcVersion").get() +- val build = System.getenv("BUILD_NUMBER") ?: null +- val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim() +- val implementationVersion = "git-Pufferfish-$gitHash" // Pufferfish +- val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper +- val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper +- attributes( +- "Main-Class" to "org.bukkit.craftbukkit.Main", +- "Implementation-Title" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Rebrand // Plazma - Fork-friendly Rebranding +- "Implementation-Version" to implementationVersion, +- "Implementation-Vendor" to date, // Paper +- "Specification-Title" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Fork-friendly Rebranding +- "Specification-Version" to project.version, +- "Specification-Vendor" to rootProject.providers.gradleProperty("providerName").get(), // Purpur // Plazma - Fork-friendly Rebranding +- "Brand-Id" to rootProject.providers.gradleProperty("brandKey").get(), // Purpur // Plazma - Fork-friendly Rebranding +- "Brand-Name" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Fork-friendly Rebranding +- "Build-Number" to (build ?: ""), +- "Build-Time" to Instant.now().toString(), +- "Git-Branch" to gitBranch, // Paper +- "Git-Commit" to gitHash, // Paper +- "CraftBukkit-Package-Version" to paperweight.craftBukkitPackageVersion.get(), // Paper +- ) +- for (tld in setOf("net", "com", "org")) { +- attributes("$tld/bukkit", "Sealed" to true) ++// Plazma start - Cleanup buildscripts ++tasks { ++ // Pufferfish Start ++ withType { ++ val compilerArgs = options.compilerArgs ++ compilerArgs.add("--add-modules=jdk.incubator.vector") ++ } ++ // Pufferfish End ++ ++ jar { ++ archiveClassifier.set("dev") ++ ++ manifest { ++ val git = Git(rootProject.layout.projectDirectory.path) ++ val mcVersion = rootProject.providers.gradleProperty("mcVersion").get() ++ val build = System.getenv("BUILD_NUMBER") ?: null ++ val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim() ++ val implementationVersion = "git-Pufferfish-$gitHash" // Pufferfish ++ val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper ++ val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper ++ attributes( ++ "Main-Class" to "org.bukkit.craftbukkit.Main", ++ "Implementation-Title" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Rebrand // Plazma - Fork-friendly Rebranding ++ "Implementation-Version" to implementationVersion, ++ "Implementation-Vendor" to date, // Paper ++ "Specification-Title" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Fork-friendly Rebranding ++ "Specification-Version" to project.version, ++ "Specification-Vendor" to rootProject.providers.gradleProperty("providerName").get(), // Purpur // Plazma - Fork-friendly Rebranding ++ "Brand-Id" to rootProject.providers.gradleProperty("brandKey").get(), // Purpur // Plazma - Fork-friendly Rebranding ++ "Brand-Name" to rootProject.providers.gradleProperty("brandName").get(), // Purpur // Plazma - Fork-friendly Rebranding ++ "Build-Number" to (build ?: ""), ++ "Build-Time" to Instant.now().toString(), ++ "Git-Branch" to gitBranch, // Paper ++ "Git-Commit" to gitHash, // Paper ++ "CraftBukkit-Package-Version" to paperweight.craftBukkitPackageVersion.get(), // Paper ++ ) ++ for (tld in setOf("net", "com", "org")) { ++ attributes("$tld/bukkit", "Sealed" to true) ++ } + } + } +-} +- +-// Paper start - compile tests with -parameters for better junit parameterized test names +-tasks.compileTestJava { +- options.compilerArgs.add("-parameters") +-} +-// Paper end + +-publishing { +- publications.create("maven") { ++ // Paper start - compile tests with -parameters for better junit parameterized test names ++ compileTestJava { ++ options.compilerArgs.add("-parameters") + } +-} ++ // Paper end + +-// Paper start +-val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks.ScanJarForBadCalls::class) { +- badAnnotations.add("Lio/papermc/paper/annotation/DoNotUse;") +- jarToScan.set(tasks.serverJar.flatMap { it.archiveFile }) +- classpath.from(configurations.compileClasspath) +-} +-tasks.check { +- dependsOn(scanJar) +-} +-// Paper end +-// Paper start - use TCA for console improvements +-tasks.serverJar { +- from(alsoShade.elements.map { +- it.map { f -> +- if (f.asFile.isFile) { +- zipTree(f.asFile) +- } else { +- f.asFile ++ // Paper start ++ val scanJar = register("scanJarForBadCalls", io.papermc.paperweight.tasks.ScanJarForBadCalls::class) { ++ badAnnotations.add("Lio/papermc/paper/annotation/DoNotUse;") ++ jarToScan.set(serverJar.flatMap { it.archiveFile }) ++ classpath.from(configurations.compileClasspath) ++ } ++ check { ++ dependsOn(scanJar) ++ } ++ // Paper end ++ ++ // Paper start - use TCA for console improvements ++ serverJar { ++ from(alsoShade.elements.map { ++ it.map { f -> ++ if (f.asFile.isFile) { ++ zipTree(f.asFile) ++ } else { ++ f.asFile ++ } + } ++ }) ++ } ++ // Paper end - use TCA for console improvements ++ ++ test { ++ exclude("org/bukkit/craftbukkit/inventory/ItemStack*Test.class") ++ useJUnitPlatform() ++ } ++ ++ val runtimeClasspathWithoutVanillaServer = configurations.runtimeClasspath.flatMap { it.elements } ++ .zip(configurations.vanillaServer.map { it.singleFile.absolutePath }) { runtime, vanilla -> ++ runtime.filterNot { it.asFile.absolutePath == vanilla } + } +- }) +-} +-// Paper end - use TCA for console improvements + +-tasks.test { +- exclude("org/bukkit/craftbukkit/inventory/ItemStack*Test.class") +- useJUnitPlatform() ++ registerRunTask("runServer") { ++ description = "Spin up a test server from the Mojang mapped server jar" ++ classpath(includeMappings.flatMap { it.outputJar }) ++ classpath(runtimeClasspathWithoutVanillaServer) ++ } ++ registerRunTask("runReobfServer") { ++ description = "Spin up a test server from the reobfJar output jar" ++ classpath(reobfJar.flatMap { it.outputJar }) ++ classpath(runtimeClasspathWithoutVanillaServer) ++ } ++ registerRunTask("runDevServer") { ++ description = "Spin up a test server without assembling a jar" ++ classpath(sourceSets.main.map { it.runtimeClasspath }) ++ jvmArgs("-DPaper.pushPaperAssetsRoot=true") ++ } ++ registerRunTask("runBundler") { ++ description = "Spin up a test server from the Mojang mapped bundler jar" ++ classpath(rootProject.tasks.named("createMojmapBundlerJar").flatMap { it.outputZip }) ++ mainClass.set(null as String?) ++ } ++ registerRunTask("runReobfBundler") { ++ description = "Spin up a test server from the reobf bundler jar" ++ classpath(rootProject.tasks.named("createReobfBundlerJar").flatMap { it.outputZip }) ++ mainClass.set(null as String?) ++ } ++ registerRunTask("runPaperclip") { ++ description = "Spin up a test server from the Mojang mapped Paperclip jar" ++ classpath(rootProject.tasks.named("createMojmapPaperclipJar").flatMap { it.outputZip }) ++ mainClass.set(null as String?) ++ } ++ registerRunTask("runReobfPaperclip") { ++ description = "Spin up a test server from the reobf Paperclip jar" ++ classpath(rootProject.tasks.named("createReobfPaperclipJar").flatMap { it.outputZip }) ++ mainClass.set(null as String?) ++ } + } ++// Plazma end - Cleanup buildscripts + + fun TaskContainer.registerRunTask( + name: String, +@@ -162,47 +203,3 @@ fun TaskContainer.registerRunTask( + + block(this) + } +- +-val runtimeClasspathWithoutVanillaServer = configurations.runtimeClasspath.flatMap { it.elements } +- .zip(configurations.vanillaServer.map { it.singleFile.absolutePath }) { runtime, vanilla -> +- runtime.filterNot { it.asFile.absolutePath == vanilla } +- } +- +-tasks.registerRunTask("runServer") { +- description = "Spin up a test server from the Mojang mapped server jar" +- classpath(tasks.includeMappings.flatMap { it.outputJar }) +- classpath(runtimeClasspathWithoutVanillaServer) +-} +- +-tasks.registerRunTask("runReobfServer") { +- description = "Spin up a test server from the reobfJar output jar" +- classpath(tasks.reobfJar.flatMap { it.outputJar }) +- classpath(runtimeClasspathWithoutVanillaServer) +-} +- +-tasks.registerRunTask("runDevServer") { +- description = "Spin up a test server without assembling a jar" +- classpath(sourceSets.main.map { it.runtimeClasspath }) +- jvmArgs("-DPaper.pushPaperAssetsRoot=true") +-} +- +-tasks.registerRunTask("runBundler") { +- description = "Spin up a test server from the Mojang mapped bundler jar" +- classpath(rootProject.tasks.named("createMojmapBundlerJar").flatMap { it.outputZip }) +- mainClass.set(null as String?) +-} +-tasks.registerRunTask("runReobfBundler") { +- description = "Spin up a test server from the reobf bundler jar" +- classpath(rootProject.tasks.named("createReobfBundlerJar").flatMap { it.outputZip }) +- mainClass.set(null as String?) +-} +-tasks.registerRunTask("runPaperclip") { +- description = "Spin up a test server from the Mojang mapped Paperclip jar" +- classpath(rootProject.tasks.named("createMojmapPaperclipJar").flatMap { it.outputZip }) +- mainClass.set(null as String?) +-} +-tasks.registerRunTask("runReobfPaperclip") { +- description = "Spin up a test server from the reobf Paperclip jar" +- classpath(rootProject.tasks.named("createReobfPaperclipJar").flatMap { it.outputZip }) +- mainClass.set(null as String?) +-} diff --git a/patches/server/0005-Rebrand-Logo.patch b/patches/server/0005-Rebrand-Logo.patch deleted file mode 100644 index 11a657e..0000000 --- a/patches/server/0005-Rebrand-Logo.patch +++ /dev/null @@ -1,319 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Fri, 10 Mar 2023 22:08:56 +0900 -Subject: [PATCH] Rebrand Logo - - -diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png -index 518591dd83289e041a16e2c2e7d7e7640d4b2e1b..efa53bcb692650396b2e71b62243a15dd95aa096 100644 -GIT binary patch -literal 7439 -zcmbVR2{@GP-XHrOqAXd4vQ@*(FwBg7H)RWzq?$1cV;jsEgUC>Xv{*uxlATr*5!qAr -zB|8nGvP&US-{|e_yytx9J>R*$xvpoPd+z6V|Nh(Wf8W=0O|-4Gxd5*uF8}}#Kv|gB -zG4BRD7dI#KyNKvJ&b;yXSezmQ0IK_UE*4s@J{17q0uvn^DUMc_NG!=q6@w$W;8kf} -zK1?(KprcRo!C*b`6rc;X4sM7!v%? -zP^N5f7z*b91mmzs0?E${!;G2eg>l8J`FOj^1Ak`{X-x7Y`7sSMy;J||Jj&SE){jIW -zdNLo7?aYmUC{tri2trd61XYFnbl1uXiSi~>Fy2@^%0yS5nIBam5r-te@EULzm^uiD -z)o=m15Ht`Vj0P3~f@&hba6AN}1xL92x!#0?_1{s!&iX$(0!P9!IsV}uoZzBKAmCsi -zu#2V!$OWf?1;I7JFc1Q(fxzMjFinU$^iMV$KO(a!F`j>A-SG;?WYogAz;Sq{FX}D? -z9LPnBIYJN!%wpi-aGW|A4@GETc9j29Oh^kNnOWw*U%h0H_x&~UBm#fx2Z_P%^o6cG -zc1I9+ocyn8;=jqqe`WdC`T#dPlk`8R=-@qT}a -zzz5@pVQxuyKeDbo!H?tx#Q6Al60w+_aMh^ZxL=L_yFfq+3HT3P{jD7`hWekg1i>I& -z)FChk2#--$2N7H}Fdz&ZiUGkPV5}xo6OPfuFje_lbr!D?~ -z7HL0qL&9#b0Z$e;dynQ_JpDd2(e|>_U4@+VM+OUdl^`LLJD}Kn&mxZEq{Vvo!={FD -z;Xsf&Z%lzL5069`d&_w;nN%@_2(I3KIlPrlj=CPk^P?{)b9=tJ^HJyK_?P=j!7l>t -zW8*j0N8=x>jfM^naElj8)EUl}cmQG9?q=Zqu#&m?^cS~7%H3^Y+>J{P?G|+2r)BQn -zTt$){Fsq77g|!Y`=eWE9GKdsTed^qn`B+uNS1i_PpHFqx%WC+5;WeeJ1}xM-I2SF2 -zyZ)V4kv&Ni&??Zcz2VFX@0+TVx=v^CK7!4)onxD$+tdh4YqtOfiM1lTY9?|ERksWU -zJNECscx|1w%u$QwM$-4u-?A(rQ*?D40aBdbic$LHM~x^rP+v>jDxT$r0kzQs1Bj(p -zg)Om}OI^7tV+&x%Gh!n%zf5jtR(4wtxxHT>>UN{;IwDu46b|rFeZ*O@%T4!sh~9O8 -zGx||SmKyB_{GwR4S!f?Z`+0%%*AMT3G!x@^O~wo1sfJ5jMZH|CVF^|`=w*-+0a5GT -zY{PFfCF=G$QtIO7XJFc{>|qLn;8LkGEx7PambLb9tn}C12>UbHb;H`+oQ@G(@W}~s -z!#b-`1Epo;bXZgviDmWNL*a*FVV&jy@9Rff+|UGgFjt+qpj!aLJzKRcx)5tv@G@$H -zKaPuq!HNd?D2Uvl)B;*YmpvoiL_YApJ8v|${1|wJHD{MmQ-iwoCOyH-64HgR&>fv= -zJb2BlImpQD=GqJoj&vr8#do|8z@RbCM#v(G-EI*|oLN+XkVtRpq?9q4o*jLU)X0M8 -zV9jCa5c?(!9>~%^%DBC|yO-N2UU&6)QSzl)uiEX}9yS&Ou}N8h?dH1Mnw-#9bEijQ -zHndk+N3GhpZeqUy23dXid++6a;8)4uO%y#dj`rZyKQbZ0xhk?!$nMpaZzPu{x#dP; -zli~UvEv|7+3?Rlfm+_e>=5oXj$8wmh&W6DQ;hsIT*L;c-Eq0xS;MlOtVL;G8mB}GR -zKXB7EqvK7&#$%=wmG%Zv7CxjrI=6srEc=>T9fFnz=d%Qb6Hwj5X~Fkls{^ -zfs3>Nbj8{_Uee_AArP6yBVdnGI!CQe!~-Gv;2v}~I)pXtxrqeiVzz!Q@PvTRGxN7x -zTf2M?7$~s$%HH3z!Np*!9ja}8$Qu^jnn9F!mR09c(eYp!+6xuB&MkZ~>SDD$n7tco -zcS@#|@N(A&&jxD^A8R8*#XREmBAbpd!T2(;*I-FWs*a!jqjzyhi+KJej;8n&9}ByFF9>DrOY7ZDfe@26GXd4L_D>@JfA); -z4-a;kKmdMIh3!j7?h?4PrOfi&kB;>br}ql -zQIRnUo0Y+|uU`-D>)&-h6t8?Q6ZvF0Dd$6tLDzACOh5^r{ZuadgIRvMbcfuEt;;6M -zVDP?32pi^Y_!2w7pvCUwV62j(P{%y08ss`0oGnf{ANGQcO=Pd3IF;kV+Tz0YdQPEh -ze^q|ZnruwlDV?~wyalOojf}6BZ2k4NhdQ@w>bC>DrsyxX5=G}@6SQNl36-&y_H)`) -zKw+V0ugiGx(a(}oHVU+=PiD_Z#uWzqV7YAa(j92|jtBj=T&!674Ch_zPw$=6t6 -z%LCE+#P_k)FG!jF&6AzduX4(f)RUD%t9DPYy$MbDk+J28eIo(tg^o@a=F{ILM`iSl -zk_YcXV=t7%{sY>mTm#N*Vs1Qe7tEvrOoZ8c+4#Mp;$S3v&HfK!^Qok -zi!e@&a4=ozeA9lj=dCePA@G!TuXmg`H^}SHyH>Y4QoYi*+SiYz_P5*54OqY3;9JkF -z1HD;wI;uXbwfJEwV0#4hT46Cmr!Qc%{>IXa1@0=BS0ks(+w@nwoI~10JVS{Cv&ODZ -zGYny)m)=}S%XGQ@$p;&2A{!YsXLa60^9YLdb5SOkMX;r)B7Nz-%Hz<`R~*}B24H3O -ziAMkIJ{i}56O~+xZtkjn{Q^t)=CTw0y44Gxr4R9XxURK3h0aa}E|9z*_8_{9w_0Rk -z*mONd21lrKHe0ICXP(wQIh`qWK42hi#;3_Yzq`-j4r#s1rh27%m;{hHBXAc*H=5r( -zC^#1nIgZO|Zyv9oq{#@03c^HnQ&)z*Mxk2rF7b<%_2n3^c1kdMmZRO*flBA7yyW** -z6CdN|uFX{ke8|MQ%JxtvPv_eOQbmeo&folAV;HZ|bh4=I)FqW^xy;eQk)Q?LhJZD_ -z)t-2jQl-_E>DZ5BurQ7@qb(xN2Vf+duy~`HC!3ghlUz!NNOJ^uoDDsH`5MOrDqoxc -zJ^udrvD;C>2emoR-3qPO$g6hc?Oc0UJ|;-2np=LLNst+P)f{}HWM<-t!(l!3`#BEg -zMOUsk_$DPjuwxWvY=2u_@83=wtNPXxAp6SqD50b{7#)?cC~lg`kP=Kx+H-oc+*|GL -z5jp#ewFMSC4NVi0xM28+>CTnz4^45sja*}rXA2)O&a9?droJxKm0cJtG$y3$#AYU` -zm458@zi1R*%y}M`d!3V)SbI>Vh|?(|Wq2~s$E&mN&5O~J^qiIw5duUfev+Y$bzAkt -zHJb`2U1&`u>@r%o6|J&L6SN>w){jAIO=g?;0v+O<&yw7)NJu_-;GXG3sOym^13KN7 -z{f;iYkTM}wHS~Rhvj<>mS`KnOeomrkPRPxOa=;e0@~%i)*0NmCXCvJ@kCMofM0q1V -z{JiDB?Y<`$<77CS!@EB4U`Lo$Epc924dzx%*D@GmAMui?f_1B;EJDX4jurBI*w6Lt -zmVQMYEG;dF3;s^S*~_N&d)~bO&wcjH!jwfRibIZLSv6k}*o`v_uInCCr#UZeW>`Il -z-$i|z^kHFNs2s{!p8z`5{86+GOdEPBne+CFG@9&Drris~K@t{30Ii}j;CH4#vu>eR -zoxr?ZIc8VRF -z9L$ZEzNTnHo^+DAfNn_CxF}|2yX@W4;GJ{RNkyRjbxr1wPU1f6h>6`faqey7EG-vb -zw~3@*yBonLl+N4ICiOZKhLiB+Ux~W)yxdQm_u&<=$=JmFWqy -zqvtZD{EktMap#ODq(GX`?j9mu_nT&)Hz2oIC(AtoT!^!0CU2Fp#%T2OCIOzz?zUh* -zRT~S;*?TFSXZ|*j6Ia)nn9=*~tmBmP=|W -z!Od&@$0%mP%7NyP%SH;hmz9%u--^kc3D0lZw{Us?j5T5Lu7u^mE!VvnIu8SepR1a2 -znklEWe=1Pd>OZ<|J$&n-+JS-(-HGX~8qIVa?Rk+fUkM;?Je9+1AH8-y!oB6Hvsrz1IR}`wS(GIc(|9$KcHe5{x!-O&oEB^8p;CfI -zrPnVgl-K)fmVSKZy;-@XqTqcjJClLVh{~#v6m7wPzL44nDG_LkN)QY#DO`U-$ARnmTvot#UJR&N4uDJ8- -zL5JtoP@y$l4!?s^k_O!VLe30FkpqRFL<3#3?QlID_j{FKUYkSeo}q5K(+!nW|1+PS -zzIX)F_Nn4jRy2F|f#?nD9(B0$EXCGHv{)rdMm=FIHN!I$Ef6KEwWX#c8`9DNyH;I$ -z>l`VkxLCor=hLx6Ry|`fa;65)cLH!(&#*t>1zd>R}!EFJmGMr@zG$B -z(?8xG$?IHr{;6PHI-qqqQ~1Q_GSF20NOV=bp}lIc#1WB=Okwroa()r(S00GXW?r|6 -z3JEqSkcgL%HG6C*_L*S(^1vH|_{aiU^h3?P#yOjwt#S+I^MN&KQ9m}RMZuB8(>3#z -zd7a;1N#r6DZmSCL+mGrR_!bzQq7&E#Mr?lEYCoh+u+iHpP`_3!Sr_nQ?dAM%UwdNV -zeKPk1-_Y~UCrxR*yl)a66BQ=8l|a(QNgkODMd;1y+&ZDuI7I7ZTYy+JUxzKjDB+Bq -zBu~z`kIyCCZ9cnh99+o=7IG(~u8-ri%ov!`x%DG8Tg}OAU?_HJUf+8yBjUx-#@f52 -zEc++HXgLm2|B17=gMKi|vI*k@kg5c);_^?ehn6OrlG0KU0VRAyT31sC%>v2zT#(IcHnSZGHae6rwjMk -zl+MzhJnzvm8A$KAs`24$-TCBK9unNLtKbx|XQ%cAl_uY^D?O^jTBrWlL{o0hi3i`< -zjk#SpuU3VBHhq=ZvcUmWc4)G2fp0uTxgv&c4>;u9!G=FB@h7}A-M?+De`2A^TLLe#!I!cM7HYOTjx9_;mX+tMyBtRXhvb54D&(Of098EMRq -zw1MpR-ZO<@FkhOI(bU|84#{G$O%Asu0Kl6Hp1rH26WcqDE`RToFDMUZQ;#pYe#Z`+ -z4(|+?3Fx@V355+3oeJ{wRW*_qm)n~j3a$%`t$$L}G@%YT7%4_Z6|uV>NH}77Yn#N@hjat)ip+-N~%&vB`)3}x54wf92}?9 -z_^$Ev=eiX0D}bgY>K=pP+A7LY>OqaAm5ra#wc|vC7Xkcz9`vJZ--@Fa@X;|6`whbO -za2`tke5y^=e75l(_5z>)xComHM|&nn)EsOB!V455(TGVT->vX+5wM=)Ju{y}(Hu(F -z0X--8%-dPEOh4d;UTuaWE4VGagcXa9rkEP~_etHX$-EU3&&@}7<|rZMHJhqXlNhVv -zY4L}>PC6$x(=UKO?j@~(5+a)ezrg`rFT;AL2WN_G#d!~;`a-oiXpI~p4JiBbfaF=W -z+9y!u6DE&~bo9F%OcW~Y+g$QIE)T8k{1I~}e_kfc4~ -zU2=-5aTvL3?;3SfcN4LErcU^)6Mk_f{QKjXt70g2y*O!05s##mQ>-W9_AaSg6L<9h -zjCA4bSiR(+G^HtHYyQ2(^dc=g*OrQgMro53msAlFYrBXhg5Aejw_Z~|Q=l2^?${7; -z>bA@F!tSnesWrM&B=gM%f8{Wiu*6rgYB%Ln_cpk&^FWcNp5T>hEJIh>B+OGj?@J!e -zN$H>L4@k~VqzmyJIp3L04lh;kJ1@C`if=wW` -zwv}K8YB>7Bf0+keYDTZQ0Ql_kjqgz(N66^$A>#3Aj&7Pzeaf>8zdY0nfK2?#G4xeo -zf3^hZ_MK1@&69JJhZzl*xA?b*v)23LB##TsMD}0l7@za~&`XdK{3d(Hm1MTKG!yfK -z%c8Ne$m!qO%88&gQeviy9c}$W8H}BhXx5?)0%*$}LJex%BYt -zT1_PlY*1A%sVrJuHaV2GO8_!qmimBwZd|tEY{TO2AbKaTW};}b^oY -z1lWj4(7OiTJ+(IA(LBd>XZ(TI<1SXMXNMO8r(efQntea6leIz?@a%35x9x;$rIiV7 -zEIlL|cNww(sdx5mB%+j_C2k$oF!|U#4}LA8F)q?fi|T|LdyO5_na}yb{ZwjjjcYxF -zZHgss;bg70GvoZxC;d^JHU;-#U5~!Qheh0f>@T3(9u4l)UXf$mug&HvY2cC!dp;KF -zh%-F7QEQQ*&V4SHC!5mTU5VXg1oZDowv>{q_=2W<&&IB*wJ+}|JgWpAgLU<7y0p!-lJBIAZJFg;$GIb>5i2; -hwD#}SKSI9$V4I$CYeB{gZteVKi88e|d0>PN{~v>}<#hl6 - -literal 9260 -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 -z<wCdy-3tTl}j4kzaCmrni9Diizn#a{@0 -zu;<>ZBofe$`#ML)Z*Aj8mbPS3-(VgSdF3LA8LJgBPj{3IaB~uLBuylKO*>ev*i|tuS(Wff3`Ogj^{GsE -zb-&NcY_)d|4#vv+AW}skSWrN{p$KOp?oug)BPoM*O}*h=wrr-PGYCt{qwP-&I!~hn -z&+*{EI5^09slk8i%kFcTjCcO6Oc}M9iiS}cuLLw0fyMPfjZ_M`;HWDHP^ke=f*5^! -z(0!2p!N9nZ8J+AP5sfunmbw64l@2)3@53_`Q@g&4FYKeDLbz2F-Pl@Er#INAtM()n -z<;MFT;osC}L2=Y4P1?cm)V{7nauSgh -zx4)k@#lLT}(uM?{Z&NvzT8pnJk@-MDvv4wOKsY+l9S8OdOw}cex#$t*B6ppAEloQy -z8u`9L`Ky$*$*G}A=)h6BjVn=_YuPie5epXe0vLKZP=Pxps%a&uGrdg4y#R{YobnDn -zWlMl5J;9|5ev`f`BO3Uh(yuK%@i^`+fAimq+_>*)z(;wrFdXn2nVJw1y_>PcV%p-) -zt#ZCU`}~DIE5y1BiI$qSd5XIebq(uRB-FnL#^x=bDHO-ls3({4R}-PgePOPH8ggGN -z^EAdT|N11qATWCZQ}ZY#=hum&;_xeyp*|O{VN?%jM$?&+DK=8LzLP4?U!YQ_JT0`M -z`m!W@TCB5mlr9&jJ{^cX4Ye=uf(7g!BDG1LQfZM#P5u-^$L1K~rOMk7oWI24W>ZJVoZ8!*NX>jC%2pgw@7$v*amGL8JnA`*TjN)y=JPix$ -zHom^xjfr~ZFvhO?xbJHg&jfEZgboIqN@pk*%G-#&cX5DM>_>dMo{P<(#6bOBlgEyG -zzi7pMrVsz<*TT+n%Xo*+rUVN -ztJqe<9EEg`YU)i$PQ+gn%oA5sG>b*6QUjZVf+Ju4QKWr32^B^>#t1pQ*dNT#SxuC8 -zGNJ9mH6R-92O+m#!DECXMrB|3+|cZ$?^qoag;w8-vr)Z5hx@2MVoazOwqdLo2-lu( -ziwF(a3SNH{+U_=d6KFp}-N^eInrfTZ{p%Yc;K{NXO^Sl0qy(%)%sUXL -zA6Ic}&$4}O+ulD-?|#%otX@aO$zD_RW;|WXeL`u5;iz`2Ja937zabkT*wwyB&2HIU -z%>tpNcvDWCsG=IjRr(V|Z7N`9^tphbhiC}fIrVcS>=>)uMStm;g&z-HK{fFz2ud&X -zKo;y87PhB3IZGZ&D%bJ2dZ<-Z7I$fCrPWl6O0ir})>f~+rM8k@!Q(EpWCD9f!k>me -zRhs@Q3_eZ!{s3QHUMaN0uShhn$y!N+)a -z6F#K#O21}#Wz2NGar1LUq3S|3=0~&VTjxVeqcysO1QIGwgglMcjXc3^9R9i556MW! -zA%G1+Y)mPX16RcVB#B?R~Xl -zIeR6G9EBEoU+Sk|=Q=4gQdT~j9ecG~G45m|E+IkhfuBxT`M%^wZkNkXpL0AjS!$%u -zg-={lr6QW@$p<#-f}T{y|0rAEpY~$9`Ffd=BP+`1#;?ge=@mLGkdmI~u?Dai2i+}> -zr-d}7M&xTHsK7@<3$tPd^Yg3fLzxDa!oOJ_N!hGt&$}5!9&TOIuzhIP>)^&CM1CIF -zY>A-293)fzq2lbB(1wKk=>#3=G1eTT&8(iBSJab=V@AGnDSwOhxKg{m8sa~TR||^x -zH?*-f-l|Zq;GkYEt~~O`56i(Z6gi`*^TxMZuc-f=NMlvry~%u2a>kz*@R^tJ@{7%-A@wfa)Z -z0~dL|Z*tTjEX7ED(M%2gZ|Zi_L4TWr%=BR=y4%;?-COo)8t(xaW)#f?Uhc9^d-1?K -z=UDW-cu8J#%~t1$>T7o{K5NXC7Z^ -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 -zWZQ?eQkgCCqwANoAm&K4|fw*k7ipV -zB1v2pR!seE-oV-2@pAb2ne;%k;&0+LB7z16@)VH1MO9)MHU9kSp)dCNVB91j?4mmO -zv3NP2%#IeX=+W7Ni#8IjoTpc(!3T*dt7!EX8VlAzQq6uvFcs%W{$71OuAvW8Wpseg+*PVYLv?WMN=C|H@$;E_S5fVp$L;GyupU7jZ$kfvC58X?uLqEZijH!v -HqBZh=dic2S - diff --git a/patches/server/0006-Rebrand-Logo.patch b/patches/server/0006-Rebrand-Logo.patch new file mode 100644 index 0000000..94030f5 --- /dev/null +++ b/patches/server/0006-Rebrand-Logo.patch @@ -0,0 +1,464 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Fri, 10 Mar 2023 22:08:56 +0900 +Subject: [PATCH] Rebrand Logo + + +diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png +index 8b924977b7886df9ab8790b1e4ff9b1c04a2af45..efa53bcb692650396b2e71b62243a15dd95aa096 100644 +GIT binary patch +literal 7439 +zcmbVR2{@GP-XHrOqAXd4vQ@*(FwBg7H)RWzq?$1cV;jsEgUC>Xv{*uxlATr*5!qAr +zB|8nGvP&US-{|e_yytx9J>R*$xvpoPd+z6V|Nh(Wf8W=0O|-4Gxd5*uF8}}#Kv|gB +zG4BRD7dI#KyNKvJ&b;yXSezmQ0IK_UE*4s@J{17q0uvn^DUMc_NG!=q6@w$W;8kf} +zK1?(KprcRo!C*b`6rc;X4sM7!v%? +zP^N5f7z*b91mmzs0?E${!;G2eg>l8J`FOj^1Ak`{X-x7Y`7sSMy;J||Jj&SE){jIW +zdNLo7?aYmUC{tri2trd61XYFnbl1uXiSi~>Fy2@^%0yS5nIBam5r-te@EULzm^uiD +z)o=m15Ht`Vj0P3~f@&hba6AN}1xL92x!#0?_1{s!&iX$(0!P9!IsV}uoZzBKAmCsi +zu#2V!$OWf?1;I7JFc1Q(fxzMjFinU$^iMV$KO(a!F`j>A-SG;?WYogAz;Sq{FX}D? +z9LPnBIYJN!%wpi-aGW|A4@GETc9j29Oh^kNnOWw*U%h0H_x&~UBm#fx2Z_P%^o6cG +zc1I9+ocyn8;=jqqe`WdC`T#dPlk`8R=-@qT}a +zzz5@pVQxuyKeDbo!H?tx#Q6Al60w+_aMh^ZxL=L_yFfq+3HT3P{jD7`hWekg1i>I& +z)FChk2#--$2N7H}Fdz&ZiUGkPV5}xo6OPfuFje_lbr!D?~ +z7HL0qL&9#b0Z$e;dynQ_JpDd2(e|>_U4@+VM+OUdl^`LLJD}Kn&mxZEq{Vvo!={FD +z;Xsf&Z%lzL5069`d&_w;nN%@_2(I3KIlPrlj=CPk^P?{)b9=tJ^HJyK_?P=j!7l>t +zW8*j0N8=x>jfM^naElj8)EUl}cmQG9?q=Zqu#&m?^cS~7%H3^Y+>J{P?G|+2r)BQn +zTt$){Fsq77g|!Y`=eWE9GKdsTed^qn`B+uNS1i_PpHFqx%WC+5;WeeJ1}xM-I2SF2 +zyZ)V4kv&Ni&??Zcz2VFX@0+TVx=v^CK7!4)onxD$+tdh4YqtOfiM1lTY9?|ERksWU +zJNECscx|1w%u$QwM$-4u-?A(rQ*?D40aBdbic$LHM~x^rP+v>jDxT$r0kzQs1Bj(p +zg)Om}OI^7tV+&x%Gh!n%zf5jtR(4wtxxHT>>UN{;IwDu46b|rFeZ*O@%T4!sh~9O8 +zGx||SmKyB_{GwR4S!f?Z`+0%%*AMT3G!x@^O~wo1sfJ5jMZH|CVF^|`=w*-+0a5GT +zY{PFfCF=G$QtIO7XJFc{>|qLn;8LkGEx7PambLb9tn}C12>UbHb;H`+oQ@G(@W}~s +z!#b-`1Epo;bXZgviDmWNL*a*FVV&jy@9Rff+|UGgFjt+qpj!aLJzKRcx)5tv@G@$H +zKaPuq!HNd?D2Uvl)B;*YmpvoiL_YApJ8v|${1|wJHD{MmQ-iwoCOyH-64HgR&>fv= +zJb2BlImpQD=GqJoj&vr8#do|8z@RbCM#v(G-EI*|oLN+XkVtRpq?9q4o*jLU)X0M8 +zV9jCa5c?(!9>~%^%DBC|yO-N2UU&6)QSzl)uiEX}9yS&Ou}N8h?dH1Mnw-#9bEijQ +zHndk+N3GhpZeqUy23dXid++6a;8)4uO%y#dj`rZyKQbZ0xhk?!$nMpaZzPu{x#dP; +zli~UvEv|7+3?Rlfm+_e>=5oXj$8wmh&W6DQ;hsIT*L;c-Eq0xS;MlOtVL;G8mB}GR +zKXB7EqvK7&#$%=wmG%Zv7CxjrI=6srEc=>T9fFnz=d%Qb6Hwj5X~Fkls{^ +zfs3>Nbj8{_Uee_AArP6yBVdnGI!CQe!~-Gv;2v}~I)pXtxrqeiVzz!Q@PvTRGxN7x +zTf2M?7$~s$%HH3z!Np*!9ja}8$Qu^jnn9F!mR09c(eYp!+6xuB&MkZ~>SDD$n7tco +zcS@#|@N(A&&jxD^A8R8*#XREmBAbpd!T2(;*I-FWs*a!jqjzyhi+KJej;8n&9}ByFF9>DrOY7ZDfe@26GXd4L_D>@JfA); +z4-a;kKmdMIh3!j7?h?4PrOfi&kB;>br}ql +zQIRnUo0Y+|uU`-D>)&-h6t8?Q6ZvF0Dd$6tLDzACOh5^r{ZuadgIRvMbcfuEt;;6M +zVDP?32pi^Y_!2w7pvCUwV62j(P{%y08ss`0oGnf{ANGQcO=Pd3IF;kV+Tz0YdQPEh +ze^q|ZnruwlDV?~wyalOojf}6BZ2k4NhdQ@w>bC>DrsyxX5=G}@6SQNl36-&y_H)`) +zKw+V0ugiGx(a(}oHVU+=PiD_Z#uWzqV7YAa(j92|jtBj=T&!674Ch_zPw$=6t6 +z%LCE+#P_k)FG!jF&6AzduX4(f)RUD%t9DPYy$MbDk+J28eIo(tg^o@a=F{ILM`iSl +zk_YcXV=t7%{sY>mTm#N*Vs1Qe7tEvrOoZ8c+4#Mp;$S3v&HfK!^Qok +zi!e@&a4=ozeA9lj=dCePA@G!TuXmg`H^}SHyH>Y4QoYi*+SiYz_P5*54OqY3;9JkF +z1HD;wI;uXbwfJEwV0#4hT46Cmr!Qc%{>IXa1@0=BS0ks(+w@nwoI~10JVS{Cv&ODZ +zGYny)m)=}S%XGQ@$p;&2A{!YsXLa60^9YLdb5SOkMX;r)B7Nz-%Hz<`R~*}B24H3O +ziAMkIJ{i}56O~+xZtkjn{Q^t)=CTw0y44Gxr4R9XxURK3h0aa}E|9z*_8_{9w_0Rk +z*mONd21lrKHe0ICXP(wQIh`qWK42hi#;3_Yzq`-j4r#s1rh27%m;{hHBXAc*H=5r( +zC^#1nIgZO|Zyv9oq{#@03c^HnQ&)z*Mxk2rF7b<%_2n3^c1kdMmZRO*flBA7yyW** +z6CdN|uFX{ke8|MQ%JxtvPv_eOQbmeo&folAV;HZ|bh4=I)FqW^xy;eQk)Q?LhJZD_ +z)t-2jQl-_E>DZ5BurQ7@qb(xN2Vf+duy~`HC!3ghlUz!NNOJ^uoDDsH`5MOrDqoxc +zJ^udrvD;C>2emoR-3qPO$g6hc?Oc0UJ|;-2np=LLNst+P)f{}HWM<-t!(l!3`#BEg +zMOUsk_$DPjuwxWvY=2u_@83=wtNPXxAp6SqD50b{7#)?cC~lg`kP=Kx+H-oc+*|GL +z5jp#ewFMSC4NVi0xM28+>CTnz4^45sja*}rXA2)O&a9?droJxKm0cJtG$y3$#AYU` +zm458@zi1R*%y}M`d!3V)SbI>Vh|?(|Wq2~s$E&mN&5O~J^qiIw5duUfev+Y$bzAkt +zHJb`2U1&`u>@r%o6|J&L6SN>w){jAIO=g?;0v+O<&yw7)NJu_-;GXG3sOym^13KN7 +z{f;iYkTM}wHS~Rhvj<>mS`KnOeomrkPRPxOa=;e0@~%i)*0NmCXCvJ@kCMofM0q1V +z{JiDB?Y<`$<77CS!@EB4U`Lo$Epc924dzx%*D@GmAMui?f_1B;EJDX4jurBI*w6Lt +zmVQMYEG;dF3;s^S*~_N&d)~bO&wcjH!jwfRibIZLSv6k}*o`v_uInCCr#UZeW>`Il +z-$i|z^kHFNs2s{!p8z`5{86+GOdEPBne+CFG@9&Drris~K@t{30Ii}j;CH4#vu>eR +zoxr?ZIc8VRF +z9L$ZEzNTnHo^+DAfNn_CxF}|2yX@W4;GJ{RNkyRjbxr1wPU1f6h>6`faqey7EG-vb +zw~3@*yBonLl+N4ICiOZKhLiB+Ux~W)yxdQm_u&<=$=JmFWqy +zqvtZD{EktMap#ODq(GX`?j9mu_nT&)Hz2oIC(AtoT!^!0CU2Fp#%T2OCIOzz?zUh* +zRT~S;*?TFSXZ|*j6Ia)nn9=*~tmBmP=|W +z!Od&@$0%mP%7NyP%SH;hmz9%u--^kc3D0lZw{Us?j5T5Lu7u^mE!VvnIu8SepR1a2 +znklEWe=1Pd>OZ<|J$&n-+JS-(-HGX~8qIVa?Rk+fUkM;?Je9+1AH8-y!oB6Hvsrz1IR}`wS(GIc(|9$KcHe5{x!-O&oEB^8p;CfI +zrPnVgl-K)fmVSKZy;-@XqTqcjJClLVh{~#v6m7wPzL44nDG_LkN)QY#DO`U-$ARnmTvot#UJR&N4uDJ8- +zL5JtoP@y$l4!?s^k_O!VLe30FkpqRFL<3#3?QlID_j{FKUYkSeo}q5K(+!nW|1+PS +zzIX)F_Nn4jRy2F|f#?nD9(B0$EXCGHv{)rdMm=FIHN!I$Ef6KEwWX#c8`9DNyH;I$ +z>l`VkxLCor=hLx6Ry|`fa;65)cLH!(&#*t>1zd>R}!EFJmGMr@zG$B +z(?8xG$?IHr{;6PHI-qqqQ~1Q_GSF20NOV=bp}lIc#1WB=Okwroa()r(S00GXW?r|6 +z3JEqSkcgL%HG6C*_L*S(^1vH|_{aiU^h3?P#yOjwt#S+I^MN&KQ9m}RMZuB8(>3#z +zd7a;1N#r6DZmSCL+mGrR_!bzQq7&E#Mr?lEYCoh+u+iHpP`_3!Sr_nQ?dAM%UwdNV +zeKPk1-_Y~UCrxR*yl)a66BQ=8l|a(QNgkODMd;1y+&ZDuI7I7ZTYy+JUxzKjDB+Bq +zBu~z`kIyCCZ9cnh99+o=7IG(~u8-ri%ov!`x%DG8Tg}OAU?_HJUf+8yBjUx-#@f52 +zEc++HXgLm2|B17=gMKi|vI*k@kg5c);_^?ehn6OrlG0KU0VRAyT31sC%>v2zT#(IcHnSZGHae6rwjMk +zl+MzhJnzvm8A$KAs`24$-TCBK9unNLtKbx|XQ%cAl_uY^D?O^jTBrWlL{o0hi3i`< +zjk#SpuU3VBHhq=ZvcUmWc4)G2fp0uTxgv&c4>;u9!G=FB@h7}A-M?+De`2A^TLLe#!I!cM7HYOTjx9_;mX+tMyBtRXhvb54D&(Of098EMRq +zw1MpR-ZO<@FkhOI(bU|84#{G$O%Asu0Kl6Hp1rH26WcqDE`RToFDMUZQ;#pYe#Z`+ +z4(|+?3Fx@V355+3oeJ{wRW*_qm)n~j3a$%`t$$L}G@%YT7%4_Z6|uV>NH}77Yn#N@hjat)ip+-N~%&vB`)3}x54wf92}?9 +z_^$Ev=eiX0D}bgY>K=pP+A7LY>OqaAm5ra#wc|vC7Xkcz9`vJZ--@Fa@X;|6`whbO +za2`tke5y^=e75l(_5z>)xComHM|&nn)EsOB!V455(TGVT->vX+5wM=)Ju{y}(Hu(F +z0X--8%-dPEOh4d;UTuaWE4VGagcXa9rkEP~_etHX$-EU3&&@}7<|rZMHJhqXlNhVv +zY4L}>PC6$x(=UKO?j@~(5+a)ezrg`rFT;AL2WN_G#d!~;`a-oiXpI~p4JiBbfaF=W +z+9y!u6DE&~bo9F%OcW~Y+g$QIE)T8k{1I~}e_kfc4~ +zU2=-5aTvL3?;3SfcN4LErcU^)6Mk_f{QKjXt70g2y*O!05s##mQ>-W9_AaSg6L<9h +zjCA4bSiR(+G^HtHYyQ2(^dc=g*OrQgMro53msAlFYrBXhg5Aejw_Z~|Q=l2^?${7; +z>bA@F!tSnesWrM&B=gM%f8{Wiu*6rgYB%Ln_cpk&^FWcNp5T>hEJIh>B+OGj?@J!e +zN$H>L4@k~VqzmyJIp3L04lh;kJ1@C`if=wW` +zwv}K8YB>7Bf0+keYDTZQ0Ql_kjqgz(N66^$A>#3Aj&7Pzeaf>8zdY0nfK2?#G4xeo +zf3^hZ_MK1@&69JJhZzl*xA?b*v)23LB##TsMD}0l7@za~&`XdK{3d(Hm1MTKG!yfK +z%c8Ne$m!qO%88&gQeviy9c}$W8H}BhXx5?)0%*$}LJex%BYt +zT1_PlY*1A%sVrJuHaV2GO8_!qmimBwZd|tEY{TO2AbKaTW};}b^oY +z1lWj4(7OiTJ+(IA(LBd>XZ(TI<1SXMXNMO8r(efQntea6leIz?@a%35x9x;$rIiV7 +zEIlL|cNww(sdx5mB%+j_C2k$oF!|U#4}LA8F)q?fi|T|LdyO5_na}yb{ZwjjjcYxF +zZHgss;bg70GvoZxC;d^JHU;-#U5~!Qheh0f>@T3(9u4l)UXf$mug&HvY2cC!dp;KF +zh%-F7QEQQ*&V4SHC!5mTU5VXg1oZDowv>{q_=2W<&&IB*wJ+}|JgWpAgLU<7y0p!-lJBIAZJFg;$GIb>5i2; +hwD#}SKSI9$V4I$CYeB{gZteVKi88e|d0>PN{~v>}<#hl6 + +literal 16900 +zcmaicV|1Ng^k&Q(Hn!T>_Kj`Zc4OO48rwD-Gw*(Xv_UIGaL4*?7e3`t5-R2lSh^xqd84Cs4}W^FDQn9zijsF13M{zVR~<`0dB +z;hww3Rk_uLO*yyZ^N(arMN#SjFcHEi60E_fZug`IjtJ^LVtno=lKj+Jze{_WszRIN1X*HUTCH>C_wc;+D)6YYT +z*RWmTUi`Puu_Uwkj6-qwu_Ue*kO&$%=o%J?6*rej_Ock3znkGIb6 +zWm&yS2Z9LS7slFgUx+?ilDgQBdj7`ruw|IVzJ@wV{&tD)G@SPTMW@9Wl5lcsuU~6` +z7raw|%Or|@Pnlh`7!!rA1H$`p;zz}+92Tp2bFmKDAL`nrC>)<{qBHso +zvJ6|o^vMxL?frh4XZ`3WdH7s_NI0p@{EElbnX*!yp;Vtx&K&w$&to`sW +z79>enm;xWhu;ZKKIN}-h!eBKZM6j$9~*Q(SlE*i_bHS0o#tPY +z5-j+ww|x>h9%`RLUixM!e%f0qVAe5GH83X6?!#^_j-M@lO@*-aD%NMF2;Hg^Wgh@}elrPA3o_&(- +zeNyws4es~%;K1o+pfG(Z!G-nFWzl7)ejRNxY?M~uI=I&MYuz@4>GLH*ptjlQJ`LYr +z*KIIVzBhKHIDwe`X2hc@gsdjzXxX%b<_#kc$vIHFi2)-XM1=fs(`g?0)M{lcJXwp< +zBgIdDXM&n-=+_%;1a?sE$oeN{r%w=8tFfAlQopAk +z%wrVN=r>)oZ0w7^M~Xi~qp6lEaABgF(ck7V3Un;@cg|ODuD7@fw~OZ;^TQV +z$&4AiUj}-4;o`6JV$Y4C2G +z8hVweUdzl78hWzD|&J_)oRr2JdJP +zA&lca);^P(q@hQb9-kqNXVo9An7Q3NoAtyRQw-@JUDD$oluryjE +z3{zzbZhStP-K;xw@Yxf-B=4h(p=4f`k8p2DH$>qQLPR!szD!2|vJ}J`C6=EoRwG^+ +z;`ZDv1SGVO+?IqSxpxSM^_V~@2E+~dZQdl+oz;TP1MX+XXwugMy?Z5AoZ7#R33Y@T +zM)w4;9L0szO3>6i#4fV3q49@wu&`zcvQ!d8!m*dpn&7pp0Y=;QbiyOzhC7)Ki7tDt +zXaIqysWqx53ZgHlO)|YRDG**$7&F{0a8VEECY`3;yx)F>2;4Xr&gC;Iqiqx;orWkF +z8xk0Ty-mK&z`^~Fbs#S;;Qd@1ZFJh4R`+H>Wx$xgn>^oka;w9~QfR>rS7lYHG?D#o +z6Jo`Qg_-DP +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 +zw1mJ8tVoSO-(}absB6M8b$Zqe)Ok0$OkaA#I +z48@e8TAlv;PmB6dbP|{7<%qt@Ea>I;PRL4)=M`_G!A40Y$Xy1Mum)I0#!3<77H4)u +zI6c{)TUsy&o^*@2H9Bp>QJA#S8$`zN?+@z^IIQL|VxYEQfVw~Oc}Wq!FS`G2T=aDu +z-DMYe(1$x=331oN(i#yV%?Q)lcY`}FpGRp*74@@$fX%pE+dAGOh5QRhJ&mcaXOhk4 +zLi_pirw^Zws;d9n^#IE8T1ypZDX|crNABquU?iL2;Ql%4Vg5cNBt}OJdbLKnEi|`g2q%v70%eM&7 +z5gdFefu8Ix3n54MC +zW40SGT11ajrrm5AI24T?-2$|VMsU%VX}AMmt>Pr~B}#An{>%QG>_1FQYV^)CExzx2 +z&7E_9c!fpiCLci|F3H*eM2DQQRtQp4>V2RP=KX3ZVw#OXuFxj$VDmM&HQD{*dc7301976VQyI69%EFvxxn>qC&Lo-`%ImvM +zCv>AXKPcD26Z_;m`1pw)uF6Mp=RnShU^yM81!?jbl!v#-kSa#RLhSOG0?yp1YB6Jr +zW=GrO|0zIRSHiH?DYiO+$EpdMkwz#4I6V(J12-W0+dAo4J*?nDQrFI<*}a92Y%1bU +z`RC_4tyg7>R(8{ +zA8*g?PWv##WoF+p0bJe>whg#+(1_+A+)9HS$|n?k;(r=Le*vR;57rn)2& +zEkD8KBSZm#3Drt?t!*#s#>0+yUNysIKRg=t`KSOcSHieiUP0z8F_$tZ(ciPnq_o~@ +z%-{zhbs{i7 +zt~8q8%WO|MF(FE_ye*bl_-@NcA!S9$IMb6x0`e_oNF!hy5a)H^H)5)t(}ek4a1Nc~FF4@f;5aO%aB&3O%B8NuMWWCzYb`d> +zQ-&3)G|5M|pzcLy>pA(p=?3&XKn+v0^`HNsS?M0eb+60BxF|&Y{?>MI^x``)Vp}1V +z;<0N$BUc(0=p=y>zD3k_I~ +zMC>T|rn!T!wN%lqT@ +z&Afsj|04$m&CH2M?F|6yeqb+e`&JWTP^~~z(;c>5;z6RuFKe)%3j|YzeZB9c)5E08 +zvX9?L9%?PT7Vu(RAIXR}s*=I*@Qp<*vA{&7B2uwdBH$_I`33U5di9weG|3 +zx-Iy`1L`R>G-q<+w-{f5qc<7ls}^cT4Y^Qi+meHXFIDgqkt0wpdBZGY?LB+q9&o`T +zd18L5%R+44Ml^UNbEw58BXP#{+I#J1$;VGO`#6Grd<=RWgP+T+ktE6H^>C;%(}szj +zK;wt^oW!yG4Fz=zm4zKw@$Wdo`VJm=879kp$F&$uMP_qiKSB4L@SV)g55F9Rb=3ocrK>iqIRR9n!X0Do*Ldi{9M&^sg&T_TZz~>`tbXc$p%%BI% +z#MahUA?U0t#2ZA4_41*w&52#TXU^_G4)$#uGOnpIb{Gs?Bge_xP|beH;cUSBec^gk +zu;a`And#3j5LZ)LALL9lQ0{$A?tzx&K6M(;#M))7n&`7KTkT>KvjI7O4?mTa;X`81yn7WAir6 +z^Dv#2{~#3{X=5gyP*2v`3yoLJl)--n2rC2}*3n8(L~4ohHzT6QbyEu{!K3q#&p9Lp +z?3#RrZR0JWoh5V%Au%m2?uSB&RO!i99khjDd#7P;NaxJ<_f>mYXQOtXqBZifoWn1d5WC&hmG;&Gv(>!l)|)selJ-m-pz9Og@*rA +z%Xl~n+gHI_Rjy513U_dEaq-~ZLm%H7RpVbREoW=Zu*D?n%JFyy6(v}{RCOy +z>_wu--o5bv-4rRuWG0oN3a2+(f)C6nR0%>9HdI1mB`d{jE6Q4vSf>>{@~N-bGMc6~ +zn=1MB2?XIjZuOC!s@-pN5{60UUw-L4f1L-3Ohud?4)I$4Y&#w^A*ij(1$$3|Vskv} +z#YKCOBnHKh5QN8fd|k)wI{^HZj_1!`{L&>R(m@P^tYk*J)5>eCrio9{j>kWLDCGrM +z*O<)utCbjQiH>aHzD!~>SNyzV|B?uyizaR*!v`(g6N5ks=aSqWHk#wzbQOx2Ehc(>s +zfl`oSK+EzLOKDeK?n#pu;5qF1g-8bXyN##%K`x2R14CxOh8w&P-kz4U}>3Q=A& +zwAa>sCXe?|fR^Y+S9_jW;=!_GK`1Bc2HY6Y)*s}A##+#}239~LV&Q~wL&4n_6^@vW +z;nGUYJ$5-C#kJr2EtD&Ty$t-H)#GyT->}39LWB1gdo%LwqR8{YbRBL*-FCEc5iY{; +z#TpZ~y8yolNKuWi&enqz%<*)Y)j#ff)9q1ezkI|N7|zr3b=T|b>+m?)d% +zKJ;1@L~w8ZQn0MxZS*{ew-;Ohn^Jl!+U{m|QvgB~tai**t#d>0E=CMjN*SZ+36QnO +z4NrSN!Cd>9SLf?=!Hjh+ek}c}ND_U`vvi9(MS>7nGZ*lPm%4(7(bhfuTHod8y%;N{YO_KMV}N<7D)x5snD;XG +zzCOH#WK2$4mAvQWFCCZW#F8TRInJ+=$6eR`V~dES6+!6-=6lkVCHyCW^Bb-$@=b%3 +zi%hxQwAp^EOp|zR61~UikJsM89qE@P3@X5J>+K)hO6K`Z$80UqhLV&|mVt3wQ#G4H +zi4>T}s*jr9pkN+B@=LbuMW8^kzEFQde*yOdnXiUws9u#OD8dYzm?0F`qCm7pBCNNz +zOJB@PR!5?2&9Zw_Jg~i=TwmStKiYq1_@$ +zZKB*^u}y2o({7rV#Nl+8$2T5 +zthMF3X`+*;4Q-~&-*4NzrU=7>#}h=jB}<^tsAch7Ac~Vq;V7 +ziknpCHOP}_P8F&VE%6e`WG~EVa?$ra`knKZrYWbIZ_w@4vO+{B!(Pb&!YhY8pCfe= +zjxF8x>Zh3;#gw`fu})grVJcf=Ohg_Xc9m?(57$!NXQ#N%;Q{V}EjtmA$m<@Ie2(h2j9T2Xq=0<2R#daW&$ +z85=lCIqjn+?h$SF4u|?#DOOKg9>2c{9GSdlh{<(WR;Mb+bxH>u95roevUiqSmcdG* +zEL`{Qv+mA#hjLxuC*l?ROBgDsPYkDNU%;m09$2^ni=SVA=kS_) +z_h->URCbhQr89T-a-Gg9Dk?P`CT8-=f%@A28AYMmma&Ks#DNDsr^|eI%nHBQ0Nps* +z<{@u^G-9krSD|^{Vm?_nRkW_T!;E*n95To#4sxn;9FH2W%&T043S^Vg_Bk^^&J9*H +z=-^Zd6GYUG(CMkA?hy<&4Tc5fn4$3ys+ZiGw!07qHH1zPDzAJY;{8Oj#B1-LTAZ>D +zKqX)c%j0#o|H%z2zdkxYKaV6<&nEMgP`q%2&v+2dsa++rFeWoOnf$VkCAY6|8|kw{ +zdwe(maC?oeGlx#HVClH?)W&QZ`+=l3PIeQ%9cb~nWxJ9)YD|MPt`v?0-3bMcbZ<2Z +zG7xSnH{QoOr#C@?R{C$168|JMfCxcPAVuEhewgQpYO@AfbP3Fw+|Vi7h~L@$6ydj5 +zyf7_h9Rp$0Gii0mkT9xddqw>hIVCXV203~$D~swIj_)TV=zX)@-tK6Hb66mM;EywH +zsMV;{!i^8fvae3b)iz7_f6$4yU2i-b%Bh|o@eU2$RD^G(AtWlyl0^8dxd<9 +zCi_xU0%&wFugtmc%-uOk=xMY?lR%{7BQRZ~b8}1<=DQI)v2*#3|70VNVV*?SK4O}0 +z-HEICfCoyTwy@{F=Ac>4KISQEgQLDcj|>j}hzn(*RSn +zZw&u6!^Z2~7ae&u`+{IHYm_vxJJ@RRZ!LoCjQ2ecK6E;AqeyJZxfuAC +zaFBgBIQO4DawgA~vN)BCS%`;S38kn@9kWOTMq)$V$+z&4nDQvH*{(1#N58$C)v2#; +zJW|ch#FaXRBNNj6mX)HNV{_ScADWB7#Jn(Th}B15lvrI|-2fj-=SL1AY +zQrI&y#`tyxRIyenc$G7)m}|d;5&h;8q8?ap1~7v{vEXIAhojO|^XI$6=K!f+>;5yx +zJJXiq*Z?mW;Ak{?4<=)9$$a@6Q*=1_%}Nx&bGA3oqS%{I)k3y{#DALAzrPw)h(FU +zj}8a8Xte($dBpT +z_ZLeg50aO#zhmy?M*+dS#c4NyP>CZSyS+OOi>@2;)lr;&A$)(OEO;kV+bz6O57by +zyW>9>Ij2^Du|A83(r~$46%S7?Ancv(6R +zJK?TL+k$9p$KMJgY}hdrTzyS}0it==hvU?8YM**7M}l@-W{&s26~NM6 +z#U8(RCX-=6Lw%{$D&=aKSfE%aJ<__RASP1DaZcJPva<-yi3NH#t$OuNk6wlp&CD~1 +zanJ|7AhF;l{a^)Qhr_9Bo;2ZG8=}0whx#r7zZ6W`Fs5 +zJEbvhZVJVsORu$w4Y1HyT1E4?Vka&kS*mSpBuKM>OAT~3W;g7KLGzfQWF~QJ1)H6S +zFCOXwP_auqzKSygLBPB}EH;Q1gXb@Wm*lZWfM<8NWGZM_*$8Ze)0+^IpqCyco5T+P +z>!edzc-RMsx%H6~4%a*u{&6!V2Xf)f8oOKEEtBAhvI#TkSv+Ago-TMSQ(2q}=S0FP +zL(1v}1vp6Ya1@zfO!}Dq3ke|~@mmFXu2dHEQWpO$6X$;c8V@V*w>NACSkmSKF-THX +zXc85Wu2(uhx0b@}vaeA-YhO(oJ!8ZlugSxzOn{tnI7h@dCB`UVE~EEY_ww_|qDlb| +zQh0>qvDy{uar91x0J$!N&ch{3*B*?y730`NAZJT0IXU?T1Oo1Zc+QnB&!+ZYLh%_v +zV;)6DQs1sEzvoxu0r{lou-yG%CgwotYzFK>vqr!e>KRehvaz@y)fTge`_wgV2*|2H +zVl|vbxEx$3ymn~uGqN65%FYqJ<_)*Uqs49;KY2h*(Xa?Tk7AFfl-xf>irJoUyL*;0 +z19&1GQV*5Ni~#kTnaq0ymCiLjk_=0q&=&|cG{r57n*6NwV6zJl5K*ED&DsZy8iEL_rr +zgsLXr6cN9-S7dCo0TeKI3ByoGNNBIG{4b4m4=LB^FstU0B?!6TBZ1v~zn%e*Xk=B) +z@_rySE6iHcIxSfbe^sRAkjZKFfR!7A5uNa|Q%HSV{);)`X_I$=Rz#g9)RV +zjIuDE+A6IDHt@Noy^%sCnU|?kL3tCMU12QN7688MFeYr;%^{CT)BqX<4rY8gFNo(^2<+x6~@> +z0Y;8%xJK3sk3si!JoTyNPRqf>i>%mkw_b{g-~}-aAljQww_S1L53kdn=uMDZM5$#ndk +z&22o*u=b&^trc3UMGkzzrL*~$;t?gd{w8WCC+z$)6{fY`v4CL%;?|JZtR3}&oLz8* +zT?G#HsX)xAYvWho@h=pJpzsjcWp0%LD4s08onG)Nb4)MY=8K^XfVvcKVvP||0{idF +zr>Wx=dX&);ID@-|u5Y#BAa0c8rW_t)Xfo4c@By|jKCCPsr7DjJ6t;eTIrmF;CpM`~(ysWB=S@seY-cC;IYp7eGp3%$l} +z)oc?3jDrN<0qs>+yfj#>o^%eHp8`K^wUK{qUM_Xl#K;;VHK+>&$DqLQV1~BoxLuBrt&0}DAhEKn_^ER` +zz-29QNvC|8F%an87xNYKcn*LCu89T8nVkc&?~&O83)5GbY)slt*#=)i7s;A_C=2r7N7+fk`X1KngTDCyUEafq@X5m_z1=DeiD@Q38P{+Ou8AdwgrjC5 +zajlbj!7Ae^jZ~9GGnmvF%|dV*Siz7~1$lG}zFHP5%BV8TD09lQN!w79WRZ;`=PM(z +z0;YT`0PcRb5SM~SQ_OKjwTc~?W_G_IPe||U$;Um2U%fe+7X>%Nvy!xcXUbbT1miw0 +z=$X7_W&m0ay!h~`ae>C68mu@al*ia7R0saqO=sn$tE@ww372nWLhU^>%{WE>Eoln8 +zaeH(5Zly+xlW1Z@B{Z2HqS52V*oh`BC}k&quf19RS}N6$l#0qGWzl9DQkZ@85(#UMH4E) +z!&hPrOmR$HRF*}2C{e3A#U3h9d)gN68^|>O9=TO4Ga~u#5kl0}_*QP9IxEl~Ce;Vj +zS3zvyQ+p-TKYiV8z>J$akDBH=i$W7}&)8|aN%_17$7$H|;eKWRKgAtrMwoyE;#kJp +z>iJ{R+d4p$2q2;Y5EBQ7>@E&mk*MzVW>!EDsQ9Pd1Icl|=0d^U2HU!hP6MLe0bwp2 +zA=U!|OQM?{{^8dU?o^&w|I~Y5fw~zw)IT&*mzBRUy1Ljo^-=Z`fvN|N_JgxG~k*Hc%03VftQZkoi*AD{-11-bt2%}_=-R;7ZY`jOzsFyAEWb! +zVJNLPL#@4|8iv-c@m4Lu!^Uc7?VOsDWty>@T6^QN67|~9P?w&boWVpR2)d)gI@s*$ +zT0uPct)H#x^_Y(_q2El&g2<(pF8niAzCde(;c)XAp3awn@Z)3{qMO$l1?#O_cXL+a +zB+yS96Q;w{xIBw9%-h2xp$%a(D0`Noi$$31BbukCM_lu$4sG_+rWsH9U`eD0eY3t3 +z@`vkyB5OW$_NhyNPE(&_JPvYO1XVd%SiaJPVza|ZguGogD*p`OzJ!Odk4wR7o=G7; +zQFEN*_9WQcO`Vliy5G@VCnZ;Qb~fJ44e1$o^Tw=L_lA;Z-8Dw0CC}X_m5Q_J*xP61 +z2tVQGAnU9PA@k;{9QL{c=-~c_joC`W*8qxTI)7}foE-)SU;g6SD;S1P5oGCta0DrC +zGXz?khB$Fn{Ycwuk%t&RTyJ!Mz8mnC0U+AYu}PkaA-t-gE*25%;RVKNKyWz!scpu6 +zZDKFBX5S4#lCQK!Ip%UxMsP%cC4T!8d`;mo#M{(B)h;Ilk3UVA`-O^+JuQDuUnt-K +z=jEH2NuzvVs7mGT0rJ;Nz54;;pVk-{O`o<8h5~yAG9cx)%sJ+#d0-B8j!9{+{>1@9 +zYiz-m^g@6wE8^*umZD0JhIN!|&Ok-?2XhJ@B|oI&FfS^$rs90JhlZBoJW`e5b9j^- +zWO>uD9oB-o4QKEBn$akVeT1MeUX-s%#m~lPXZR!_h7SU~%Y_rx{QlrO`$o+{oUb!PIS+x5N +z+{O+YLa6?IE1#&A?RMZ&J}!O!vj>Os^y>J_BMi^Cu8;>FP)!5eagStg`4k8`f<9)s +zLv>uniXJHc5tD}2a*xO+UycHT8lGykAS#tq7H&?$Q|yXO#aH{77;M;}%#Rn*u_i#Q#=kFoCjB +zxM)O)sW@_wx=K{lJ|iyESH0iv9Nr111eP3eEA!SenTb%U12{RS*7qj0=;%^Kd#QiJ +ziYTEU=jFY{zWsSqmqmw<7L@5T1o7NxWhht`9gu$(b|QZnjVAE)D;lyC=>~hv=8piE3T9#-QVKCSaq-q&xr*zuRbfKtru+;Kkp5Si5+<6{tz}rp +zigZWmiiYYR#xdxCbhhJz=wN$k9zPcR8H;AJErv2><3*Bm51h&CEJlpT9yo5`1`w{pnaAJ%0k=ISmg0E +zo$J6^H1-w0!^WV5w|yx36dtal`WN}DGpD-gqYjDTfjIaLtR}xxCDSo6v=}KHRM^9@ +z&T;nw5x5ee(K3%Z3QQF%sMId_cIRpr&3g$f><9ZoX7X_c7g4f{y)mf(?;`TLI@jLv +z?N)ryzDJ)LsBZU+VnRH0X1E}KJ!}%#n_-hEY9w +z`8(=7Fd9^wGY;{_ggJK@ZR?yW!1!^^d;F^x%}=DG(7K8XMm$L~K*Np|t>vZmA5%Y| +zINrWxnZFq_J7&ksTGEluekfNRCX$8u^xk+?w8Q1iII^7LA8Wc=uh=>E34C14fN(+~ +zjb&LKSzG|ur8^cG=n*d|U)DK;5`-D7c>o{;1qb8{cYdL5^ll*Y29ag^ZWs(}{Dq?& +z7Vt6fu%BVSoqvD;RYW!I!KS^e-kCz_2@FvAByt<`2mpvxlE{aWp)% +z7->KZs4&!M+Z9|_;(QrbPRGNC2zLU&;bq*v@zaDlNR7 +zR!OB(0w7?XvMI3w1tc_A&fY$=RO&K>9q)K{?KeL9#X2nl`k!ouFF)XFC@Tui*%L4~ +zwNvTu3}=K5TH;uDS!^k3d+!l_hx$f?(hkYU(6NBYx@mz*Y6dZ7D@JF^5^p{aiT5zv +z;Xjc--#|sw407DGZz<4^FBXBq5F)zwTQ|65$~FTfyft2wOiY&QG(ydKoz#wa?YKny +z)9C@EX0c#XN}}K5dNFdMNo^+Os>0sS^c;E5Ky4zm)q;>J{J+z3sdUj)7tN@@gZSf7 +zJ|wiD$oI`e{Xe-gDV9P_(x}i7AaPVJn&m~NMi(84-RGbXy6@{lY?h66ze7!6Ee=i! +zInre-6PCHrI9+8v4+)Zge*esLVEy0*)t)o|)801Zf98hgQ=EZH2bpZ=)5NN_2yjw# +zP8Ewr(5WN{8DJpt*e!|G(gvZ5Pxywag$Agdns%%4+IH>|FMw9b +zKb<-v)*Cb*Ao~hb;B*`Ee&trZYBi`{$ru%gmKbuXcPNb3lD3H3Jimki7;BEFp{bxX +zFJ7Rk<~$d5(AGs1%w=$DDrj&3=?C4wX`U{m8^^=Z8R3YTB_A>ZAOkmldWl +zwo0ZyTNCB`dfUZA+chm*()HWtA2!JQ3>g${8%Vr% +zasf==&095e)fG}M%iIsk{PaQ>2|D59ppz^2pExvb9Ou9EI^`kN!0aXr*u3p0ex0b4 +z=AnHH#@v>`#o*LjN-yB0^^l)H2Nm=yD3|>1aNigv$f`s680kxF8B%d>SUG)YF0R~W +z$TI5rvll2~&q4RSwu3})*@1!~z4l}@NsY#MwV(2Y=hbLZh-ce*Eq3<#rZ +zxra}au9h@`-JaCDeW|)St?N40z`g~4rjZ?xu=?#W;cJyHNPXCV2DuxD%N1A2hAlFH +zwTJm(6XPn#dA&{dq>&yd{5Lp=pa<%$*em=~TdQ%rn_v#5`>I!IS>M^uNpl#N|wC@HMBcRTMT#SL;d7 +z<(&BuA6dLkkx|8fWw@PXzCeCBgDx@HJs@)L+j8y~gZ)7)${p-|O7{G? +z&|M6FI|A*^d_U+Of-3`+w(c~-YsQby|NH)g|G7xv|Nek^|Jex)g~z+)I0xPC0460S +LFIp>X81%mY^Bg|U + diff --git a/patches/server/0006-Plazma-Configurations.patch b/patches/server/0007-Plazma-Configurations.patch similarity index 94% rename from patches/server/0006-Plazma-Configurations.patch rename to patches/server/0007-Plazma-Configurations.patch index 1ccac76..a5d101e 100644 --- a/patches/server/0006-Plazma-Configurations.patch +++ b/patches/server/0007-Plazma-Configurations.patch @@ -4,20 +4,8 @@ Date: Fri, 3 Nov 2023 00:11:50 +0900 Subject: [PATCH] Plazma Configurations -diff --git a/build.gradle.kts b/build.gradle.kts -index 533418d3514fce41bab403c3ba2db21e96ac134e..3995afe1bf7f9b710e40cebce0d5d7b85ce9e258 100644 ---- a/build.gradle.kts -+++ b/build.gradle.kts -@@ -20,6 +20,7 @@ dependencies { - implementation(common.asm.commons) - implementation(common.log4j.iostreams) - implementation(common.commons.lang2) -+ implementation(common.adventure.serializer.ansi) - implementation(server.velocity) { isTransitive = false } - implementation(server.simpleyaml) { - exclude(group="org.yaml", module="snakeyaml") diff --git a/src/main/java/io/papermc/paper/configuration/Configurations.java b/src/main/java/io/papermc/paper/configuration/Configurations.java -index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7766ad6ca 100644 +index 62b602450a53cfebf08f839b505d0e965aff6e20..cda3636a1ff914c7177e95a8f813e9f4dd27a2c5 100644 --- a/src/main/java/io/papermc/paper/configuration/Configurations.java +++ b/src/main/java/io/papermc/paper/configuration/Configurations.java @@ -39,28 +39,95 @@ public abstract class Configurations { @@ -178,7 +166,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 } private void trySaveFileNode(YamlConfigurationLoader loader, ConfigurationNode node, String filename) throws ConfigurateException { -@@ -124,7 +195,7 @@ public abstract class Configurations { +@@ -125,7 +196,7 @@ public abstract class Configurations { } protected G initializeGlobalConfiguration(final CheckedFunction creator) throws ConfigurateException { @@ -187,7 +175,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 final YamlConfigurationLoader loader = this.createGlobalLoaderBuilder() .defaultOptions(this.applyObjectMapperFactory(this.createGlobalObjectMapperFactoryBuilder().build())) .path(configFile) -@@ -155,6 +226,13 @@ public abstract class Configurations { +@@ -156,6 +227,13 @@ public abstract class Configurations { } protected void applyGlobalConfigTransformations(final ConfigurationNode node) throws ConfigurateException { @@ -201,7 +189,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 } @MustBeInvokedByOverriders -@@ -162,6 +240,7 @@ public abstract class Configurations { +@@ -163,6 +241,7 @@ public abstract class Configurations { return ContextMap.builder() .put(WORLD_NAME, WORLD_DEFAULTS) .put(WORLD_KEY, WORLD_DEFAULTS_KEY) @@ -209,7 +197,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 .put(REGISTRY_ACCESS, registryAccess); } -@@ -169,7 +248,7 @@ public abstract class Configurations { +@@ -170,7 +249,7 @@ public abstract class Configurations { final ContextMap contextMap = this.createDefaultContextMap(registryAccess) .put(FIRST_DEFAULT) .build(); @@ -218,7 +206,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 final DefaultWorldLoader result = this.createDefaultWorldLoader(false, contextMap, configFile); final YamlConfigurationLoader loader = result.loader(); final ConfigurationNode node = loader.load(); -@@ -179,8 +258,8 @@ public abstract class Configurations { +@@ -180,8 +259,8 @@ public abstract class Configurations { this.verifyWorldConfigVersion(contextMap, node); } this.applyWorldConfigTransformations(contextMap, node, null); @@ -229,7 +217,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 this.trySaveFileNode(loader, node, configFile.toString()); } -@@ -201,31 +280,42 @@ public abstract class Configurations { +@@ -202,31 +281,42 @@ public abstract class Configurations { private record DefaultWorldLoader(YamlConfigurationLoader loader, boolean isNewFile) { } @@ -279,7 +267,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 Files.createFile(worldConfigFile); // create empty file as template newFile = true; } -@@ -269,6 +359,13 @@ public abstract class Configurations { +@@ -270,6 +360,13 @@ public abstract class Configurations { } protected void applyWorldConfigTransformations(final ContextMap contextMap, final ConfigurationNode node, final @Nullable ConfigurationNode defaultsNode) throws ConfigurateException { @@ -293,7 +281,7 @@ index f5d725feb6d32f947eed82073c5594e205f31afe..71be8c8e5bb887a68e9ae5ab822313d7 } protected void applyDefaultsAwareWorldConfigTransformations(final ContextMap contextMap, final ConfigurationNode worldNode, final ConfigurationNode defaultsNode) throws ConfigurateException { -@@ -281,7 +378,7 @@ public abstract class Configurations { +@@ -282,7 +379,7 @@ public abstract class Configurations { } public Path getWorldConfigFile(ServerLevel level) { @@ -517,10 +505,10 @@ index 83a726bcf8b7dce73a361b0d79dbd63a0afc7a12..3c893e5da90f7fcf519f190e34e2b15e + } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2b015360df398ad8118f7b108cb9474edf373121..690423f4159ddff2d90d7ccf931db72903cb822c 100644 +index 468cb5034f7648e6ef39b1961298f592535aad88..79ee153cd3c7bd3b2f34e7d30f70be5080cfa3c6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -314,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop -Date: Fri, 3 May 2024 19:50:32 +0900 -Subject: [PATCH] Warn on startup - - -diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 0fb3eeab083a0b1e9b495bd2c5c556fca2236c22..ce7782dd216922ad536bb435034255508271bfa4 100644 ---- a/src/main/java/net/minecraft/server/Main.java -+++ b/src/main/java/net/minecraft/server/Main.java -@@ -127,6 +127,18 @@ public class Main { - \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m - """); - // Plazma end -+ // Plazma start - Warn on startup -+ if (!org.plazmamc.plazma.Options.NO_WARN) { -+ LOGGER.warn("Warning! " + org.bukkit.craftbukkit.util.Versioning.BRANDING + " may cause unexpected problems, so be sure to test it thoroughly before using it on a public server."); -+ if (org.bukkit.craftbukkit.util.Versioning.DEVELOPMENT) { -+ LOGGER.error("*********************** CAUTION ***********************"); -+ LOGGER.error("This version is a development version of " + org.bukkit.craftbukkit.util.Versioning.BRANDING + "."); -+ LOGGER.error("Nobody knows what kind of problem you're going to have, and there's always the possibility of unexpected problems."); -+ LOGGER.error("Never use this version on a public server, and after you've tested it enough before using it!"); -+ LOGGER.error("*******************************************************"); -+ } -+ } -+ // Plazma end - - Path path = (Path) optionset.valueOf("pidFile"); // CraftBukkit - -diff --git a/src/main/java/org/plazmamc/plazma/Options.java b/src/main/java/org/plazmamc/plazma/Options.java -index 5942d0997f07bd51d934dac32cd349792a10643e..b02a0dddd99df1691c125660828a61cc4a5a4d02 100644 ---- a/src/main/java/org/plazmamc/plazma/Options.java -+++ b/src/main/java/org/plazmamc/plazma/Options.java -@@ -5,5 +5,6 @@ import static java.lang.Boolean.getBoolean; - public interface Options { - - boolean NO_OPTIMIZE = getBoolean("Plazma.disableConfigOptimization"); -+ boolean NO_WARN = getBoolean("Plazma.iKnowWhatIAmDoing"); - - } diff --git a/patches/server/0009-Development-Build.patch b/patches/server/0009-Development-Build.patch deleted file mode 100644 index cd648ed..0000000 --- a/patches/server/0009-Development-Build.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Tue, 7 May 2024 22:42:25 +0900 -Subject: [PATCH] Development Build - - -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 317ac7c5f1c2d542be260f7e86f9a7281506ebe0..2612df0680800e8c4644599b1885230778c812b7 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -18,7 +18,7 @@ public final class Versioning { - public static final String DOWNLOAD = "https://plazmamc.org/downloads"; - public static final String DOCUMENT = "https://docs.plazmamc.org/plazma/administration/getting-started"; - public static final String STEP_UP = "https://docs.plazmamc.org/plazma/administration/getting-started/next-step"; -- public static final boolean DEVELOPMENT = false; -+ public static final boolean DEVELOPMENT = true; // Plazma - Development build - static { - InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.plazmamc.plazma/plazma-api/pom.properties"); - Properties properties = new Properties(); diff --git a/patches/server/0009-Warn-on-startup.patch b/patches/server/0009-Warn-on-startup.patch new file mode 100644 index 0000000..527d2b6 --- /dev/null +++ b/patches/server/0009-Warn-on-startup.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Fri, 3 May 2024 19:50:32 +0900 +Subject: [PATCH] Warn on startup + + +diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java +index 4911a6d25d12eb9d2b263aeb9b7f521ff828397a..ab19474f251e1cca9455559db15023a6254c3524 100644 +--- a/src/main/java/net/minecraft/server/Main.java ++++ b/src/main/java/net/minecraft/server/Main.java +@@ -112,6 +112,18 @@ public class Main { + if (io.papermc.paper.ServerBrandConstants.ASCII_LOGO != null) + System.out.println(io.papermc.paper.ServerBrandConstants.ASCII_LOGO); + // Plazma end - Fork-friendly Rebranding ++ // Plazma start - Warn on startup ++ if (!org.plazmamc.plazma.Options.NO_WARN) { ++ LOGGER.warn("Warning! " + io.papermc.paper.ServerBuildInfo.buildInfo().brandName() + " may cause unexpected problems, so be sure to test it thoroughly before using it on a public server."); ++ if (io.papermc.paper.ServerBuildInfo.buildInfo().asString().contains("DEV")) { ++ LOGGER.error("*********************** CAUTION ***********************"); ++ LOGGER.error("This version is a development version of " + io.papermc.paper.ServerBuildInfo.buildInfo().brandName() + "."); ++ LOGGER.error("Nobody knows what kind of problem you're going to have, and there's always the possibility of unexpected problems."); ++ LOGGER.error("Never use this version on a public server, and after you've tested it enough before using it!"); ++ LOGGER.error("*******************************************************"); ++ } ++ } ++ // Plazma end + + Path path = (Path) optionset.valueOf("pidFile"); // CraftBukkit + +diff --git a/src/main/java/org/plazmamc/plazma/Options.java b/src/main/java/org/plazmamc/plazma/Options.java +index 5942d0997f07bd51d934dac32cd349792a10643e..b02a0dddd99df1691c125660828a61cc4a5a4d02 100644 +--- a/src/main/java/org/plazmamc/plazma/Options.java ++++ b/src/main/java/org/plazmamc/plazma/Options.java +@@ -5,5 +5,6 @@ import static java.lang.Boolean.getBoolean; + public interface Options { + + boolean NO_OPTIMIZE = getBoolean("Plazma.disableConfigOptimization"); ++ boolean NO_WARN = getBoolean("Plazma.iKnowWhatIAmDoing"); + + } diff --git a/patches/server/0010-Port-SparklyPaper-patches.patch b/patches/server/0010-Port-SparklyPaper-patches.patch index 75835c1..5326e0e 100644 --- a/patches/server/0010-Port-SparklyPaper-patches.patch +++ b/patches/server/0010-Port-SparklyPaper-patches.patch @@ -137,10 +137,10 @@ index f164256d59b761264876ca0c85f812d101bfd5de..deaeb134c47da8710afa747bf980bd00 final TrackedChunk chunk = this.byChunk.get(CoordinateUtils.getChunkKey(chunkX, chunkZ)); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 690423f4159ddff2d90d7ccf931db72903cb822c..c9a5c3b915f09a316f0f2725c51b696da111ccd3 100644 +index 79ee153cd3c7bd3b2f34e7d30f70be5080cfa3c6..2452dae1e55165bd8c49c4670e3f2adb523de5da 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -324,6 +324,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); -@@ -1745,17 +1746,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop(); // Paper - Fix MC-117075; use removeAll toRemove.add(null); // Paper - Fix MC-117075 for (tileTickPosition = 0; tileTickPosition < this.blockEntityTickers.size(); tileTickPosition++) { // Paper - Disable tick limiters -@@ -1359,14 +1361,28 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1350,14 +1352,28 @@ public abstract class Level implements LevelAccessor, AutoCloseable { tilesThisCycle--; toRemove.add(tickingblockentity); // Paper - Fix MC-117075; use removeAll // Spigot end @@ -836,7 +836,7 @@ index 0000000000000000000000000000000000000000..f8c26e26025d7a7b5489ed5b3274ba73 + +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 2c9726d0f2dec1136a2f45768e8f8169ce165a1d..4f199eea0c8a05f94e8443917c5a6f2c42f0b25e 100644 +index 241340a6d66f17f2a31fb03ff0dfab121b856368..a6cf73d104e66971a61ac979d4a6d58a97478613 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -976,7 +976,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0011-Always-agree-EULA-on-development-mode.patch b/patches/server/0011-Always-agree-EULA-on-development-mode.patch index 5edf500..dbf22f2 100644 --- a/patches/server/0011-Always-agree-EULA-on-development-mode.patch +++ b/patches/server/0011-Always-agree-EULA-on-development-mode.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Always agree EULA on development mode diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index ce7782dd216922ad536bb435034255508271bfa4..c464e8440e854bd0d68042fdb9937fcfa8b77485 100644 +index ab19474f251e1cca9455559db15023a6254c3524..77af8360e51fde5094bb45eb2a9820fb85de15f2 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -193,6 +193,7 @@ public class Main { +@@ -178,6 +178,7 @@ public class Main { // Spigot Start boolean eulaAgreed = Boolean.getBoolean( "com.mojang.eula.agree" ); diff --git a/patches/server/0013-Optimize-default-configurations.patch b/patches/server/0013-Optimize-default-configurations.patch index 9964be5..f4e365c 100644 --- a/patches/server/0013-Optimize-default-configurations.patch +++ b/patches/server/0013-Optimize-default-configurations.patch @@ -337,10 +337,10 @@ index 24763d3d270c29c95e0b3e85111145234f660a62..80ddc627e02e3c749e6b074afa93d357 } diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index c464e8440e854bd0d68042fdb9937fcfa8b77485..d2215f5293c568b4ae525f4a63996bac6edf787b 100644 +index 77af8360e51fde5094bb45eb2a9820fb85de15f2..699cbd3468c4123ff07251157d0fb6368078b6ca 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -178,7 +178,7 @@ public class Main { +@@ -163,7 +163,7 @@ public class Main { File configFile = (File) optionset.valueOf("bukkit-settings"); YamlConfiguration configuration = YamlConfiguration.loadConfiguration(configFile); configuration.options().copyDefaults(true); @@ -350,7 +350,7 @@ index c464e8440e854bd0d68042fdb9937fcfa8b77485..d2215f5293c568b4ae525f4a63996bac 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 55e16ed1151c5d53f492581f66a3406ac418b653..9af7df196ed74a48a6b6426df36353f92fb7728d 100644 +index 09aa0c9ec7d66ff82167c035481e5fcccf8618de..3ed078e33a99e4cc7b536ab6590ef939ac2966db 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 tickables = Lists.newArrayList(); @@ -120,7 +120,7 @@ index c9a5c3b915f09a316f0f2725c51b696da111ccd3..983caa80431f5672cca341e91d9ccc40 private ServerConnectionListener connection; public final ChunkProgressListenerFactory progressListenerFactory; @Nullable -@@ -2607,10 +2607,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { -@@ -2880,12 +2883,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resultConsumer, Consumer dumpConsumer) { - /*this.onMetricsRecordingStopped = (methodprofilerresults) -> { // Purpur -+ this.onMetricsRecordingStopped = (methodprofilerresults) -> { // Purpur // Plazma - IDE problem ++ this.onMetricsRecordingStopped = (methodprofilerresults) -> { // Purpur // Plazma - Parsing problem this.stopRecordingMetrics(); resultConsumer.accept(methodprofilerresults); }; this.onMetricsRecordingFinished = dumpConsumer; - this.willStartRecordingMetrics = true;*/ // Purpur -+ this.willStartRecordingMetrics = true; // Purpur // Plazma - IDE problem ++ this.willStartRecordingMetrics = true; // Purpur // Plazma - Parsing problem } public void stopRecordingMetrics() { -@@ -2900,6 +2903,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, RecipeHolder> builder = ImmutableMultimap.builder(); com.google.common.collect.ImmutableMap.Builder> com_google_common_collect_immutablemap_builder = ImmutableMap.builder(); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 23f10ed05e2c4aabfa3a565a9117dabe52f175f7..2ad60c53890567742f0eff85987a41b0f6f50673 100644 +index e3a43b352b2be5dbeae1b9ba85fad711d2a3153d..f9bca29920af57029325153a17db184309b31a86 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -35,7 +35,7 @@ import net.minecraft.sounds.SoundSource; @@ -1309,7 +1309,7 @@ index 23f10ed05e2c4aabfa3a565a9117dabe52f175f7..2ad60c53890567742f0eff85987a41b0 public final boolean isClientSide; private final WorldBorder worldBorder; private final BiomeManager biomeManager; -@@ -271,7 +271,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -262,7 +262,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, @@ -1318,7 +1318,7 @@ index 23f10ed05e2c4aabfa3a565a9117dabe52f175f7..2ad60c53890567742f0eff85987a41b0 boolean flag, boolean flag1, long i, -@@ -300,7 +300,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -291,7 +291,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } // CraftBukkit end @@ -1327,18 +1327,20 @@ index 23f10ed05e2c4aabfa3a565a9117dabe52f175f7..2ad60c53890567742f0eff85987a41b0 this.levelData = worlddatamutable; this.dimensionTypeRegistration = holder; final DimensionType dimensionmanager = (DimensionType) holder.value(); -@@ -1877,6 +1877,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1868,14 +1868,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return false; } -+ /* // Plazma - Completely remove Mojang's Profi ++ /* // Plazma - Completely remove Mojang's Profiler public ProfilerFiller getProfiler() { - //if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur // Purpur - TODO: Pufferfish + if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur return (ProfilerFiller) this.profiler.get(); -@@ -1885,6 +1886,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +- } + public Supplier getProfilerSupplier() { return this.profiler; - } +- } ++ }} + */ // Plazma - Completely remove Mojang's Profiler @Override diff --git a/patches/server/0019-Reduce-create-random-instance.patch b/patches/server/0019-Reduce-create-random-instance.patch index 5c68ff6..6004651 100644 --- a/patches/server/0019-Reduce-create-random-instance.patch +++ b/patches/server/0019-Reduce-create-random-instance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reduce create random instance diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 983caa80431f5672cca341e91d9ccc40749a56e4..be20a08f07ea0a073d72d74d13650910f52530c9 100644 +index 703e3720cf28c669000b663cba56b070ac4ed96a..4782f19409d300fbcaa952ae0dd6a0577ade5f7b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -235,6 +235,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop loadStatusIcon() {