2021-04-30 01:48:32 +02:00
From 25efdf442b60a21767250917e2d35da26d92372d Mon Sep 17 00:00:00 2001
2019-08-17 22:41:28 +02:00
From: Mark Vainomaa <mikroskeem@mikroskeem.eu>
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
2021-04-30 01:48:32 +02:00
index 3a686e60..0dffc8d2 100644
2019-08-17 22:41:28 +02:00
--- a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java
2020-03-07 23:50:46 +01:00
@@ -54,6 +54,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
{
TO_SERVER.registerPacket(
Handshake.class,
+ Handshake::new, // Waterfall - speed up packet construction
map( ProtocolConstants.MINECRAFT_1_8, 0x00 )
);
}
2020-03-07 23:50:46 +01:00
@@ -65,6 +66,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
{
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 ),
2020-08-12 15:44:07 +02:00
@@ -75,6 +77,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
TO_CLIENT.registerPacket(
Login.class,
+ Login::new, // Waterfall - speed up packet construction
map( ProtocolConstants.MINECRAFT_1_8, 0x01 ),
map( ProtocolConstants.MINECRAFT_1_9, 0x23 ),
2019-12-10 23:53:39 +01:00
map( ProtocolConstants.MINECRAFT_1_13, 0x25 ),
2020-08-12 15:44:07 +02:00
@@ -84,6 +87,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
TO_CLIENT.registerPacket(
Chat.class,
+ Chat::new, // Waterfall - speed up packet construction
map( ProtocolConstants.MINECRAFT_1_8, 0x02 ),
map( ProtocolConstants.MINECRAFT_1_9, 0x0F ),
2019-12-10 23:53:39 +01:00
map( ProtocolConstants.MINECRAFT_1_13, 0x0E ),
2020-08-12 15:44:07 +02:00
@@ -92,6 +96,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2020-08-12 15:44:07 +02:00
@@ -104,6 +109,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
TO_CLIENT.registerPacket(
BossBar.class,
+ BossBar::new, // Waterfall - speed up packet construction
2019-12-10 23:53:39 +01:00
map( ProtocolConstants.MINECRAFT_1_9, 0x0C ),
2020-06-23 23:13:11 +02:00
map( ProtocolConstants.MINECRAFT_1_15, 0x0D ),
map( ProtocolConstants.MINECRAFT_1_16, 0x0C )
2021-04-30 01:48:32 +02:00
@@ -111,17 +117,20 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
// Waterfall start
TO_CLIENT.registerPacket(
EntityEffect.class,
+ EntityEffect::new, // Waterfall - speed up packet construction
map(ProtocolConstants.MINECRAFT_1_8, 0x1D),
2021-04-30 01:48:32 +02:00
map(ProtocolConstants.MINECRAFT_1_9, Integer.MIN_VALUE)
2019-08-17 22:41:28 +02:00
);
TO_CLIENT.registerPacket(
EntityRemoveEffect.class,
+ EntityRemoveEffect::new, // Waterfall - speed up packet construction
map(ProtocolConstants.MINECRAFT_1_8, 0x1E),
2021-04-30 01:48:32 +02:00
map(ProtocolConstants.MINECRAFT_1_9, Integer.MIN_VALUE)
);
2019-08-17 22:41:28 +02:00
// 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 ),
2021-04-30 01:48:32 +02:00
@@ -133,6 +142,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
TO_CLIENT.registerPacket(
TabCompleteResponse.class,
+ TabCompleteResponse::new, // Waterfall - speed up packet construction
map( ProtocolConstants.MINECRAFT_1_8, 0x3A ),
map( ProtocolConstants.MINECRAFT_1_9, 0x0E ),
2019-12-10 23:53:39 +01:00
map( ProtocolConstants.MINECRAFT_1_13, 0x10 ),
2021-04-30 01:48:32 +02:00
@@ -142,6 +152,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -152,6 +163,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -162,6 +174,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -172,6 +185,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -182,6 +196,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -192,6 +207,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -202,6 +218,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -212,6 +229,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -224,6 +242,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -234,6 +253,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
TO_CLIENT.registerPacket(
Commands.class,
+ Commands::new, // Waterfall - speed up packet construction
2019-12-10 23:53:39 +01:00
map( ProtocolConstants.MINECRAFT_1_13, 0x11 ),
2020-06-23 23:13:11 +02:00
map( ProtocolConstants.MINECRAFT_1_15, 0x12 ),
2020-08-12 15:44:07 +02:00
map( ProtocolConstants.MINECRAFT_1_16, 0x11 ),
2021-04-30 01:48:32 +02:00
@@ -241,12 +261,14 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
2020-03-07 23:50:46 +01:00
TO_CLIENT.registerPacket(
GameState.class,
+ GameState::new, // Waterfall - speed up packet construction
2020-06-23 23:13:11 +02:00
map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
2020-08-12 15:44:07 +02:00
map( ProtocolConstants.MINECRAFT_1_16, 0x1E ),
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D )
2020-03-07 23:50:46 +01:00
);
2019-08-17 22:41:28 +02:00
TO_CLIENT.registerPacket(
2019-12-10 20:58:34 +01:00
ViewDistance.class,
+ ViewDistance::new, // Waterfall - speed up packet construction
2019-12-10 23:53:39 +01:00
map( ProtocolConstants.MINECRAFT_1_14, 0x41 ),
2020-06-23 23:13:11 +02:00
map( ProtocolConstants.MINECRAFT_1_15, 0x42 ),
map( ProtocolConstants.MINECRAFT_1_16, 0x41 )
2021-04-30 01:48:32 +02:00
@@ -254,6 +276,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
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 ),
2021-04-30 01:48:32 +02:00
@@ -264,6 +287,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -272,6 +296,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -281,6 +306,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -289,6 +315,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
);
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 ),
2021-04-30 01:48:32 +02:00
@@ -305,19 +332,23 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
{
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 )
);
}
2021-04-30 01:48:32 +02:00
@@ -329,35 +360,43 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
{
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 )
);
}
2021-04-30 01:48:32 +02:00
@@ -408,7 +447,7 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
private final int protocolVersion;
private final TObjectIntMap<Class<? extends DefinedPacket>> packetMap = new TObjectIntHashMap<>( MAX_PACKET_ID );
- private final Constructor<? extends DefinedPacket>[] packetConstructors = new Constructor[ MAX_PACKET_ID ];
+ private final java.util.function.Supplier<? extends DefinedPacket>[] packetConstructors = new java.util.function.Supplier[ MAX_PACKET_ID ]; // Waterfall - speed up packet construction
}
@Data
2021-04-30 01:48:32 +02:00
@@ -476,21 +515,24 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
throw new BadPacketException( "Packet with id " + id + " outside of range " );
}
- Constructor<? extends DefinedPacket> constructor = protocolData.packetConstructors[id];
+ java.util.function.Supplier<? extends DefinedPacket> 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<? extends DefinedPacket> packetClass, ProtocolMapping... mappings)
+ private <P extends DefinedPacket> void registerPacket(Class<P> packetClass, java.util.function.Supplier<P> constructor, ProtocolMapping... mappings) // Waterfall - speed up packet construction
{
+ // Waterfall start - speed up packet construction
+ /*
try
{
Constructor<? extends DefinedPacket> constructor = packetClass.getDeclaredConstructor();
+ */ // Waterfall end
int mappingIndex = 0;
ProtocolMapping mapping = mappings[mappingIndex];
2021-04-30 01:48:32 +02:00
@@ -521,11 +563,32 @@ public enum Protocol
2019-08-17 22:41:28 +02:00
data.packetConstructors[mapping.packetID] = constructor;
2021-04-30 01:48:32 +02:00
} // Waterfall
2019-08-17 22:41:28 +02:00
}
+ // 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 <P extends DefinedPacket> void registerPacket(Class<P> packetClass, ProtocolMapping... mappings) {
+ java.util.function.Supplier<P> packetSupplier;
+ try {
+ Constructor<? extends DefinedPacket> 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<? extends DefinedPacket> packet, int version)
{
--
2021-04-30 01:48:32 +02:00
2.31.1
2019-08-17 22:41:28 +02:00