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 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() {