diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs
index b9128587..4e9fdfab 100644
--- a/MinecraftClient/Protocol/Handlers/Protocol18.cs
+++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs
@@ -3162,26 +3162,42 @@ namespace MinecraftClient.Protocol.Handlers
/// packet Data
private void SendPacket(int packetId, IEnumerable packetData)
{
+ byte[] payload = packetData as byte[] ?? packetData.ToArray();
+
if (handler.GetNetworkPacketCaptureEnabled())
{
- var clone = packetData.ToList();
- handler.OnNetworkPacket(packetId, clone, currentState == CurrentState.Login, false);
+ handler.OnNetworkPacket(packetId, payload.ToList(), currentState == CurrentState.Login, false);
}
//log.Info($"[C -> S] Sending packet {packetId:X} > {dataTypes.ByteArrayToString(packetData.ToArray())}");
//The inner packet
- var thePacket = dataTypes.ConcatBytes(DataTypes.GetVarInt(packetId), packetData.ToArray());
+ byte[] packetIdBytes = DataTypes.GetVarInt(packetId);
+ byte[] thePacket = new byte[packetIdBytes.Length + payload.Length];
+ Buffer.BlockCopy(packetIdBytes, 0, thePacket, 0, packetIdBytes.Length);
+ Buffer.BlockCopy(payload, 0, thePacket, packetIdBytes.Length, payload.Length);
if (compression_treshold >= 0) //Compression enabled?
{
- thePacket = thePacket.Length >= compression_treshold
- ? dataTypes.ConcatBytes(DataTypes.GetVarInt(thePacket.Length), ZlibUtils.Compress(thePacket))
- : dataTypes.ConcatBytes(DataTypes.GetVarInt(0), thePacket);
+ byte[] compressedHeader = thePacket.Length >= compression_treshold
+ ? DataTypes.GetVarInt(thePacket.Length)
+ : DataTypes.GetVarInt(0);
+ byte[] compressedPayload = thePacket.Length >= compression_treshold
+ ? ZlibUtils.Compress(thePacket)
+ : thePacket;
+
+ byte[] compressedPacket = new byte[compressedHeader.Length + compressedPayload.Length];
+ Buffer.BlockCopy(compressedHeader, 0, compressedPacket, 0, compressedHeader.Length);
+ Buffer.BlockCopy(compressedPayload, 0, compressedPacket, compressedHeader.Length, compressedPayload.Length);
+ thePacket = compressedPacket;
}
//log.Debug("[C -> S] Sending packet " + packetId + " > " + dataTypes.ByteArrayToString(dataTypes.ConcatBytes(dataTypes.GetVarInt(thePacket.Length), thePacket)));
- socketWrapper.SendDataRAW(dataTypes.ConcatBytes(DataTypes.GetVarInt(thePacket.Length), thePacket));
+ byte[] packetLengthBytes = DataTypes.GetVarInt(thePacket.Length);
+ byte[] fullPacket = new byte[packetLengthBytes.Length + thePacket.Length];
+ Buffer.BlockCopy(packetLengthBytes, 0, fullPacket, 0, packetLengthBytes.Length);
+ Buffer.BlockCopy(thePacket, 0, fullPacket, packetLengthBytes.Length, thePacket.Length);
+ socketWrapper.SendDataRAW(fullPacket);
}
///