11From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
22From: Aikar <aikar@aikar.co>
33Date: Wed, 6 May 2020 04:53:35 -0400
4- Subject: [PATCH] Optimize Network Manager and add advanced packet support
4+ Subject: [PATCH] Optimize Connection and add advanced packet support
55
66Adds ability for 1 packet to bundle other packets to follow it
77Adds ability for a packet to delay sending more packets until a state is ready.
@@ -28,7 +28,7 @@ and then catch exceptions and close if they fire.
2828Part of this commit was authored by: Spottedleaf, sandtechnology
2929
3030diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java
31- index 6fb9eb8078e934d3d610ec58f58e0a47bc3437b8..8e6d1cc768edff5ed555dea7843156113558954a 100644
31+ index 6fb9eb8078e934d3d610ec58f58e0a47bc3437b8..d65a8f0cc7386270471338454d35c52bdbcd8e82 100644
3232--- a/net/minecraft/network/Connection.java
3333+++ b/net/minecraft/network/Connection.java
3434@@ -65,7 +65,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
@@ -102,37 +102,34 @@ index 6fb9eb8078e934d3d610ec58f58e0a47bc3437b8..8e6d1cc768edff5ed555dea784315611
102102 }
103103 }
104104
105- @@ -419,22 +450,42 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
106- }
105+ @@ -420,21 +451,41 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
107106 }
108107
109- - private void doSendPacket(final Packet<?> packet, final @Nullable ChannelFutureListener listener, final boolean flush) {
110- + private void doSendPacket(final Packet<?> packet, @Nullable final ChannelFutureListener listener, final boolean flush) {
108+ private void doSendPacket(final Packet<?> packet, final @Nullable ChannelFutureListener listener, final boolean flush) {
111109+ // Paper start - Optimize network
112110+ final net.minecraft.server.level.ServerPlayer player = this.getPlayer();
113111+ if (!this.isConnected()) {
114112+ packet.onPacketDispatchFinish(player, null);
115113+ return;
116114+ }
117115+ try {
118- + final ChannelFuture channelFuture ;
116+ + final ChannelFuture future ;
119117+ // Paper end - Optimize network
120118 if (listener != null) {
121119- ChannelFuture future = flush ? this.channel.writeAndFlush(packet) : this.channel.write(packet);
122- - future.addListener(listener);
123- + channelFuture = flush ? this.channel.writeAndFlush(packet) : this.channel.write(packet); // Paper - Optimize network
124- + channelFuture.addListener(listener);
120+ + future = flush ? this.channel.writeAndFlush(packet) : this.channel.write(packet); // Paper - Optimize network
121+ future.addListener(listener);
125122 } else if (flush) {
126123- this.channel.writeAndFlush(packet, this.channel.voidPromise());
127- + channelFuture = this.channel.writeAndFlush(packet, this.channel.voidPromise()); // Paper - Optimize network
124+ + future = this.channel.writeAndFlush(packet, this.channel.voidPromise()); // Paper - Optimize network
128125 } else {
129126- this.channel.write(packet, this.channel.voidPromise());
130- + channelFuture = this.channel.write(packet, this.channel.voidPromise()); // Paper - Optimize network
127+ + future = this.channel.write(packet, this.channel.voidPromise()); // Paper - Optimize network
131128+ }
132129+
133130+ // Paper start - Optimize network
134131+ if (packet.hasFinishListener()) {
135- + channelFuture .addListener((ChannelFutureListener) future -> packet.onPacketDispatchFinish(player, future ));
132+ + future .addListener((ChannelFutureListener) f -> packet.onPacketDispatchFinish(player, f ));
136133+ }
137134+ } catch (final Exception e) {
138135+ LOGGER.error("NetworkException: {}", player, e);
@@ -282,8 +279,8 @@ index 6fb9eb8078e934d3d610ec58f58e0a47bc3437b8..8e6d1cc768edff5ed555dea784315611
282279+ }
283280+ }
284281+
285- + private static boolean canSendImmediate(final Connection networkManager , final net.minecraft.network.protocol.Packet<?> packet) {
286- + return networkManager .isPending || networkManager .packetListener.protocol() != ConnectionProtocol.PLAY ||
282+ + private static boolean canSendImmediate(final Connection connection , final net.minecraft.network.protocol.Packet<?> packet) {
283+ + return connection .isPending || connection .packetListener.protocol() != ConnectionProtocol.PLAY ||
287284+ packet instanceof net.minecraft.network.protocol.common.ClientboundKeepAlivePacket ||
288285+ packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket ||
289286+ packet instanceof net.minecraft.network.protocol.game.ClientboundSystemChatPacket ||
@@ -375,7 +372,7 @@ index 1480d0db90f5797e3dee19503e52d1e783493ac3..f6cfce2ce30a426cd57a89f3f8ccf144
375372+ // Paper end
376373 }
377374diff --git a/net/minecraft/server/network/ServerConnectionListener.java b/net/minecraft/server/network/ServerConnectionListener.java
378- index d59f367a2a93a30b7cd28d3ac0252ca74bf94b28..ea7512ac3866d4d02502a78c32e35ebc186b3838 100644
375+ index e72bd8239eed69be774373b49cdb05fbf0799030..22276be80b8729884c797b96c93bf0965ca9eed1 100644
379376--- a/net/minecraft/server/network/ServerConnectionListener.java
380377+++ b/net/minecraft/server/network/ServerConnectionListener.java
381378@@ -51,11 +51,13 @@ public class ServerConnectionListener {
0 commit comments