mirror of
https://github.com/PaperMC/Waterfall.git
synced 2025-01-01 05:27:47 +01:00
368 lines
18 KiB
Diff
368 lines
18 KiB
Diff
From e413f0e0f0a2f303075c1ae8d7b5074caa30b96d Mon Sep 17 00:00:00 2001
|
|
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
|
|
index 3214b30d..bf282cf0 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
|
|
@@ -54,6 +54,7 @@ public enum Protocol
|
|
{
|
|
TO_SERVER.registerPacket(
|
|
Handshake.class,
|
|
+ Handshake::new, // Waterfall - speed up packet construction
|
|
map( ProtocolConstants.MINECRAFT_1_8, 0x00 )
|
|
);
|
|
}
|
|
@@ -65,6 +66,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 ),
|
|
@@ -74,6 +76,7 @@ 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 ),
|
|
@@ -82,6 +85,7 @@ public enum Protocol
|
|
);
|
|
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 ),
|
|
@@ -90,6 +94,7 @@ public enum Protocol
|
|
);
|
|
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 ),
|
|
@@ -101,6 +106,7 @@ public enum Protocol
|
|
);
|
|
TO_CLIENT.registerPacket(
|
|
BossBar.class,
|
|
+ BossBar::new, // Waterfall - speed up packet construction
|
|
map( ProtocolConstants.MINECRAFT_1_9, 0x0C ),
|
|
map( ProtocolConstants.MINECRAFT_1_15, 0x0D ),
|
|
map( ProtocolConstants.MINECRAFT_1_16, 0x0C )
|
|
@@ -108,6 +114,7 @@ public enum Protocol
|
|
// 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),
|
|
@@ -120,6 +127,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),
|
|
@@ -132,6 +140,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 ),
|
|
@@ -142,6 +151,7 @@ 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 ),
|
|
@@ -150,6 +160,7 @@ public enum Protocol
|
|
);
|
|
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 ),
|
|
@@ -160,6 +171,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 ),
|
|
@@ -170,6 +182,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 ),
|
|
@@ -180,6 +193,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 ),
|
|
@@ -190,6 +204,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 ),
|
|
@@ -199,6 +214,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 ),
|
|
@@ -208,6 +224,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 ),
|
|
@@ -218,6 +235,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 ),
|
|
@@ -230,6 +248,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 ),
|
|
@@ -239,17 +258,21 @@ public enum Protocol
|
|
);
|
|
TO_CLIENT.registerPacket(
|
|
Commands.class,
|
|
+ Commands::new, // Waterfall - speed up packet construction
|
|
map( ProtocolConstants.MINECRAFT_1_13, 0x11 ),
|
|
map( ProtocolConstants.MINECRAFT_1_15, 0x12 ),
|
|
map( ProtocolConstants.MINECRAFT_1_16, 0x11 )
|
|
);
|
|
TO_CLIENT.registerPacket(
|
|
GameState.class,
|
|
+ GameState::new, // Waterfall - speed up packet construction
|
|
map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
|
|
- map( ProtocolConstants.MINECRAFT_1_16, 0x1E )
|
|
+ map( ProtocolConstants.MINECRAFT_1_16, 0x1E ),
|
|
+ map( ProtocolConstants.MINECRAFT_1_15, 0x1F )
|
|
);
|
|
TO_CLIENT.registerPacket(
|
|
ViewDistance.class,
|
|
+ ViewDistance::new, // Waterfall - speed up packet construction
|
|
map( ProtocolConstants.MINECRAFT_1_14, 0x41 ),
|
|
map( ProtocolConstants.MINECRAFT_1_15, 0x42 ),
|
|
map( ProtocolConstants.MINECRAFT_1_16, 0x41 )
|
|
@@ -257,6 +280,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 ),
|
|
@@ -267,6 +291,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 ),
|
|
@@ -275,6 +300,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 ),
|
|
@@ -284,6 +310,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 ),
|
|
@@ -292,6 +319,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 ),
|
|
@@ -308,19 +336,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 )
|
|
);
|
|
}
|
|
@@ -332,35 +364,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 )
|
|
);
|
|
}
|
|
@@ -411,7 +451,7 @@ public enum Protocol
|
|
|
|
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
|
|
@@ -479,21 +519,24 @@ public enum Protocol
|
|
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];
|
|
@@ -522,11 +565,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 <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)
|
|
{
|
|
--
|
|
2.27.0
|
|
|