From 126382f55d63eb801e3a7f2b7f4b45fcc4a2c78f Mon Sep 17 00:00:00 2001 From: themode Date: Sun, 21 Mar 2021 13:22:49 +0100 Subject: [PATCH] Reduce memory allocation --- .../network/player/NettyPlayerConnection.java | 4 +--- .../minestom/server/utils/PacketUtils.java | 24 +++++++++---------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 009c85869..4b5c84f7d 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -171,11 +171,9 @@ public class NettyPlayerConnection extends PlayerConnection { return; } else if (message instanceof ServerPacket) { final ServerPacket serverPacket = (ServerPacket) message; - final ByteBuf buffer = PacketUtils.createFramedPacket(serverPacket, true); synchronized (tickBuffer) { - tickBuffer.writeBytes(buffer); + PacketUtils.createFramedPacket(serverPacket, true, tickBuffer); } - buffer.release(); return; } else if (message instanceof ByteBuf) { synchronized (tickBuffer) { diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 629577816..8707efd65 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -229,40 +229,38 @@ public final class PacketUtils { } /** - * Creates a "framed packet" (packet which can be send and understood by a Minecraft client) - * from a server packet. + * Writes a "framed packet" (packet which can be send and understood by a Minecraft client) + * from a server packet, directly into an output buffer. *

* Can be used if you want to store a raw buffer and send it later without the additional writing cost. * Compression is applied if {@link MinecraftServer#getCompressionThreshold()} is greater than 0. * * @param serverPacket the server packet to write - * @return the framed packet from the server one */ - @NotNull - public static ByteBuf createFramedPacket(@NotNull ServerPacket serverPacket, boolean directBuffer) { + public static void createFramedPacket(@NotNull ServerPacket serverPacket, boolean directBuffer, ByteBuf output) { ByteBuf packetBuf = writePacket(serverPacket); if (MinecraftServer.getCompressionThreshold() > 0) { ByteBuf compressedBuf = directBuffer ? BufUtils.getBuffer(true) : Unpooled.buffer(); - ByteBuf framedBuf = directBuffer ? BufUtils.getBuffer(true) : Unpooled.buffer(); final Deflater deflater = DEFLATER.get(); compressBuffer(deflater, null, packetBuf, compressedBuf); packetBuf.release(); - frameBuffer(compressedBuf, framedBuf); + frameBuffer(compressedBuf, output); compressedBuf.release(); - - return framedBuf; } else { - ByteBuf framedBuf = directBuffer ? BufUtils.getBuffer(true) : Unpooled.buffer(); - frameBuffer(packetBuf, framedBuf); + frameBuffer(packetBuf, output); packetBuf.release(); - - return framedBuf; } + } + @NotNull + public static ByteBuf createFramedPacket(@NotNull ServerPacket serverPacket, boolean directBuffer) { + ByteBuf framedBuf = directBuffer ? BufUtils.getBuffer(true) : Unpooled.buffer(); + createFramedPacket(serverPacket, directBuffer, framedBuf); + return framedBuf; } }