diff --git a/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java index 8f00d096e..5a4e38ac3 100644 --- a/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java @@ -441,13 +441,17 @@ public class PlayerSocketConnection extends PlayerConnection { try { if (!channel.isConnected()) throw new ClosedChannelException(); try { - updateLocalBuffer(); - } catch (OutOfMemoryError e) { - this.waitingBuffers.clear(); - System.gc(); // Explicit gc forcing buffers to be collected - throw new ClosedChannelException(); - } - try { + if (waitingBuffers.isEmpty() && tickBuffer.getPlain().writeChannel(channel)) + return; // Fast exit if the tick buffer can be reused + + try { + updateLocalBuffer(); + } catch (OutOfMemoryError e) { + this.waitingBuffers.clear(); + System.gc(); // Explicit gc forcing buffers to be collected + throw new ClosedChannelException(); + } + // Write as much as possible from the waiting list Iterator iterator = waitingBuffers.iterator(); while (iterator.hasNext()) {