From 235d5075a1eb9d733acbd88e19724b0662f6d7c1 Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 11 Mar 2023 21:20:53 -0800 Subject: [PATCH] Updated Upstream (Paper & Pufferfish) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@4e99466 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#8874) Pufferfish Changes: pufferfish-gg/Pufferfish@52307ae Updated Upstream (Paper) --- gradle.properties | 2 +- patches/api/0001-Pufferfish-API-Changes.patch | 70 ++++++++++--------- patches/api/0005-Purpur-client-support.patch | 4 +- patches/api/0010-AFK-API.patch | 4 +- .../api/0017-Player-invulnerabilities.patch | 4 +- patches/api/0046-Debug-Marker-API.patch | 4 +- patches/api/0047-Add-death-screen-API.patch | 4 +- .../0001-Pufferfish-Server-Changes.patch | 31 ++++---- patches/server/0003-Rebrand.patch | 10 +-- patches/server/0004-Purpur-config-files.patch | 16 +++-- .../server/0005-Purpur-client-support.patch | 6 +- patches/server/0012-AFK-API.patch | 6 +- .../0018-Player-invulnerabilities.patch | 6 +- ...0128-Add-EntityTeleportHinderedEvent.patch | 4 +- .../0216-Extended-OfflinePlayer-API.patch | 4 +- .../server/0234-Potion-NamespacedKey.patch | 8 +-- .../server/0279-Remove-Mojang-Profiler.patch | 8 +-- patches/server/0282-Debug-Marker-API.patch | 4 +- .../server/0287-Add-death-screen-API.patch | 4 +- 19 files changed, 104 insertions(+), 95 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9f0155f95..d7d9fcf22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = org.purpurmc.purpur version = 1.19.3-R0.1-SNAPSHOT -paperCommit = 4d7269e07cf152cd25943a17eaf1ced790bbb8ce +paperCommit = 4e994669d3073977cda747d60205d94fbc94f2a7 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0001-Pufferfish-API-Changes.patch b/patches/api/0001-Pufferfish-API-Changes.patch index 47889b7d9..8080da431 100644 --- a/patches/api/0001-Pufferfish-API-Changes.patch +++ b/patches/api/0001-Pufferfish-API-Changes.patch @@ -20,7 +20,7 @@ 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 7ba2b08b8c5eb405a64f9edfa72195dcf48f82bd..d351ae66db72208a78ee6c522201693f19f68ef5 100644 +index 9421e45653e68922a51cf0071792e6fa7999d0b8..181e9cd8623995f40e696ccfe49754dc340405d8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,6 +41,7 @@ dependencies { @@ -29,8 +29,8 @@ index 7ba2b08b8c5eb405a64f9edfa72195dcf48f82bd..d351ae66db72208a78ee6c522201693f api("org.slf4j:slf4j-api:1.8.0-beta4") + api("io.sentry:sentry:5.4.0") // Pufferfish - implementation("org.ow2.asm:asm:9.2") - implementation("org.ow2.asm:asm-commons:9.2") + implementation("org.ow2.asm:asm:9.4") + implementation("org.ow2.asm:asm-commons:9.4") @@ -84,6 +85,13 @@ val generateApiVersioningFile by tasks.registering { } } @@ -47,7 +47,7 @@ index 7ba2b08b8c5eb405a64f9edfa72195dcf48f82bd..d351ae66db72208a78ee6c522201693f into("META-INF/maven/${project.group}/${project.name}") diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java new file mode 100644 -index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8eb08fb68a +index 0000000000000000000000000000000000000000..cfbc75a4525b0596547db496eabe867975081642 --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java @@ -0,0 +1,161 @@ @@ -69,21 +69,21 @@ index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8e +import org.jetbrains.annotations.Nullable; + +public class SentryContext { -+ ++ + private static final Gson GSON = new Gson(); -+ ++ + public static void setPluginContext(@Nullable Plugin plugin) { + if (plugin != null) { + ThreadContext.put("pufferfishsentry_pluginname", plugin.getName()); + ThreadContext.put("pufferfishsentry_pluginversion", plugin.getDescription().getVersion()); + } + } -+ ++ + public static void removePluginContext() { + ThreadContext.remove("pufferfishsentry_pluginname"); + ThreadContext.remove("pufferfishsentry_pluginversion"); + } -+ ++ + public static void setSenderContext(@Nullable CommandSender sender) { + if (sender != null) { + ThreadContext.put("pufferfishsentry_playername", sender.getName()); @@ -92,15 +92,15 @@ index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8e + } + } + } -+ ++ + public static void removeSenderContext() { + ThreadContext.remove("pufferfishsentry_playername"); + ThreadContext.remove("pufferfishsentry_playerid"); + } -+ ++ + public static void setEventContext(Event event, RegisteredListener registration) { + setPluginContext(registration.getPlugin()); -+ ++ + try { + // Find the player that was involved with this event + Player player = null; @@ -108,36 +108,36 @@ index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8e + player = ((PlayerEvent) event).getPlayer(); + } else { + Class eventClass = event.getClass(); -+ ++ + Field playerField = null; -+ ++ + for (Field field : eventClass.getDeclaredFields()) { + if (field.getType().equals(Player.class)) { + playerField = field; + break; + } + } -+ ++ + if (playerField != null) { + playerField.setAccessible(true); + player = (Player) playerField.get(event); + } + } -+ ++ + if (player != null) { + setSenderContext(player); + } + } catch (Exception e) {} // We can't really safely log exceptions. -+ ++ + ThreadContext.put("pufferfishsentry_eventdata", GSON.toJson(serializeFields(event))); + } -+ ++ + public static void removeEventContext() { + removePluginContext(); + removeSenderContext(); + ThreadContext.remove("pufferfishsentry_eventdata"); + } -+ ++ + private static Map serializeFields(Object object) { + Map fields = new TreeMap<>(); + fields.put("_class", object.getClass().getName()); @@ -146,7 +146,7 @@ index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8e + if (Modifier.isStatic(declaredField.getModifiers())) { + continue; + } -+ ++ + String fieldName = declaredField.getName(); + if (fieldName.equals("handlers")) { + continue; @@ -162,47 +162,47 @@ index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8e + } + return fields; + } -+ ++ + public static class State { -+ ++ + private Plugin plugin; + private Command command; + private String commandLine; + private Event event; + private RegisteredListener registeredListener; -+ ++ + public Plugin getPlugin() { + return plugin; + } -+ ++ + public void setPlugin(Plugin plugin) { + this.plugin = plugin; + } -+ ++ + public Command getCommand() { + return command; + } -+ ++ + public void setCommand(Command command) { + this.command = command; + } -+ ++ + public String getCommandLine() { + return commandLine; + } -+ ++ + public void setCommandLine(String commandLine) { + this.commandLine = commandLine; + } -+ ++ + public Event getEvent() { + return event; + } -+ ++ + public void setEvent(Event event) { + this.event = event; + } -+ ++ + public RegisteredListener getRegisteredListener() { + return registeredListener; + } @@ -452,20 +452,24 @@ index 2b8308989fce7f8a16907f8711b362e671fdbfb6..bd4d1a40f53784662174d426533ef4b5 callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerEventException(msg, ex, registration.getPlugin(), registration.getListener(), event))); } diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..6efa6732e5559c3192d08b8631911be7cdaf15b4 100644 +index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..301e82369603f3dd6e6c1bd380da4bacacd7ef6c 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -@@ -336,7 +336,9 @@ public final class JavaPluginLoader implements PluginLoader { +@@ -336,7 +336,13 @@ public final class JavaPluginLoader implements PluginLoader { try { jPlugin.setEnabled(true); } catch (Throwable ex) { + gg.pufferfish.pufferfish.sentry.SentryContext.setPluginContext(plugin); // Pufferfish server.getLogger().log(Level.SEVERE, "Error occurred while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); + gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish ++ // Paper start - Disable plugins that fail to load ++ this.server.getPluginManager().disablePlugin(jPlugin); ++ return; ++ // Paper end } // Perhaps abort here, rather than continue going, but as it stands, -@@ -361,7 +363,9 @@ public final class JavaPluginLoader implements PluginLoader { +@@ -361,7 +367,9 @@ public final class JavaPluginLoader implements PluginLoader { try { jPlugin.setEnabled(false); } catch (Throwable ex) { diff --git a/patches/api/0005-Purpur-client-support.patch b/patches/api/0005-Purpur-client-support.patch index 8c0ff90c8..3777fc889 100644 --- a/patches/api/0005-Purpur-client-support.patch +++ b/patches/api/0005-Purpur-client-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 7e7a21b21afdf40d7516ce1a5f5c1c5d6048984a..15bb2a2fce70797af3b1befa7053d4b30f2053ef 100644 +index fd890d0a3a2c92ad821ade7711191bdb0e3e3624..99d3e4beb3f6397560180ef68c03b995677084e4 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2978,4 +2978,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2969,4 +2969,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/api/0010-AFK-API.patch b/patches/api/0010-AFK-API.patch index cfa3a1030..78e468bed 100644 --- a/patches/api/0010-AFK-API.patch +++ b/patches/api/0010-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 15bb2a2fce70797af3b1befa7053d4b30f2053ef..315fe7637889859115f060b6ab0b7625b6b69641 100644 +index 99d3e4beb3f6397560180ef68c03b995677084e4..bb2fa28f461b3e4f66ca1986edbd965e89210c22 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2986,5 +2986,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2977,5 +2977,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @return True if Player uses Purpur Client */ public boolean usesPurpurClient(); diff --git a/patches/api/0017-Player-invulnerabilities.patch b/patches/api/0017-Player-invulnerabilities.patch index 3da81cd8c..d66b1b5c0 100644 --- a/patches/api/0017-Player-invulnerabilities.patch +++ b/patches/api/0017-Player-invulnerabilities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 315fe7637889859115f060b6ab0b7625b6b69641..d713b34a5c57468530f2a7f8d3838d95fc1b01df 100644 +index bb2fa28f461b3e4f66ca1986edbd965e89210c22..59a9ca48a9c4194d4b807652df65a2c2c7e61c3b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3005,5 +3005,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2996,5 +2996,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Reset the idle timer back to 0 */ void resetIdleTimer(); diff --git a/patches/api/0046-Debug-Marker-API.patch b/patches/api/0046-Debug-Marker-API.patch index 695f1787e..1425e5b3e 100644 --- a/patches/api/0046-Debug-Marker-API.patch +++ b/patches/api/0046-Debug-Marker-API.patch @@ -260,10 +260,10 @@ index bb249f7d54fd90d63f609eedf0bbb463f1aa96f1..a38863ebd363f54994753937a10e0410 /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index d713b34a5c57468530f2a7f8d3838d95fc1b01df..98210502756b828bd48897e241d8e7edc0227c9f 100644 +index 59a9ca48a9c4194d4b807652df65a2c2c7e61c3b..53b42a10af51865d45b211a13ab1780604ce43ec 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3026,5 +3026,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3017,5 +3017,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param invulnerableTicks Invulnerable ticks remaining */ void setSpawnInvulnerableTicks(int invulnerableTicks); diff --git a/patches/api/0047-Add-death-screen-API.patch b/patches/api/0047-Add-death-screen-API.patch index 952608956..ffc041f5e 100644 --- a/patches/api/0047-Add-death-screen-API.patch +++ b/patches/api/0047-Add-death-screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 98210502756b828bd48897e241d8e7edc0227c9f..5ff9f0d9bc2bc08af251a677a8c98d6f288da8a8 100644 +index 53b42a10af51865d45b211a13ab1780604ce43ec..b9a924058f99c24db499dbb97373514d1f2ea174 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3096,5 +3096,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3087,5 +3087,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Clears all debug block highlights */ void clearBlockHighlights(); diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch index 34a3bb408..d1238775c 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -20,7 +20,7 @@ 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 4cc7d15f43b2547a723ea231bcf98bc13bdb85bf..af8a561e4d59d98ebb6d7a8fbcb072e361b10058 100644 +index 1919a8e9cb7c995b2a9c876ff4980bdc98977133..8d8c5a8bd2a53ac6d9b36e0330a7be6725aa407c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,8 +7,12 @@ plugins { @@ -91,7 +91,7 @@ index 06bff37e4c1fddd3be6343049a66787c63fb420c..2cc44fbf8e5bd436b6d4e19f6c06b351 new TimingsExport(listeners, parent, history).start(); diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 4b002e8b75d117b726b0de274a76d3596fce015b..061716934ba0a1f01e4d85d664034f72b3c7a765 100644 +index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc673d527b 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 { @@ -103,20 +103,17 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..061716934ba0a1f01e4d85d664034f72 metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); -@@ -603,15 +603,7 @@ public class Metrics { - - metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); -- final String paperVersion; -- final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); -- if (implVersion != null) { -- final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); +@@ -607,11 +607,11 @@ public class Metrics { + final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); + if (implVersion != null) { + final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); - paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); -- } else { -- paperVersion = "unknown"; -- } ++ paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish + } else { + paperVersion = "unknown"; + } - metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion)); -+ metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); ++ metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); @@ -1789,7 +1786,7 @@ index e84c67f02bce4c2f9c4eeca1b888d53377fb20d7..619ee9d8b99970fb6fce19438f29e098 this.getRandomBlockPosition(j, 0, k, 15, blockposition); int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1; diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d9c29725e015cb4684ff2d547352505d2ad8a2fe..c6a1bde35274bdd0e008a6ca5af006a5d7bcd8bb 100644 +index bac6b62419d85b3772ef243aa3d5f73311abdda7..2ca19bbe3a71091843fc7175d726c70321d1fee3 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1204,6 +1204,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -3583,10 +3580,10 @@ index f7ea77dd82d978ad307f99c743efacfb34478b3d..009ab06182359862b8f543030ec4fe4e } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 1244c1ca5e0907298b1ca6de538db82b2209ec4d..6aa2121e286dd6d43201a38722ea0cdd205baaa7 100644 +index 81ffcca62c2ebb15889d286bfe9138b86ccfe71e..0ccde7fe2a852f7da72f0b3f5a53cb48d28d1840 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -468,7 +468,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -464,7 +464,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0003-Rebrand.patch index 73ae19088..b68d782f5 100644 --- a/patches/server/0003-Rebrand.patch +++ b/patches/server/0003-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index d9ace6cd8e9cbf088e6664469fb94df0c964998f..f25c0557cf984b97e0ab361f579eccbf46f82170 100644 +index 8d8c5a8bd2a53ac6d9b36e0330a7be6725aa407c..70d512c0c70d2470eaca295b6e35bb3be2f3f6a3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,9 +7,9 @@ plugins { @@ -171,7 +171,7 @@ index abe37c7c3c6f5ab73afd738ec78f06d7e4d2ed96..b5b6657e52e4f7a630229bd3ba433438 stringbuilder.append(CrashReport.getErrorComment()); stringbuilder.append("\n\n"); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 68d16efaf9c2d997afabadcf1ee24c5de685b5b3..861cd9f092a19aca520c2be4ba7a6ee3d9aee263 100644 +index 33a5e900c2cab99c311fa5f5b71a609cf8f802cb..51163298e6ce111bdb19d55ce367cd69c7fe5f89 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -924,7 +924,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { String minecraftVersion = Bukkit.getVersion(); -@@ -602,8 +602,8 @@ public class Metrics { +@@ -602,16 +602,8 @@ public class Metrics { })); metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); -- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); +- final String paperVersion; +- final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); +- if (implVersion != null) { +- final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); +- paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish +- } else { +- paperVersion = "unknown"; +- } +- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish + 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 @@ -152,7 +160,7 @@ index 9d15cb8151a4008061c5788cbf4f4fa494cfe49d..fdb314838159f77b3fb12d61e74d12f5 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 190e17eb28d166aedee06e9578561ba402d1b6d2..0864daf66deee41261e3ec69eeae7bb72822e60b 100644 +index f30621be24c6c3a4f173436fce1ad1c13507c84f..e859f1078a42de196a69818a34a8b2c24958c717 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -166,6 +166,14 @@ public class Main { diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch index 2f6ebd6c7..a4cf61235 100644 --- a/patches/server/0005-Purpur-client-support.patch +++ b/patches/server/0005-Purpur-client-support.patch @@ -17,7 +17,7 @@ index 289429eb464548acc80262a49444f49f8f57fc0c..7b6b3312860633f70e64641c0a0c5205 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c6a1bde35274bdd0e008a6ca5af006a5d7bcd8bb..564ded1c42675917915f70de6c62324641aba5af 100644 +index 2ca19bbe3a71091843fc7175d726c70321d1fee3..f6a975c5b5b360a8cfddc577ab1737ff0e64350a 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -3511,6 +3511,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -43,10 +43,10 @@ index c6a1bde35274bdd0e008a6ca5af006a5d7bcd8bb..564ded1c42675917915f70de6c623246 try { byte[] data = new byte[packet.data.readableBytes()]; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c5078b9e4f1853126546c802ae29766e7dd4d151..45bf5cc6faf6428861544ca8e9ddde146e2dda2c 100644 +index c546a465a2f85e1b0e785074af15546637619e8f..df85031aaedfd5e5d189003a7cb89d6eef6fa186 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3077,4 +3077,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3081,4 +3081,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.spigot; } // Spigot end diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch index f13a9c2c6..9660cbab2 100644 --- a/patches/server/0012-AFK-API.patch +++ b/patches/server/0012-AFK-API.patch @@ -73,7 +73,7 @@ index 19cff8ba18d28f4c7cc7dfc71ce6ce3501b7bcb8..4f25737b205ed299d02a2a763c7add71 return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d598c5097a96fae63e146857fe9e7173e3e8c831..d5537a7125b57b2bf24523213d2274fcd588959a 100644 +index 226f1b3a59cb1adbe8c61db7d2ff38c285c3f56a..55be049561950fffcbbd46bb0b3d8c6a67e78ee1 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -335,6 +335,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -218,7 +218,7 @@ index 3b959f42d958bf0f426853aee56753d6c455fcdb..d17abb283ea818244df0379d6b57fc63 if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 45bf5cc6faf6428861544ca8e9ddde146e2dda2c..3facfabed17d351b2882d7f624159ad4cb296b7a 100644 +index df85031aaedfd5e5d189003a7cb89d6eef6fa186..4615f3c006a6f96d1d6eec7ada4501606f9edc57 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -524,10 +524,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -238,7 +238,7 @@ index 45bf5cc6faf6428861544ca8e9ddde146e2dda2c..3facfabed17d351b2882d7f624159ad4 for (ServerPlayer player : (List) server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); -@@ -3083,5 +3088,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3087,5 +3092,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } diff --git a/patches/server/0018-Player-invulnerabilities.patch b/patches/server/0018-Player-invulnerabilities.patch index 5cc4ee6a9..9c89abec7 100644 --- a/patches/server/0018-Player-invulnerabilities.patch +++ b/patches/server/0018-Player-invulnerabilities.patch @@ -82,7 +82,7 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf public Scoreboard getScoreboard() { return this.getBukkitEntity().getScoreboard().getHandle(); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d5537a7125b57b2bf24523213d2274fcd588959a..4229aaa4e35883d8ae2f9603f8a14264c7fb0bcf 100644 +index 55be049561950fffcbbd46bb0b3d8c6a67e78ee1..77b5d7e6ba4c76c528a0592cb5da825d1e6d8a1f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2091,12 +2091,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -121,10 +121,10 @@ index f1c3737d5cff959db2cdb3be672987c603c1ca6c..1a5863a192caadac38c47a418f298394 return entityplayer1; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3facfabed17d351b2882d7f624159ad4cb296b7a..fd7cc236b4ce3be10b11e195c9943c87f2295344 100644 +index 4615f3c006a6f96d1d6eec7ada4501606f9edc57..27309ade0b8af8af3def7a0bc07df74aaef53246 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3103,5 +3103,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3107,5 +3107,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetIdleTimer() { getHandle().resetLastActionTime(); } diff --git a/patches/server/0128-Add-EntityTeleportHinderedEvent.patch b/patches/server/0128-Add-EntityTeleportHinderedEvent.patch index 0d2eb85c8..0470b7df1 100644 --- a/patches/server/0128-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0128-Add-EntityTeleportHinderedEvent.patch @@ -93,10 +93,10 @@ index 6cb23251487a1e61cef636b631145421527d1d80..f67fa5577a2622f0f4ed82948cffd053 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 38cbee87b658717f1958584d65ae935a23855834..35d3fd93ac9b5bb25c28d5b471c439059af64f7b 100644 +index 27309ade0b8af8af3def7a0bc07df74aaef53246..be259ceb95a0fc6bfbbfdb27987824ec7944c91c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1312,6 +1312,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1318,6 +1318,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API diff --git a/patches/server/0216-Extended-OfflinePlayer-API.patch b/patches/server/0216-Extended-OfflinePlayer-API.patch index 75740524f..c9582bb67 100644 --- a/patches/server/0216-Extended-OfflinePlayer-API.patch +++ b/patches/server/0216-Extended-OfflinePlayer-API.patch @@ -223,10 +223,10 @@ index 714afc98b5150907b45a00060be4e41582333204..312a6d90c0a09570aef24c205dc2ff27 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ffecdbe20a685d880ca4cc07153697c28724a430..fd8a91c414e31287839579e5afe29e9538173698 100644 +index be259ceb95a0fc6bfbbfdb27987824ec7944c91c..40fe24de4a7bd49f47bb76ad1a25aa7f3c4cbfd9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2293,6 +2293,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2297,6 +2297,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } diff --git a/patches/server/0234-Potion-NamespacedKey.patch b/patches/server/0234-Potion-NamespacedKey.patch index a3ab09cab..ad8c920a5 100644 --- a/patches/server/0234-Potion-NamespacedKey.patch +++ b/patches/server/0234-Potion-NamespacedKey.patch @@ -160,7 +160,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index e21a20d1c4c5c40ed96fc3226dd3accceb19ebe6..c189c465f5e1266d51e4d674d56fbbe61f1c5a7e 100644 +index c976bbd5852ff6916a45651125f9a44cbbbdf4fb..913f872a877137d206011e47792ad39c41ee8664 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -455,7 +455,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -191,7 +191,7 @@ index e21a20d1c4c5c40ed96fc3226dd3accceb19ebe6..c189c465f5e1266d51e4d674d56fbbe6 return effects; } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java -index 298326115f048bb79e3c949861c187134eb5efb8..9b060070ddbbade4c1b6830b9b861f462d60b138 100644 +index 0d4348ce1c4ec9bb779eaebf8606ea578f17d2cb..486768894f130cd23905cc7a8be16ce705667bbb 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java @@ -13,6 +13,7 @@ import net.minecraft.nbt.ListTag; @@ -212,8 +212,8 @@ index 298326115f048bb79e3c949861c187134eb5efb8..9b060070ddbbade4c1b6830b9b861f46 // is treated as the empty form of the meta because it represents an empty potion with no effect @@ -92,7 +94,13 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta { boolean ambient = effect.getBoolean(AMBIENT.NBT); - boolean particles = tag.contains(SHOW_PARTICLES.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_PARTICLES.NBT) : true; - boolean icon = tag.contains(SHOW_ICON.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_ICON.NBT) : particles; + boolean particles = effect.contains(SHOW_PARTICLES.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_PARTICLES.NBT) : true; + boolean icon = effect.contains(SHOW_ICON.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_ICON.NBT) : particles; - this.customEffects.add(new PotionEffect(type, duration, amp, ambient, particles, icon)); + // Purpur start + NamespacedKey key = null; diff --git a/patches/server/0279-Remove-Mojang-Profiler.patch b/patches/server/0279-Remove-Mojang-Profiler.patch index 01d6b46a1..6423233a2 100644 --- a/patches/server/0279-Remove-Mojang-Profiler.patch +++ b/patches/server/0279-Remove-Mojang-Profiler.patch @@ -783,7 +783,7 @@ index 0410d56e1aefb4a51b84530ef00ad80b1a598d36..9fbb844b6dfe0ea6580e98e63e21ca9a this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); playerlist.sendLevelInfo(this, worldserver); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 7ad67462537d14f4e02cc31d0acdf028ecbfee5a..d6342833b2b7d0ad852e3d1f289574fb029e77c7 100644 +index 2b6dd8648f902bc166f3d05e52b46c3daac75fb6..a264d2e6c20e48925c9126afea3a956013fa4988 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -405,7 +405,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1678,10 +1678,10 @@ index 1f9a9f535c54481fc16bec5db4111ca1eba409df..aed1d9ccffe471b6c2a1d52d2d3d097f this.assignProfessionWhenSpawned = false; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index a213f4098859858a73ddd601bbe8c7511972e0d5..c0d39afe5b80159ed9aaca4ddd4763d707882f2e 100644 +index 5ef6b5ad4dd69a57595914c7af8422ee2f6ad054..de6050c867ac55dd6f0d8243289296781add7157 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -360,7 +360,7 @@ public class Explosion { +@@ -363,7 +363,7 @@ public class Explosion { if (!iblockdata.isAir() && iblockdata.isDestroyable()) { // Paper BlockPos blockposition1 = blockposition.immutable(); @@ -1690,7 +1690,7 @@ index a213f4098859858a73ddd601bbe8c7511972e0d5..c0d39afe5b80159ed9aaca4ddd4763d7 if (block.dropFromExplosion(this)) { Level world = this.level; -@@ -382,7 +382,7 @@ public class Explosion { +@@ -385,7 +385,7 @@ public class Explosion { this.level.setBlock(blockposition, Blocks.AIR.defaultBlockState(), 3); block.wasExploded(this.level, blockposition, this); diff --git a/patches/server/0282-Debug-Marker-API.patch b/patches/server/0282-Debug-Marker-API.patch index 9ea3ade4c..0ebc3a4bc 100644 --- a/patches/server/0282-Debug-Marker-API.patch +++ b/patches/server/0282-Debug-Marker-API.patch @@ -99,10 +99,10 @@ index 331646e5be8c626d75738cb05742d31e909efb8f..6a327616cd590b70170f8441c003a210 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index fd8a91c414e31287839579e5afe29e9538173698..abc43910f79a2834a3349997a9077a3f3dcb2f41 100644 +index 40fe24de4a7bd49f47bb76ad1a25aa7f3c4cbfd9..3ea9dab2d6ed04d43d5ab7c5dc428434c47dbea1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3144,5 +3144,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3148,5 +3148,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setSpawnInvulnerableTicks(int spawnInvulnerableTime) { getHandle().spawnInvulnerableTime = spawnInvulnerableTime; } diff --git a/patches/server/0287-Add-death-screen-API.patch b/patches/server/0287-Add-death-screen-API.patch index 659e69269..39632f703 100644 --- a/patches/server/0287-Add-death-screen-API.patch +++ b/patches/server/0287-Add-death-screen-API.patch @@ -30,10 +30,10 @@ index 53b75f5737a910ffc5448cd9a85eae57f9c1488f..ea95873dd034779e56a8b924cd27f937 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index abc43910f79a2834a3349997a9077a3f3dcb2f41..33483f88a8c53f5ad29dcff0faa1a27995601474 100644 +index 3ea9dab2d6ed04d43d5ab7c5dc428434c47dbea1..08649f51adb40fa69d45b95c2d13aa918fff41bf 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3187,5 +3187,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3191,5 +3191,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (this.getHandle().connection == null) return; this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.DEBUG_GAME_TEST_CLEAR, new FriendlyByteBuf(io.netty.buffer.Unpooled.buffer()))); }