Upstream has released updates that appears to apply and compile correctly Paper Changes: 81706e626 Make the shutdown thread try to shutdown on main 891824509 Prevent opening inventories when frozen e6d395cc8 Port 04-Util.patch from Tuinity (#3136) 59453f667 Fix incorrectly loading chunks on a cancelled interact event bdcc31caa Let invalid positioned entities clean up previous chunk by the chunkCheck
409 lines
23 KiB
Diff
409 lines
23 KiB
Diff
From 957fcd33cfe2e070f59f99907fd7aa11dcce9023 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=E3=84=97=E3=84=A0=CB=8B=20=E3=84=91=E3=84=A7=CB=8A?=
|
|
<tsao-chi@the-lingo.org>
|
|
Date: Sun, 5 Apr 2020 14:59:10 +0800
|
|
Subject: [PATCH] Optimizations for network
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java
|
|
index a85466bc7..324af1a12 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java
|
|
@@ -106,7 +106,7 @@ public final class StandardPaperServerListPingEventImpl extends PaperServerListP
|
|
}
|
|
|
|
// Send response
|
|
- networkManager.sendPacket(new PacketStatusOutServerInfo(ping));
|
|
+ networkManager.sendPacketAsync(new PacketStatusOutServerInfo(ping)); // Akarin - Async Sending packets
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
index 0532f975b..e7be1074b 100644
|
|
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
@@ -39,7 +39,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
if (throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - throttleTracker.get(address) < connectionThrottle) {
|
|
throttleTracker.put(address, currentTime);
|
|
chatmessage = new ChatMessage(com.destroystokyo.paper.PaperConfig.connectionThrottleKickMessage); // Paper - Configurable connection throttle kick message
|
|
- this.b.sendPacket(new PacketLoginOutDisconnect(chatmessage));
|
|
+ this.b.sendPacketAsync(new PacketLoginOutDisconnect(chatmessage)); // Akarin - Async Sending packets
|
|
this.b.close(chatmessage);
|
|
return;
|
|
}
|
|
@@ -66,11 +66,11 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
|
|
if (packethandshakinginsetprotocol.c() > SharedConstants.getGameVersion().getProtocolVersion()) {
|
|
chatmessage = new ChatMessage( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedServerMessage.replaceAll("'", "''"), SharedConstants.getGameVersion().getName() ) ); // Spigot
|
|
- this.b.sendPacket(new PacketLoginOutDisconnect(chatmessage));
|
|
+ this.b.sendPacketAsync(new PacketLoginOutDisconnect(chatmessage));
|
|
this.b.close(chatmessage);
|
|
} else if (packethandshakinginsetprotocol.c() < SharedConstants.getGameVersion().getProtocolVersion()) {
|
|
chatmessage = new ChatMessage( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedClientMessage.replaceAll("'", "''"), SharedConstants.getGameVersion().getName() ) ); // Spigot
|
|
- this.b.sendPacket(new PacketLoginOutDisconnect(chatmessage));
|
|
+ this.b.sendPacketAsync(new PacketLoginOutDisconnect(chatmessage));
|
|
this.b.close(chatmessage);
|
|
} else {
|
|
this.b.setPacketListener(new LoginListener(this.a, this.b));
|
|
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
|
|
index f1222fcb2..522cfed4c 100644
|
|
--- a/src/main/java/net/minecraft/server/LoginListener.java
|
|
+++ b/src/main/java/net/minecraft/server/LoginListener.java
|
|
@@ -111,6 +111,19 @@ public class LoginListener implements PacketLoginInListener {
|
|
|
|
}
|
|
|
|
+ // Akarin Start - Async Sending packets
|
|
+ public void disconnectAsync(IChatBaseComponent ichatbasecomponent) {
|
|
+ try {
|
|
+ LoginListener.LOGGER.info("Disconnecting {}: {}", this.d(), ichatbasecomponent.getString());
|
|
+ this.networkManager.sendPacketAsync(new PacketLoginOutDisconnect(ichatbasecomponent));
|
|
+ this.networkManager.close(ichatbasecomponent);
|
|
+ } catch (Exception exception) {
|
|
+ LoginListener.LOGGER.error("Error whilst disconnecting player", exception);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ // Akarin End - Async Sending packets
|
|
+
|
|
// Paper start - Cache authenticator threads
|
|
private static final AtomicInteger threadId = new AtomicInteger(0);
|
|
private static final java.util.concurrent.ExecutorService authenticatorPool = java.util.concurrent.Executors.newCachedThreadPool(
|
|
@@ -192,7 +205,7 @@ public class LoginListener implements PacketLoginInListener {
|
|
this.i = packetlogininstart.b();
|
|
if (this.server.getOnlineMode() && !this.networkManager.isLocal()) {
|
|
this.g = LoginListener.EnumProtocolState.KEY;
|
|
- this.networkManager.sendPacket(new PacketLoginOutEncryptionBegin("", this.server.getKeyPair().getPublic(), this.e));
|
|
+ this.networkManager.sendPacketAsync(new PacketLoginOutEncryptionBegin("", this.server.getKeyPair().getPublic(), this.e)); // Akarin - Async Sending packets
|
|
} else {
|
|
// Paper start - Velocity support
|
|
if (com.destroystokyo.paper.PaperConfig.velocitySupport) {
|
|
@@ -254,7 +267,7 @@ public class LoginListener implements PacketLoginInListener {
|
|
LoginListener.this.i = LoginListener.this.a(gameprofile);
|
|
LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT;
|
|
} else {
|
|
- LoginListener.this.disconnect(new ChatMessage("multiplayer.disconnect.unverified_username", new Object[0]));
|
|
+ LoginListener.this.disconnectAsync(new ChatMessage("multiplayer.disconnect.unverified_username", new Object[0])); // Akarin - Async Sending packets
|
|
LoginListener.LOGGER.error("Username '{}' tried to join with an invalid session", gameprofile.getName());
|
|
}
|
|
} catch (AuthenticationUnavailableException authenticationunavailableexception) {
|
|
@@ -267,7 +280,7 @@ public class LoginListener implements PacketLoginInListener {
|
|
if (com.destroystokyo.paper.PaperConfig.authenticationServersDownKickMessage != null) {
|
|
LoginListener.this.disconnect(new ChatComponentText(com.destroystokyo.paper.PaperConfig.authenticationServersDownKickMessage));
|
|
} else // Paper end
|
|
- LoginListener.this.disconnect(new ChatMessage("multiplayer.disconnect.authservers_down", new Object[0]));
|
|
+ LoginListener.this.disconnectAsync(new ChatMessage("multiplayer.disconnect.authservers_down", new Object[0])); // Akarin - Async Sending packets
|
|
LoginListener.LOGGER.error("Couldn't verify username because servers are unavailable");
|
|
}
|
|
// CraftBukkit start - catch all exceptions
|
|
@@ -376,7 +389,7 @@ public class LoginListener implements PacketLoginInListener {
|
|
return;
|
|
}
|
|
// Paper end
|
|
- this.disconnect(new ChatMessage("multiplayer.disconnect.unexpected_query_response", new Object[0]));
|
|
+ this.disconnectAsync(new ChatMessage("multiplayer.disconnect.unexpected_query_response", new Object[0])); // Akarin - Async Sending packets
|
|
}
|
|
|
|
protected GameProfile a(GameProfile gameprofile) {
|
|
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
index 96a785af2..c5e32e424 100644
|
|
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
|
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
@@ -43,6 +43,8 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
});
|
|
private final EnumProtocolDirection h;
|
|
private final Queue<NetworkManager.QueuedPacket> packetQueue = Queues.newConcurrentLinkedQueue(); private final Queue<NetworkManager.QueuedPacket> getPacketQueue() { return this.packetQueue; } // Paper - OBFHELPER
|
|
+ private boolean handled = false; // Akarin - free packet queue
|
|
+ private EnumProtocol protocol; // Akarin - avoid map lookup
|
|
public Channel channel;
|
|
public SocketAddress socketAddress; public void setSpoofedRemoteAddress(SocketAddress address) { this.socketAddress = address; } // Paper - OBFHELPER
|
|
// Spigot Start
|
|
@@ -88,6 +90,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
|
|
public void setProtocol(EnumProtocol enumprotocol) {
|
|
this.channel.attr(NetworkManager.c).set(enumprotocol);
|
|
+ protocol = enumprotocol; // Akarin - avoid map lookup
|
|
this.channel.config().setAutoRead(true);
|
|
NetworkManager.LOGGER.debug("Enabled auto read");
|
|
}
|
|
@@ -175,8 +178,8 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
|
|
private void dispatchPacket(Packet<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> genericFutureListener) { this.b(packet, genericFutureListener); } // Paper - OBFHELPER
|
|
private void b(Packet<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> genericfuturelistener) {
|
|
- EnumProtocol enumprotocol = EnumProtocol.a(packet);
|
|
- EnumProtocol enumprotocol1 = (EnumProtocol) this.channel.attr(NetworkManager.c).get();
|
|
+ EnumProtocol enumprotocol = packet.protocol();//EnumProtocol.a(packet); // Akarin - avoid map lookup
|
|
+ EnumProtocol enumprotocol1 = protocol;//(EnumProtocol) this.channel.attr(NetworkManager.c).get(); // Akarin - avoid map lookup
|
|
|
|
++this.q;
|
|
if (enumprotocol1 != enumprotocol) {
|
|
@@ -184,7 +187,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
this.channel.config().setAutoRead(false);
|
|
}
|
|
|
|
- if (this.channel.eventLoop().inEventLoop()) {
|
|
+ if (false && this.channel.eventLoop().inEventLoop()) { // Akarin - Async Sending packets
|
|
if (enumprotocol != enumprotocol1) {
|
|
this.setProtocol(enumprotocol);
|
|
}
|
|
@@ -223,9 +226,51 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
|
|
}
|
|
|
|
+ // Akarin Start - Async Sending packets - multiple packets, copied from above
|
|
+ public void sendPacketAsync(Packet<?> packet) {
|
|
+ EnumProtocol enumprotocol = packet.protocol();
|
|
+ EnumProtocol enumprotocol1 = protocol;
|
|
+
|
|
+ ++this.q;
|
|
+ if (enumprotocol1 != enumprotocol) {
|
|
+ NetworkManager.LOGGER.debug("Disabled auto read");
|
|
+ this.channel.config().setAutoRead(false);
|
|
+ this.setProtocol(enumprotocol);
|
|
+ }
|
|
+
|
|
+ ChannelFuture channelfuture = this.channel.writeAndFlush(packet);
|
|
+
|
|
+ channelfuture.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
|
|
+
|
|
+ }
|
|
+
|
|
+ public void sendPackets(Packet<?> packet, Packet<?> ...packets) {
|
|
+ EnumProtocol enumprotocol = packet.protocol();
|
|
+
|
|
+ ++this.q;
|
|
+ if (protocol != enumprotocol) {
|
|
+ NetworkManager.LOGGER.debug("Disabled auto read");
|
|
+ this.channel.config().setAutoRead(false);
|
|
+ }
|
|
+
|
|
+ this.channel.eventLoop().execute(() -> {
|
|
+ if (enumprotocol != protocol) {
|
|
+ this.setProtocol(enumprotocol);
|
|
+ }
|
|
+
|
|
+ this.channel.write(packet).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
|
|
+ for (Packet<?> pkt : packets) {
|
|
+ this.channel.write(pkt).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
|
|
+ }
|
|
+ this.channel.flush();
|
|
+ });
|
|
+ }
|
|
+ // Akarin End
|
|
+
|
|
// Paper start - Async-Anti-Xray - Stop dispatching further packets and return false if the peeked packet is a chunk packet which is not ready
|
|
private boolean sendPacketQueue() { return this.o(); } // OBFHELPER // void -> boolean
|
|
private boolean o() { // void -> boolean
|
|
+ if (!handled) { // Akarin - free packet queue
|
|
if (this.channel != null && this.channel.isOpen()) {
|
|
Queue queue = this.packetQueue;
|
|
|
|
@@ -245,6 +290,8 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
|
|
}
|
|
}
|
|
+ handled = true; // Akarin - free packet queue
|
|
+ } // Akarin - free packet queue
|
|
|
|
return true; // Return true if all packets were dispatched
|
|
}
|
|
@@ -260,9 +307,9 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
((PlayerConnection) this.packetListener).tick();
|
|
}
|
|
|
|
- if (this.channel != null) {
|
|
- if (enableExplicitFlush) this.channel.eventLoop().execute(() -> this.channel.flush()); // Paper - we don't need to explicit flush here, but allow opt in incase issues are found to a better version
|
|
- }
|
|
+ //if (this.channel != null) { // Akarin - already did
|
|
+ //if (enableExplicitFlush) this.channel.eventLoop().execute(() -> this.channel.flush()); // Paper - we don't need to explicit flush here, but allow opt in incase issues are found to a better version
|
|
+ //}
|
|
|
|
if (this.t++ % 20 == 0) {
|
|
this.s = this.s * 0.75F + (float) this.q * 0.25F;
|
|
diff --git a/src/main/java/net/minecraft/server/Packet.java b/src/main/java/net/minecraft/server/Packet.java
|
|
index 8d0965a05..7e27cd280 100644
|
|
--- a/src/main/java/net/minecraft/server/Packet.java
|
|
+++ b/src/main/java/net/minecraft/server/Packet.java
|
|
@@ -20,4 +20,10 @@ public interface Packet<T extends PacketListener> {
|
|
default boolean a() {
|
|
return false;
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ default EnumProtocol protocol() {
|
|
+ return EnumProtocol.PLAY;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketLoginOutCustomPayload.java b/src/main/java/net/minecraft/server/PacketLoginOutCustomPayload.java
|
|
index 7eb230f1b..d01cac0bd 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketLoginOutCustomPayload.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketLoginOutCustomPayload.java
|
|
@@ -41,4 +41,11 @@ public class PacketLoginOutCustomPayload implements Packet<PacketLoginOutListene
|
|
public void a(PacketLoginOutListener packetloginoutlistener) {
|
|
packetloginoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.LOGIN;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java b/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java
|
|
index e5094f55f..a5d9b6d94 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java
|
|
@@ -25,4 +25,11 @@ public class PacketLoginOutDisconnect implements Packet<PacketLoginOutListener>
|
|
public void a(PacketLoginOutListener packetloginoutlistener) {
|
|
packetloginoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.LOGIN;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java b/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java
|
|
index b0d6342c3..eeabb54c4 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java
|
|
@@ -34,4 +34,11 @@ public class PacketLoginOutEncryptionBegin implements Packet<PacketLoginOutListe
|
|
public void a(PacketLoginOutListener packetloginoutlistener) {
|
|
packetloginoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.LOGIN;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java b/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java
|
|
index fa0653a7e..d3b5f83d5 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java
|
|
@@ -25,4 +25,11 @@ public class PacketLoginOutSetCompression implements Packet<PacketLoginOutListen
|
|
public void a(PacketLoginOutListener packetloginoutlistener) {
|
|
packetloginoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.LOGIN;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java b/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java
|
|
index 54c290471..75d7bc196 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java
|
|
@@ -34,4 +34,11 @@ public class PacketLoginOutSuccess implements Packet<PacketLoginOutListener> {
|
|
public void a(PacketLoginOutListener packetloginoutlistener) {
|
|
packetloginoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.LOGIN;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java
|
|
index 4bb21c48b..06af567fc 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketStatusListener.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketStatusListener.java
|
|
@@ -143,7 +143,7 @@ public class PacketStatusListener implements PacketStatusInListener {
|
|
|
|
@Override
|
|
public void a(PacketStatusInPing packetstatusinping) {
|
|
- this.networkManager.sendPacket(new PacketStatusOutPong(packetstatusinping.b()));
|
|
+ this.networkManager.sendPacketAsync(new PacketStatusOutPong(packetstatusinping.b())); // Akarin - Async Sending packets
|
|
this.networkManager.close(PacketStatusListener.a);
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketStatusOutPong.java b/src/main/java/net/minecraft/server/PacketStatusOutPong.java
|
|
index 94a0da87d..577c6ef9c 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketStatusOutPong.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketStatusOutPong.java
|
|
@@ -25,4 +25,11 @@ public class PacketStatusOutPong implements Packet<PacketStatusOutListener> {
|
|
public void a(PacketStatusOutListener packetstatusoutlistener) {
|
|
packetstatusoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.STATUS;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java b/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java
|
|
index 50d5fb62e..4da7a2c1a 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java
|
|
@@ -28,4 +28,11 @@ public class PacketStatusOutServerInfo implements Packet<PacketStatusOutListener
|
|
public void a(PacketStatusOutListener packetstatusoutlistener) {
|
|
packetstatusoutlistener.a(this);
|
|
}
|
|
+
|
|
+ // Akarin start - add protocol
|
|
+ @Override
|
|
+ public EnumProtocol protocol() {
|
|
+ return EnumProtocol.STATUS;
|
|
+ }
|
|
+ // Akarin end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index e1225d501..3d0397620 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -284,9 +284,9 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
MinecraftServer minecraftserver = this.minecraftServer;
|
|
NetworkManager networkmanager = this.networkManager;
|
|
|
|
- this.networkManager.getClass();
|
|
+ //this.networkManager.getClass(); // Akarin - decompile fixes
|
|
// CraftBukkit - Don't wait
|
|
- minecraftserver.scheduleOnMain(networkmanager::handleDisconnection); // Paper
|
|
+ //minecraftserver.scheduleOnMain(networkmanager::handleDisconnection); // Paper // Akarin - Async Sending packets - already did
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
|
index 6d6fbf2f5..4b549ccc4 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
|
@@ -159,13 +159,15 @@ public abstract class PlayerList {
|
|
// Spigot - view distance
|
|
playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), WorldData.c(worlddata.getSeed()), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager().getType(), this.getMaxPlayers(), worlddata.getType(), worldserver.spigotConfig.viewDistance, flag1, !flag));
|
|
entityplayer.getBukkitEntity().sendSupportedChannels(); // CraftBukkit
|
|
- playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName())));
|
|
- playerconnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
|
|
- playerconnection.sendPacket(new PacketPlayOutAbilities(entityplayer.abilities));
|
|
- playerconnection.sendPacket(new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex));
|
|
- playerconnection.sendPacket(new PacketPlayOutRecipeUpdate(this.server.getCraftingManager().b()));
|
|
- playerconnection.sendPacket(new PacketPlayOutTags(this.server.getTagRegistry()));
|
|
- playerconnection.sendPacket(new PacketPlayOutEntityStatus(entityplayer, (byte) (worldserver.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO) ? 22 : 23))); // Paper - fix this rule not being initialized on the client
|
|
+ // Akarin Start
|
|
+ playerconnection.networkManager.sendPackets(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName())),
|
|
+ new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked()),
|
|
+ new PacketPlayOutAbilities(entityplayer.abilities),
|
|
+ new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex),
|
|
+ new PacketPlayOutRecipeUpdate(this.server.getCraftingManager().b()),
|
|
+ new PacketPlayOutTags(this.server.getTagRegistry()),
|
|
+ new PacketPlayOutEntityStatus(entityplayer, (byte) (worldserver.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO) ? 22 : 23))); // Paper - fix this rule not being initialized on the client
|
|
+ // Akarin End
|
|
this.d(entityplayer);
|
|
entityplayer.getStatisticManager().c();
|
|
entityplayer.B().a(entityplayer);
|
|
--
|
|
2.20.1
|
|
|