diff --git a/patches/server/0291-Add-PlayerConnectionCloseEvent.patch b/patches/server/0291-Add-PlayerConnectionCloseEvent.patch index fa6febf09..c610902cd 100644 --- a/patches/server/0291-Add-PlayerConnectionCloseEvent.patch +++ b/patches/server/0291-Add-PlayerConnectionCloseEvent.patch @@ -34,23 +34,21 @@ how PlayerPreLoginEvent interacts with PlayerConnectionCloseEvent is undefined. diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 83c5264e4af146d3712cee4550d84c824a3a96d6..5ec25b729d1e7fce232ecdc723b8286c4eaf182c 100644 +index 83c5264e4af146d3712cee4550d84c824a3a96d6..66274a749af1e77363190fda99b5999efac40bdb 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -439,6 +439,26 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -439,6 +439,24 @@ public class Connection extends SimpleChannelInboundHandler> { this.getPacketListener().onDisconnect(Component.translatable("multiplayer.disconnect.generic")); } this.queue.clear(); // Free up packet queue. + // Paper start - Add PlayerConnectionCloseEvent + final PacketListener packetListener = this.getPacketListener(); -+ if (packetListener instanceof ServerGamePacketListenerImpl) { ++ if (packetListener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl playerConnection) { + /* Player was logged in */ -+ final ServerGamePacketListenerImpl playerConnection = (ServerGamePacketListenerImpl) packetListener; + new com.destroystokyo.paper.event.player.PlayerConnectionCloseEvent(playerConnection.player.getUUID(), + playerConnection.player.getScoreboardName(), ((java.net.InetSocketAddress)address).getAddress(), false).callEvent(); -+ } else if (packetListener instanceof ServerLoginPacketListenerImpl) { ++ } else if (packetListener instanceof net.minecraft.server.network.ServerLoginPacketListenerImpl loginListener) { + /* Player is login stage */ -+ final ServerLoginPacketListenerImpl loginListener = (ServerLoginPacketListenerImpl) packetListener; + switch (loginListener.state) { + case READY_TO_ACCEPT: + case DELAY_ACCEPT: diff --git a/patches/server/0302-Optimize-Network-Manager-and-add-advanced-packet-sup.patch b/patches/server/0302-Optimize-Network-Manager-and-add-advanced-packet-sup.patch index 4b166f1a9..c2d64ff6a 100644 --- a/patches/server/0302-Optimize-Network-Manager-and-add-advanced-packet-sup.patch +++ b/patches/server/0302-Optimize-Network-Manager-and-add-advanced-packet-sup.patch @@ -28,7 +28,7 @@ and then catch exceptions and close if they fire. Part of this commit was authored by: Spottedleaf diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 5ec25b729d1e7fce232ecdc723b8286c4eaf182c..a18e2146c4398b45ae50623fc6800a78718f4c81 100644 +index 66274a749af1e77363190fda99b5999efac40bdb..26849a8af6149b710df8a7e0a335d98df2e2a4d2 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -93,6 +93,10 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -55,9 +55,9 @@ index 5ec25b729d1e7fce232ecdc723b8286c4eaf182c..a18e2146c4398b45ae50623fc6800a78 this.packetListener = listener; } + // Paper start -+ public net.minecraft.server.level.ServerPlayer getPlayer() { -+ if (packetListener instanceof ServerGamePacketListenerImpl) { -+ return ((ServerGamePacketListenerImpl) packetListener).player; ++ public @Nullable net.minecraft.server.level.ServerPlayer getPlayer() { ++ if (packetListener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl serverGamePacketListener) { ++ return serverGamePacketListener.player; + } else { + return null; + } @@ -127,7 +127,7 @@ index 5ec25b729d1e7fce232ecdc723b8286c4eaf182c..a18e2146c4398b45ae50623fc6800a78 + java.util.List extraPackets = InnerUtil.buildExtraPackets(packet); + boolean hasExtraPackets = extraPackets != null && !extraPackets.isEmpty(); + if (!hasExtraPackets) { -+ this.queue.add(new Connection.PacketHolder(packet, callback)); ++ this.queue.add(new Connection.PacketHolder(packet, packetsendlistener)); + } else { + java.util.List packets = new java.util.ArrayList<>(1 + extraPackets.size()); + packets.add(new Connection.PacketHolder(packet, null)); // delay the future listener until the end of the extra packets @@ -135,7 +135,7 @@ index 5ec25b729d1e7fce232ecdc723b8286c4eaf182c..a18e2146c4398b45ae50623fc6800a78 + for (int i = 0, len = extraPackets.size(); i < len;) { + Packet extra = extraPackets.get(i); + boolean end = ++i == len; -+ packets.add(new Connection.PacketHolder(extra, end ? callback : null)); // append listener to the end ++ packets.add(new Connection.PacketHolder(extra, end ? packetsendlistener : null)); // append listener to the end + } + this.queue.addAll(packets); // atomic + } @@ -275,7 +275,7 @@ index 5ec25b729d1e7fce232ecdc723b8286c4eaf182c..a18e2146c4398b45ae50623fc6800a78 + clearPacketQueue(); // Paper // Paper start - Add PlayerConnectionCloseEvent final PacketListener packetListener = this.getPacketListener(); - if (packetListener instanceof ServerGamePacketListenerImpl) { + if (packetListener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl playerConnection) { diff --git a/src/main/java/net/minecraft/network/protocol/Packet.java b/src/main/java/net/minecraft/network/protocol/Packet.java index 74bfe0d3942259c45702b099efdc4e101a4e3022..e8fcd56906d26f6dc87959e32c4c7c78cfea9658 100644 --- a/src/main/java/net/minecraft/network/protocol/Packet.java diff --git a/patches/server/0444-Don-t-allow-null-UUID-s-for-chat.patch b/patches/server/0444-Don-t-allow-null-UUID-s-for-chat.patch index 4c2d568a4..9c9281482 100644 --- a/patches/server/0444-Don-t-allow-null-UUID-s-for-chat.patch +++ b/patches/server/0444-Don-t-allow-null-UUID-s-for-chat.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Don't allow null UUID's for chat diff --git a/src/main/java/net/minecraft/network/chat/ChatSender.java b/src/main/java/net/minecraft/network/chat/ChatSender.java -index eb33c74d51f9b096ac39adf167fa09afdaa5e56b..64b7ef689743b12723a6b0319948d6ad6152f448 100644 +index eb33c74d51f9b096ac39adf167fa09afdaa5e56b..d3d5487e9a4e95271a88c094058ec9d37a10d370 100644 --- a/src/main/java/net/minecraft/network/chat/ChatSender.java +++ b/src/main/java/net/minecraft/network/chat/ChatSender.java @@ -8,6 +8,12 @@ import net.minecraft.world.entity.player.ProfilePublicKey; @@ -14,7 +14,7 @@ index eb33c74d51f9b096ac39adf167fa09afdaa5e56b..64b7ef689743b12723a6b0319948d6ad + // Paper start + public ChatSender { -+ com.google.common.base.Preconditions.checkNotNull(uuid, "uuid cannot be null"); ++ com.google.common.base.Preconditions.checkNotNull(profileId, "uuid cannot be null"); + } + // Paper end + diff --git a/patches/server/0485-Buffer-joins-to-world.patch b/patches/server/0485-Buffer-joins-to-world.patch index b1dad652b..70c68042e 100644 --- a/patches/server/0485-Buffer-joins-to-world.patch +++ b/patches/server/0485-Buffer-joins-to-world.patch @@ -8,7 +8,7 @@ the world per tick, this attempts to reduce the impact that join floods has on the server diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index c06cb0f0e300c4d00b3aeed12772c38e8379cb0c..eb18253d4ae0618884c9061f8dda689119e10ef0 100644 +index 8440b3d6f9811fa16b10843ada91248e0722acc4..2ed32f8c503b7196abfaa1c1e2456fbd4760eac3 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -396,8 +396,23 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -26,10 +26,10 @@ index c06cb0f0e300c4d00b3aeed12772c38e8379cb0c..eb18253d4ae0618884c9061f8dda6891 + joinAttemptsThisTick = 0; + } + // Paper end -+ if (this.packetListener instanceof ServerLoginPacketListenerImpl) { -+ if ( ((ServerLoginPacketListenerImpl) this.packetListener).state != ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT // Paper ++ if (this.packetListener instanceof net.minecraft.server.network.ServerLoginPacketListenerImpl serverLoginPacketListener) { ++ if ( serverLoginPacketListener.state != net.minecraft.server.network.ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT // Paper + || (joinAttemptsThisTick++ < MAX_PER_TICK)) { // Paper - limit the number of joins which can be processed each tick -+ ((ServerLoginPacketListenerImpl) this.packetListener).tick(); ++ serverLoginPacketListener.tick(); + } // Paper + } PacketListener packetlistener = this.packetListener; diff --git a/patches/server/0650-Add-Unix-domain-socket-support.patch b/patches/server/0650-Add-Unix-domain-socket-support.patch index 7c3688b76..21235c587 100644 --- a/patches/server/0650-Add-Unix-domain-socket-support.patch +++ b/patches/server/0650-Add-Unix-domain-socket-support.patch @@ -11,10 +11,10 @@ Tested-by: Mariell Hoversholm Reviewed-by: Mariell Hoversholm diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 023c564248adb2c5c4b679be9075ca88cb2d5b62..ca6b12b61874913f6d4abac97a3df67d0053cd8f 100644 +index 9c80b1048f7c855c43dc114ffcd94b6f9df74661..25d26ba482edac4158ba247e105d8c5fac0729e4 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -641,6 +641,11 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -639,6 +639,11 @@ public class Connection extends SimpleChannelInboundHandler> { // Spigot Start public SocketAddress getRawAddress() { diff --git a/patches/server/0732-Allow-controlled-flushing-for-network-manager.patch b/patches/server/0732-Allow-controlled-flushing-for-network-manager.patch index 4f18ab4af..e1622fd8a 100644 --- a/patches/server/0732-Allow-controlled-flushing-for-network-manager.patch +++ b/patches/server/0732-Allow-controlled-flushing-for-network-manager.patch @@ -9,7 +9,7 @@ This patch will be used to optimise out flush calls in later patches. diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index ca6b12b61874913f6d4abac97a3df67d0053cd8f..2195024a7b2626f4e6844db56071130226cf1364 100644 +index 25d26ba482edac4158ba247e105d8c5fac0729e4..b8e127f19c38d51baaa1a2c47a0d2eab62d71e90 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -99,6 +99,39 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -140,7 +140,7 @@ index ca6b12b61874913f6d4abac97a3df67d0053cd8f..2195024a7b2626f4e6844db560711302 } else { iterator.remove(); - this.sendPacket(packet, queued.listener); -+ this.writePacket(packet, queued.listener, (!iterator.hasNext() && (needsFlush || this.canFlush)) ? Boolean.TRUE : Boolean.FALSE); // Paper - make only one flush call per sendPacketQueue() call ++ this.sendPacket(packet, queued.listener, (!iterator.hasNext() && (needsFlush || this.canFlush)) ? Boolean.TRUE : Boolean.FALSE); // Paper - make only one flush call per sendPacketQueue() call + hasWrotePacket = true; // Paper - make only one flush call per sendPacketQueue() call } } diff --git a/patches/server/0746-Add-packet-limiter-config.patch b/patches/server/0746-Add-packet-limiter-config.patch index 4f7e98a16..9fc8214e1 100644 --- a/patches/server/0746-Add-packet-limiter-config.patch +++ b/patches/server/0746-Add-packet-limiter-config.patch @@ -24,7 +24,7 @@ and an action can be defined: DROP or KICK If interval or rate are less-than 0, the limit is ignored diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 92b36499c7b655b1b7d866fe116486962aef1803..80cc3b62af324512f695e971cce2b01f6eadbdbf 100644 +index 30f8053547ebbe05549ede851835a707793f8e45..e5b7145efddefb8bf756c3b0f115c92306830ae4 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -131,6 +131,22 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -40,9 +40,9 @@ index 92b36499c7b655b1b7d866fe116486962aef1803..80cc3b62af324512f695e971cce2b01f + + private boolean stopReadingPackets; + private void killForPacketSpam() { -+ this.sendPacket(new ClientboundDisconnectPacket(io.papermc.paper.adventure.PaperAdventure.asVanilla(io.papermc.paper.configuration.GlobalConfiguration.get().packetLimiter.kickMessage)), (future) -> { ++ this.sendPacket(new ClientboundDisconnectPacket(io.papermc.paper.adventure.PaperAdventure.asVanilla(io.papermc.paper.configuration.GlobalConfiguration.get().packetLimiter.kickMessage)), PacketSendListener.thenRun(() -> { + this.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(io.papermc.paper.configuration.GlobalConfiguration.get().packetLimiter.kickMessage)); -+ }); ++ })); + this.setReadOnly(); + this.stopReadingPackets = true; + }