diff --git a/patches/api/0021-ChatColor-conveniences.patch b/patches/api/0021-ChatColor-conveniences.patch index 9c2d4a610..3206d30e6 100644 --- a/patches/api/0021-ChatColor-conveniences.patch +++ b/patches/api/0021-ChatColor-conveniences.patch @@ -5,7 +5,7 @@ Subject: [PATCH] ChatColor conveniences diff --git a/src/main/java/org/bukkit/ChatColor.java b/src/main/java/org/bukkit/ChatColor.java -index 4594701d77c5d0f744bece871b98d9f6f73eb5a7..0aa79a9fbd5861d217a877a36e985e18fba6256f 100644 +index 4594701d77c5d0f744bece871b98d9f6f73eb5a7..a991bfe33f695a6166be6937039098ddea892f7b 100644 --- a/src/main/java/org/bukkit/ChatColor.java +++ b/src/main/java/org/bukkit/ChatColor.java @@ -2,6 +2,7 @@ package org.bukkit; @@ -16,7 +16,7 @@ index 4594701d77c5d0f744bece871b98d9f6f73eb5a7..0aa79a9fbd5861d217a877a36e985e18 import java.util.regex.Pattern; import org.apache.commons.lang.Validate; import org.jetbrains.annotations.Contract; -@@ -413,4 +414,72 @@ public enum ChatColor { +@@ -413,4 +414,77 @@ public enum ChatColor { BY_CHAR.put(color.code, color); } } @@ -60,6 +60,11 @@ index 4594701d77c5d0f744bece871b98d9f6f73eb5a7..0aa79a9fbd5861d217a877a36e985e18 + .replace("&r", ""); + } + ++ @NotNull ++ public static net.kyori.adventure.text.Component parseMM(@NotNull String string, @Nullable Object... args) { ++ return net.kyori.adventure.text.minimessage.MiniMessage.get().parse(String.format(string, args)); ++ } ++ + @Deprecated + public static final Pattern HEX_PATTERN = Pattern.compile("(#[A-Fa-f0-9]{6})"); + diff --git a/patches/api/0041-Clean-up-version-command-output-for-console.patch b/patches/api/0041-Clean-up-version-command-output-for-console.patch deleted file mode 100644 index c9e514cb9..000000000 --- a/patches/api/0041-Clean-up-version-command-output-for-console.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Thu, 15 Jul 2021 23:43:04 -0500 -Subject: [PATCH] Clean up version command output for console - - -diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -index 57a21495843f3a144cd73473cdc8781d6129b7ca..7d9ffef457da0571bb2254c35b908d9c22a3dd46 100644 ---- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java -+++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -@@ -168,14 +168,14 @@ public class VersionCommand extends BukkitCommand { - lastCheck = System.currentTimeMillis(); - hasVersion = false; - } else { -- sender.sendMessage(versionMessage); -+ sendVersionMessage(sender); // Purpur - return; - } - } - versionLock.lock(); - try { - if (hasVersion) { -- sender.sendMessage(versionMessage); -+ sendVersionMessage(sender); // Purpur - return; - } - versionWaiters.add(sender); -@@ -256,7 +256,7 @@ public class VersionCommand extends BukkitCommand { - hasVersion = true; - versionTaskStarted = false; - for (CommandSender sender : versionWaiters) { -- sender.sendMessage(versionMessage); -+ sendVersionMessage(sender); // Purpur - } - versionWaiters.clear(); - } finally { -@@ -284,4 +284,27 @@ public class VersionCommand extends BukkitCommand { - return -1; - } - } -+ -+ // Purpur start -+ private void sendVersionMessage(CommandSender sender) { -+ if (!(sender instanceof org.bukkit.command.ConsoleCommandSender)) { -+ sender.sendMessage(versionMessage); -+ return; -+ } -+ List list = new ArrayList<>(); -+ if (versionMessage.children().size() == 1) { -+ versionMessage.children().get(0).children().forEach(child -> { -+ if (child.children().size() > 1) { -+ list.addAll(child.children()); -+ } else { -+ list.add(child); -+ } -+ }); -+ } else { -+ list.addAll(versionMessage.children()); -+ } -+ list.removeIf(component -> net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer.plainText().serialize(component).equals("\n")); -+ list.forEach(sender::sendMessage); -+ } -+ // Purpur end - } diff --git a/patches/api/0041-Clean-up-version-command-output.patch b/patches/api/0041-Clean-up-version-command-output.patch new file mode 100644 index 000000000..0e461a389 --- /dev/null +++ b/patches/api/0041-Clean-up-version-command-output.patch @@ -0,0 +1,51 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Thu, 15 Jul 2021 23:43:04 -0500 +Subject: [PATCH] Clean up version command output + + +diff --git a/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java b/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java +index 4825c9ca2191d3bf1440b986827fc32e230a3280..0c3da2ec9478ed5a981e204b0c390913b1d06bfb 100644 +--- a/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java ++++ b/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java +@@ -29,6 +29,12 @@ public interface VersionFetcher { + @NotNull + Component getVersionMessage(@NotNull String serverVersion); + ++ // Purpur start ++ default int distance() { ++ return 0; ++ } ++ // Purpur end ++ + /** + * Dummy version fetcher + */ +diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java +index 57a21495843f3a144cd73473cdc8781d6129b7ca..b7fa160a305ee89004c11a3d8a01ac3b721f59b6 100644 +--- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java ++++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java +@@ -199,7 +199,7 @@ public class VersionCommand extends BukkitCommand { + String version = Bukkit.getVersion(); + // Paper start + if (version.startsWith("null")) { // running from ide? +- setVersionMessage(Component.text("Unknown version, custom build?", net.kyori.adventure.text.format.NamedTextColor.YELLOW)); ++ setVersionMessage(Component.text("* Unknown version, custom build?", net.kyori.adventure.text.format.NamedTextColor.RED)); // Purpur + return; + } + setVersionMessage(getVersionFetcher().getVersionMessage(version)); +@@ -240,9 +240,11 @@ public class VersionCommand extends BukkitCommand { + // Paper start + private void setVersionMessage(final @NotNull Component msg) { + lastCheck = System.currentTimeMillis(); +- final Component message = net.kyori.adventure.text.TextComponent.ofChildren( +- Component.text(Bukkit.getVersionMessage(), net.kyori.adventure.text.format.NamedTextColor.WHITE), +- Component.newline(), ++ // 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()), ++ // Purpur end + msg + ); + this.versionMessage = Component.text() diff --git a/patches/server/0002-Rebrand.patch b/patches/server/0002-Rebrand.patch index 77c3f6c4f..2e95ba47a 100644 --- a/patches/server/0002-Rebrand.patch +++ b/patches/server/0002-Rebrand.patch @@ -45,20 +45,23 @@ index 0f194168f5fca8eb768bca3ce953f28097fed578..1bdcca4d1a25f4292ab9421d44fa3018 standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index ece77f5ea4b14bbed7c070131b3251ea86764538..e93441d06da8c7f05aa451b0ffbb9059780da0d5 100644 +index ece77f5ea4b14bbed7c070131b3251ea86764538..fba5dbdb7bcbb55400ef18342c9b54612972a718 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -19,8 +19,7 @@ import java.util.stream.StreamSupport; +@@ -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"; - private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads"; -+ private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; // Purpur ++ // 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; @Override -@@ -31,8 +30,8 @@ public class PaperVersionFetcher implements VersionFetcher { +@@ -31,11 +33,11 @@ public class PaperVersionFetcher implements VersionFetcher { @Nonnull @Override public Component getVersionMessage(@Nonnull String serverVersion) { @@ -68,8 +71,12 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..e93441d06da8c7f05aa451b0ffbb9059 + final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur final Component history = getHistory(); - return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; -@@ -45,7 +44,7 @@ public class PaperVersionFetcher implements VersionFetcher { +- 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 + } + + 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 { @@ -78,7 +85,34 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..e93441d06da8c7f05aa451b0ffbb9059 org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } -@@ -85,15 +84,11 @@ public class PaperVersionFetcher implements VersionFetcher { +@@ -55,7 +57,7 @@ public class PaperVersionFetcher implements VersionFetcher { + } + + 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 { + + 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.RED); // 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; } try { try (BufferedReader reader = Resources.asCharSource( @@ -96,6 +130,14 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..e93441d06da8c7f05aa451b0ffbb9059 return latest - jenkinsBuild; } catch (JsonSyntaxException ex) { ex.printStackTrace(); +@@ -144,6 +142,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 + } + } diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..8c3c68465197fafc14849dc38a572e309931e2a2 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -191,6 +233,33 @@ index 868e148e6a8cd85ef89b79ad539dd5f3bce0a7c7..ebcfbfbe8569525640ddb1d0a35724e9 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/command/CraftConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java +index dbff1eda25b02b16ec123515338d470489f3b3c4..e8323ebe0fe877e880bacc5397404839a237052b 100644 +--- a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java +@@ -21,7 +21,12 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co + + @Override + public void sendMessage(String message) { +- this.sendRawMessage(message); ++ // Purpur start ++ String[] parts = message.split("\n"); ++ for (String part : parts) { ++ this.sendRawMessage(part); ++ } ++ // Purpur end + } + + @Override +@@ -91,7 +96,7 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co + // Paper start + @Override + public void sendMessage(final net.kyori.adventure.identity.Identity identity, final net.kyori.adventure.text.Component message, final net.kyori.adventure.audience.MessageType type) { +- this.sendRawMessage(io.papermc.paper.adventure.PaperAdventure.LEGACY_SECTION_UXRC.serialize(message)); ++ this.sendMessage(io.papermc.paper.adventure.PaperAdventure.LEGACY_SECTION_UXRC.serialize(message)); // Purpur + } + + @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java index c022751e3b45469cc0ad6732e2d6ff08918bafa4..72bc0a1ad028f7c180487be8f0e990312c12bebe 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java