From 4f05887f3293945dfa89d730dfa8ac166a7f415f Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 15 Apr 2021 21:03:21 +0200 Subject: [PATCH 1/2] Send time packet on login --- src/main/java/net/minestom/server/instance/Instance.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/minestom/server/instance/Instance.java b/src/main/java/net/minestom/server/instance/Instance.java index 923e94efd..befe5b053 100644 --- a/src/main/java/net/minestom/server/instance/Instance.java +++ b/src/main/java/net/minestom/server/instance/Instance.java @@ -869,6 +869,7 @@ public abstract class Instance implements BlockModifier, Tickable, EventHandler, if (isPlayer) { final Player player = (Player) entity; getWorldBorder().init(player); + player.getPlayerConnection().sendPacket(createTimePacket()); } // Send all visible entities From 502ec22b92005c7c3cf1a81d37d093dfae8b5be8 Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 16 Apr 2021 01:52:46 +0200 Subject: [PATCH 2/2] Reduce synchronization overhead when writing tick buffer --- .../network/player/NettyPlayerConnection.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 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 5d7167d70..ed0fec697 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -183,23 +183,25 @@ public class NettyPlayerConnection extends PlayerConnection { return; } + // Retrieve safe copy + final ByteBuf copy; synchronized (tickBuffer) { - final ByteBuf copy = tickBuffer.copy(); - - ChannelFuture channelFuture = channel.write(new FramedPacket(copy)); - channelFuture.addListener(future -> copy.release()); - - // Netty debug - if (MinecraftServer.shouldProcessNettyErrors()) { - channelFuture.addListener(future -> { - if (!future.isSuccess() && channel.isActive()) { - MinecraftServer.getExceptionManager().handleException(future.cause()); - } - }); - } - + copy = tickBuffer.copy(); tickBuffer.clear(); } + + // Write copied buffer to netty + ChannelFuture channelFuture = channel.write(new FramedPacket(copy)); + channelFuture.addListener(future -> copy.release()); + + // Netty debug + if (MinecraftServer.shouldProcessNettyErrors()) { + channelFuture.addListener(future -> { + if (!future.isSuccess() && channel.isActive()) { + MinecraftServer.getExceptionManager().handleException(future.cause()); + } + }); + } } public void flush() {