geforkt von Mirrors/Paper
adadf16548
I'm not sure it was really helping, and now suspecting it might be causing issues Movement sucks
72 Zeilen
3.8 KiB
Diff
72 Zeilen
3.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Andrew Steinborn <git@steinborn.me>
|
|
Date: Sun, 5 Jul 2020 22:38:18 -0400
|
|
Subject: [PATCH] Optimize NetworkManager Exception Handling
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EnumProtocol.java b/src/main/java/net/minecraft/server/EnumProtocol.java
|
|
index d384b1e857a5fe21a93e6fb956a2bfd777d92de3..ec3c8ec6a7c0a835d0bab9872d0ead68b2ff54df 100644
|
|
--- a/src/main/java/net/minecraft/server/EnumProtocol.java
|
|
+++ b/src/main/java/net/minecraft/server/EnumProtocol.java
|
|
@@ -128,6 +128,7 @@ public enum EnumProtocol {
|
|
|
|
@Nullable
|
|
public Packet<?> a(int i) {
|
|
+ if (i < 0 || i >= this.b.size()) return null; // Paper
|
|
Supplier<? extends Packet<T>> supplier = (Supplier) this.b.get(i);
|
|
|
|
return supplier != null ? (Packet) supplier.get() : null;
|
|
diff --git a/src/main/java/net/minecraft/server/PacketSplitter.java b/src/main/java/net/minecraft/server/PacketSplitter.java
|
|
index cdaa8be90d16b0e9e2f92a3e2ed120b856feab54..2aaa8770edfd8acc6861c23176e405863858b275 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketSplitter.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketSplitter.java
|
|
@@ -9,11 +9,21 @@ import java.util.List;
|
|
|
|
public class PacketSplitter extends ByteToMessageDecoder {
|
|
|
|
+ private final byte[] lenBuf = new byte[3]; // Paper
|
|
public PacketSplitter() {}
|
|
|
|
protected void decode(ChannelHandlerContext channelhandlercontext, ByteBuf bytebuf, List<Object> list) throws Exception {
|
|
+ // Paper start - if channel is not active just discard the packet
|
|
+ if (!channelhandlercontext.channel().isActive()) {
|
|
+ bytebuf.skipBytes(bytebuf.readableBytes());
|
|
+ return;
|
|
+ }
|
|
+ // Paper end
|
|
bytebuf.markReaderIndex();
|
|
- byte[] abyte = new byte[3];
|
|
+ // Paper start - reuse temporary length buffer
|
|
+ byte[] abyte = lenBuf;
|
|
+ java.util.Arrays.fill(abyte, (byte) 0);
|
|
+ // Paper end
|
|
|
|
for (int i = 0; i < abyte.length; ++i) {
|
|
if (!bytebuf.isReadable()) {
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java
|
|
index eb3269e0ea3ce33d08e9eee3bca7cf434921e991..7ea293f38dedd6066601d94adbe175a31c502e1f 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java
|
|
@@ -22,6 +22,21 @@ public class PlayerConnectionUtils {
|
|
try (Timing ignored = timing.startTiming()) { // Paper - timings
|
|
packet.a(t0);
|
|
} // Paper - timings
|
|
+ // Paper start
|
|
+ catch (Exception e) {
|
|
+ NetworkManager networkmanager = t0.a();
|
|
+ if (networkmanager.getPlayer() != null) {
|
|
+ LOGGER.error("Error whilst processing packet {} for {}[{}]", packet, networkmanager.getPlayer().getName(), networkmanager.getSocketAddress(), e);
|
|
+ } else {
|
|
+ LOGGER.error("Error whilst processing packet {} for connection from {}", packet, networkmanager.getSocketAddress(), e);
|
|
+ }
|
|
+ ChatComponentText error = new ChatComponentText("Packet processing error");
|
|
+ networkmanager.sendPacket(new PacketPlayOutKickDisconnect(error), (future) -> {
|
|
+ networkmanager.close(error);
|
|
+ });
|
|
+ networkmanager.stopReading();
|
|
+ }
|
|
+ // Paper end
|
|
} else {
|
|
PlayerConnectionUtils.LOGGER.debug("Ignoring packet due to disconnection: " + packet);
|
|
}
|