From 156d06fc8993fedbf3524851305665b3e4b882bc Mon Sep 17 00:00:00 2001 From: MartijnMuijsers Date: Wed, 30 Nov 2022 12:18:35 +0100 Subject: [PATCH] Update Upstream (Purpur) Purpur PR #1208 Move PlayerCommandSendEvent listeners check Purpur PR #1207 Fix the timeout for alternative keepalive handling --- .../0035-Skip-events-if-there-s-no-listeners.patch | 10 +++++----- .../server/0036-Alternative-Keepalive-Handling.patch | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/patches/server/0035-Skip-events-if-there-s-no-listeners.patch b/patches/server/0035-Skip-events-if-there-s-no-listeners.patch index 053f044d..bf15e4c1 100644 --- a/patches/server/0035-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0035-Skip-events-if-there-s-no-listeners.patch @@ -7,17 +7,17 @@ Original code by PurpurMC, licensed under MIT You can find the original code on https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 7c96f7fc5997761426a0c62cad0cab5cc668f282..98664c95331cee4139711c402dfaf406ee672c22 100644 +index 7c96f7fc5997761426a0c62cad0cab5cc668f282..c3721948ebccdf995f1b3fb10c4bbea1efa08e4c 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -415,6 +415,7 @@ public class Commands { - } - +@@ -417,6 +417,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { -+ if (PlayerCommandSendEvent.getHandlerList().getRegisteredListeners().length > 0) { // Purpur - skip all this crap if there's nothing listening // Paper end - Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper ++ if (PlayerCommandSendEvent.getHandlerList().getRegisteredListeners().length > 0) { // Purpur - skip all this crap if there's nothing listening PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); + event.getPlayer().getServer().getPluginManager().callEvent(event); + @@ -427,6 +428,7 @@ public class Commands { } } diff --git a/patches/server/0036-Alternative-Keepalive-Handling.patch b/patches/server/0036-Alternative-Keepalive-Handling.patch index 7ad2d342..451b2a96 100644 --- a/patches/server/0036-Alternative-Keepalive-Handling.patch +++ b/patches/server/0036-Alternative-Keepalive-Handling.patch @@ -24,14 +24,14 @@ index 9379fd91df73ac482064a89462764dac9835c71f..432ba1293419dea0903e31043f68f5ad } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 79c56946cecba2a6308a0a67b7da036d348a97a8..dfacc5d6b7eb30292f59b25752d2c7ee1ff9534f 100644 +index 79c56946cecba2a6308a0a67b7da036d348a97a8..9ad168cba36ee03a8c5ba0aef63fa2592c6ca725 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -260,6 +260,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private long keepAliveTime = Util.getMillis(); private boolean keepAlivePending; private long keepAliveChallenge; -+ private java.util.List keepAlives = new java.util.ArrayList<>(); // Purpur ++ private it.unimi.dsi.fastutil.longs.LongList keepAlives = new it.unimi.dsi.fastutil.longs.LongArrayList(); // Purpur // CraftBukkit start - multithreaded fields private final AtomicInteger chatSpamTickCount = new AtomicInteger(); private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits @@ -42,7 +42,7 @@ index 79c56946cecba2a6308a0a67b7da036d348a97a8..dfacc5d6b7eb30292f59b25752d2c7ee + // Purpur start + if (dev.etil.mirai.MiraiConfig.useAlternateKeepAlive) { + if (elapsedTime >= 1000L) { // 1 second -+ if (!processedDisconnect && keepAlives.size() > KEEPALIVE_LIMIT) { ++ if (!processedDisconnect && keepAlives.size() * 1000L >= KEEPALIVE_LIMIT) { + LOGGER.warn("{} was kicked due to keepalive timeout!", player.getName()); + disconnect(Component.translatable("disconnect.timeout")); + } else {