API patches
This commit is contained in:
		
					parent
					
						
							
								bea0e28dc4
							
						
					
				
			
			
				commit
				
					
						b7dd55ce72
					
				
			
		
					 962 changed files with 62 additions and 59 deletions
				
			
		|  | @ -1,68 +0,0 @@ | |||
| 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/network/ConnectionProtocol.java b/src/main/java/net/minecraft/network/ConnectionProtocol.java
 | ||||
| index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||||
| --- a/src/main/java/net/minecraft/network/ConnectionProtocol.java
 | ||||
| +++ b/src/main/java/net/minecraft/network/ConnectionProtocol.java
 | ||||
| @@ -0,0 +0,0 @@ public enum ConnectionProtocol {
 | ||||
|   | ||||
|          @Nullable | ||||
|          public Packet<?> createPacket(int id, FriendlyByteBuf buf) { | ||||
| +            if (id < 0 || id >= this.idToDeserializer.size()) return null; // Paper
 | ||||
|              Function<FriendlyByteBuf, ? extends Packet<T>> function = this.idToDeserializer.get(id); | ||||
|              return function != null ? function.apply(buf) : null; | ||||
|          } | ||||
| diff --git a/src/main/java/net/minecraft/network/Varint21FrameDecoder.java b/src/main/java/net/minecraft/network/Varint21FrameDecoder.java
 | ||||
| index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||||
| --- a/src/main/java/net/minecraft/network/Varint21FrameDecoder.java
 | ||||
| +++ b/src/main/java/net/minecraft/network/Varint21FrameDecoder.java
 | ||||
| @@ -0,0 +0,0 @@ import io.netty.handler.codec.CorruptedFrameException;
 | ||||
|  import java.util.List; | ||||
|   | ||||
|  public class Varint21FrameDecoder extends ByteToMessageDecoder { | ||||
| +    private final byte[] lenBuf = new byte[3]; // Paper
 | ||||
| +    @Override
 | ||||
|      protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) { | ||||
| +        // 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[] bs = new byte[3];
 | ||||
| +        // Paper start - reuse temporary length buffer
 | ||||
| +        byte[] bs = lenBuf;
 | ||||
| +        java.util.Arrays.fill(bs, (byte) 0);
 | ||||
| +        // Paper end
 | ||||
|   | ||||
|          for(int i = 0; i < bs.length; ++i) { | ||||
|              if (!byteBuf.isReadable()) { | ||||
| diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
 | ||||
| index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||||
| --- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java
 | ||||
| +++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
 | ||||
| @@ -0,0 +0,0 @@ public class PacketUtils {
 | ||||
|                      try (co.aikar.timings.Timing ignored = timing.startTiming()) { // Paper - timings | ||||
|                          packet.handle(listener); | ||||
|                      } catch (Exception exception) { | ||||
| -                        if (listener.shouldPropagateHandlingExceptions()) {
 | ||||
| -                            throw exception;
 | ||||
| +                        net.minecraft.network.Connection networkmanager = listener.getConnection();
 | ||||
| +                        if (networkmanager.getPlayer() != null) {
 | ||||
| +                            LOGGER.error("Error whilst processing packet {} for {}[{}]", packet, networkmanager.getPlayer().getScoreboardName(), networkmanager.getRemoteAddress(), exception);
 | ||||
| +                        } else {
 | ||||
| +                            LOGGER.error("Error whilst processing packet {} for connection from {}", packet, networkmanager.getRemoteAddress(), exception);
 | ||||
|                          } | ||||
| -
 | ||||
| -                        PacketUtils.LOGGER.error("Failed to handle packet {}, suppressing error", packet, exception);
 | ||||
| +                        net.minecraft.network.chat.Component error = net.minecraft.network.chat.Component.literal("Packet processing error");
 | ||||
| +                        networkmanager.send(new net.minecraft.network.protocol.game.ClientboundDisconnectPacket(error), net.minecraft.network.PacketSendListener.thenRun(() -> networkmanager.disconnect(error)));
 | ||||
| +                        networkmanager.setReadOnly();
 | ||||
|                      } | ||||
|                  } else { | ||||
|                      PacketUtils.LOGGER.debug("Ignoring packet due to disconnection: {}", packet); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nassim Jahnke
				Nassim Jahnke