diff --git a/BungeeCord-Patches/0054-Speed-up-packet-construction.patch b/BungeeCord-Patches/0054-Speed-up-packet-construction.patch new file mode 100644 index 0000000..d681283 --- /dev/null +++ b/BungeeCord-Patches/0054-Speed-up-packet-construction.patch @@ -0,0 +1,347 @@ +From 39f9f9796d555c8c373444a9afa988bb9b647e81 Mon Sep 17 00:00:00 2001 +From: Mark Vainomaa +Date: Wed, 17 Apr 2019 09:24:38 +0300 +Subject: [PATCH] Speed up packet construction + + +diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java +index 87093807..c2b0e12c 100644 +--- a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java ++++ b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java +@@ -53,6 +53,7 @@ public enum Protocol + { + TO_SERVER.registerPacket( + Handshake.class, ++ Handshake::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ) + ); + } +@@ -64,6 +65,7 @@ public enum Protocol + { + TO_CLIENT.registerPacket( + KeepAlive.class, ++ KeepAlive::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x1F ), + map( ProtocolConstants.MINECRAFT_1_13, 0x21 ), +@@ -71,18 +73,21 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + Login.class, ++ Login::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x01 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x23 ), + map( ProtocolConstants.MINECRAFT_1_13, 0x25 ) + ); + TO_CLIENT.registerPacket( + Chat.class, ++ Chat::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x02 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x0F ), + map( ProtocolConstants.MINECRAFT_1_13, 0x0E ) + ); + TO_CLIENT.registerPacket( + Respawn.class, ++ Respawn::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x07 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x33 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x34 ), +@@ -92,11 +97,13 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + BossBar.class, ++ BossBar::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_9, 0x0C ) + ); + // Waterfall start + TO_CLIENT.registerPacket( + EntityEffect.class, ++ EntityEffect::new, // Waterfall - speed up packet construction + map(ProtocolConstants.MINECRAFT_1_8, 0x1D), + map(ProtocolConstants.MINECRAFT_1_9, 0x4C), + map(ProtocolConstants.MINECRAFT_1_9_4, 0x4B), +@@ -107,6 +114,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + EntityRemoveEffect.class, ++ EntityRemoveEffect::new, // Waterfall - speed up packet construction + map(ProtocolConstants.MINECRAFT_1_8, 0x1E), + map(ProtocolConstants.MINECRAFT_1_9, 0x31), + map(ProtocolConstants.MINECRAFT_1_12, 0x32), +@@ -117,6 +125,7 @@ public enum Protocol + // Waterfall end + TO_CLIENT.registerPacket( + PlayerListItem.class, // PlayerInfo ++ PlayerListItem::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x38 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x2D ), + map( ProtocolConstants.MINECRAFT_1_12_1, 0x2E ), +@@ -125,12 +134,14 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + TabCompleteResponse.class, ++ TabCompleteResponse::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x3A ), + map( ProtocolConstants.MINECRAFT_1_9, 0x0E ), + map( ProtocolConstants.MINECRAFT_1_13, 0x10 ) + ); + TO_CLIENT.registerPacket( + ScoreboardObjective.class, ++ ScoreboardObjective::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x3B ), + map( ProtocolConstants.MINECRAFT_1_9, 0x3F ), + map( ProtocolConstants.MINECRAFT_1_12, 0x41 ), +@@ -140,6 +151,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + ScoreboardScore.class, ++ ScoreboardScore::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x3C ), + map( ProtocolConstants.MINECRAFT_1_9, 0x42 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x44 ), +@@ -149,6 +161,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + ScoreboardDisplay.class, ++ ScoreboardDisplay::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x3D ), + map( ProtocolConstants.MINECRAFT_1_9, 0x38 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x3A ), +@@ -158,6 +171,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + Team.class, ++ Team::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x3E ), + map( ProtocolConstants.MINECRAFT_1_9, 0x41 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x43 ), +@@ -167,6 +181,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + PluginMessage.class, ++ PluginMessage::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x3F ), + map( ProtocolConstants.MINECRAFT_1_9, 0x18 ), + map( ProtocolConstants.MINECRAFT_1_13, 0x19 ), +@@ -174,6 +189,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + Kick.class, ++ Kick::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x40 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x1A ), + map( ProtocolConstants.MINECRAFT_1_13, 0x1B ), +@@ -181,6 +197,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + Title.class, ++ Title::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x45 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x47 ), + map( ProtocolConstants.MINECRAFT_1_12_1, 0x48 ), +@@ -189,6 +206,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + PlayerListHeaderFooter.class, ++ PlayerListHeaderFooter::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x47 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x48 ), + map( ProtocolConstants.MINECRAFT_1_9_4, 0x47 ), +@@ -199,6 +217,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + EntityStatus.class, ++ EntityStatus::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x1A ), + map( ProtocolConstants.MINECRAFT_1_9, 0x1B ), + map( ProtocolConstants.MINECRAFT_1_13, 0x1C ), +@@ -206,6 +225,7 @@ public enum Protocol + ); + TO_CLIENT.registerPacket( + Commands.class, ++ Commands::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_13, 0x11 ) + ); + TO_CLIENT.registerPacket( +@@ -215,6 +235,7 @@ public enum Protocol + + TO_SERVER.registerPacket( + KeepAlive.class, ++ KeepAlive::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x0B ), + map( ProtocolConstants.MINECRAFT_1_12, 0x0C ), +@@ -224,6 +245,7 @@ public enum Protocol + ); + TO_SERVER.registerPacket( + Chat.class, ++ Chat::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x01 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x02 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x03 ), +@@ -232,6 +254,7 @@ public enum Protocol + ); + TO_SERVER.registerPacket( + TabCompleteRequest.class, ++ TabCompleteRequest::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x14 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x01 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x02 ), +@@ -241,6 +264,7 @@ public enum Protocol + ); + TO_SERVER.registerPacket( + ClientSettings.class, ++ ClientSettings::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x15 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x04 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x05 ), +@@ -249,6 +273,7 @@ public enum Protocol + ); + TO_SERVER.registerPacket( + PluginMessage.class, ++ PluginMessage::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x17 ), + map( ProtocolConstants.MINECRAFT_1_9, 0x09 ), + map( ProtocolConstants.MINECRAFT_1_12, 0x0A ), +@@ -265,19 +290,23 @@ public enum Protocol + { + TO_CLIENT.registerPacket( + StatusResponse.class, ++ StatusResponse::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ) + ); + TO_CLIENT.registerPacket( + PingPacket.class, ++ PingPacket::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x01 ) + ); + + TO_SERVER.registerPacket( + StatusRequest.class, ++ StatusRequest::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ) + ); + TO_SERVER.registerPacket( + PingPacket.class, ++ PingPacket::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x01 ) + ); + } +@@ -289,35 +318,43 @@ public enum Protocol + { + TO_CLIENT.registerPacket( + Kick.class, ++ Kick::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ) + ); + TO_CLIENT.registerPacket( + EncryptionRequest.class, ++ EncryptionRequest::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x01 ) + ); + TO_CLIENT.registerPacket( + LoginSuccess.class, ++ LoginSuccess::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x02 ) + ); + TO_CLIENT.registerPacket( + SetCompression.class, ++ SetCompression::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x03 ) + ); + TO_CLIENT.registerPacket( + LoginPayloadRequest.class, ++ LoginPayloadRequest::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_13, 0x04 ) + ); + + TO_SERVER.registerPacket( + LoginRequest.class, ++ LoginRequest::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x00 ) + ); + TO_SERVER.registerPacket( + EncryptionResponse.class, ++ EncryptionResponse::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_8, 0x01 ) + ); + TO_SERVER.registerPacket( + LoginPayloadResponse.class, ++ LoginPayloadResponse::new, // Waterfall - speed up packet construction + map( ProtocolConstants.MINECRAFT_1_13, 0x02 ) + ); + } +@@ -368,7 +405,7 @@ public enum Protocol + + private final int protocolVersion; + private final TObjectIntMap> packetMap = new TObjectIntHashMap<>( MAX_PACKET_ID ); +- private final Constructor[] packetConstructors = new Constructor[ MAX_PACKET_ID ]; ++ private final java.util.function.Supplier[] packetConstructors = new java.util.function.Supplier[ MAX_PACKET_ID ]; // Waterfall - speed up packet construction + } + + @Data +@@ -436,21 +473,24 @@ public enum Protocol + throw new BadPacketException( "Packet with id " + id + " outside of range " ); + } + +- Constructor constructor = protocolData.packetConstructors[id]; ++ java.util.function.Supplier constructor = protocolData.packetConstructors[id]; // Waterfall - speed up packet construction + try + { +- return ( constructor == null ) ? null : constructor.newInstance(); +- } catch ( ReflectiveOperationException ex ) ++ return ( constructor == null ) ? null : constructor.get(); // Waterfall - speed up packet construction ++ } catch ( Exception ex ) // Waterfall - speed up packet construction + { + throw new BadPacketException( "Could not construct packet with id " + id, ex ); + } + } + +- private void registerPacket(Class packetClass, ProtocolMapping... mappings) ++ private

void registerPacket(Class

packetClass, java.util.function.Supplier

constructor, ProtocolMapping... mappings) // Waterfall - speed up packet construction + { ++ // Waterfall start - speed up packet construction ++ /* + try + { + Constructor constructor = packetClass.getDeclaredConstructor(); ++ */ // Waterfall end + + int mappingIndex = 0; + ProtocolMapping mapping = mappings[mappingIndex]; +@@ -479,11 +519,32 @@ public enum Protocol + data.packetMap.put( packetClass, mapping.packetID ); + data.packetConstructors[mapping.packetID] = constructor; + } ++ // Waterfall start - speed up packet construction ++ /* + } catch ( NoSuchMethodException ex ) + { + throw new BadPacketException( "No NoArgsConstructor for packet class " + packetClass ); + } ++ */ // Waterfall end + } ++ // Waterfall start - speed up packet construction (backwards compat) ++ private

void registerPacket(Class

packetClass, ProtocolMapping... mappings) { ++ java.util.function.Supplier

packetSupplier; ++ try { ++ Constructor constructor = packetClass.getDeclaredConstructor(); ++ packetSupplier = () -> { ++ try { ++ return (P) constructor.newInstance(); ++ } catch (Exception e) { ++ throw new RuntimeException(e); ++ } ++ }; ++ } catch (ReflectiveOperationException e) { ++ throw new BadPacketException( "No NoArgsConstructor for packet class " + packetClass ); ++ } ++ registerPacket(packetClass, packetSupplier, mappings); ++ } ++ // Waterfall end + + final int getId(Class packet, int version) + { +-- +2.22.0 +