diff --git a/src/main/java/net/minestom/server/UpdateManager.java b/src/main/java/net/minestom/server/UpdateManager.java index 0d4982305..6b546efca 100644 --- a/src/main/java/net/minestom/server/UpdateManager.java +++ b/src/main/java/net/minestom/server/UpdateManager.java @@ -53,32 +53,36 @@ public final class UpdateManager { final EntityManager entityManager = MinecraftServer.getEntityManager(); updateExecutionService.scheduleAtFixedRate(() -> { - if (stopRequested) { - updateExecutionService.shutdown(); - return; + try { + if (stopRequested) { + updateExecutionService.shutdown(); + return; + } + + long currentTime = System.nanoTime(); + final long tickStart = System.currentTimeMillis(); + + // Tick start callbacks + doTickCallback(tickStartCallbacks, tickStart); + + // Waiting players update (newly connected clients waiting to get into the server) + entityManager.updateWaitingPlayers(); + + // Keep Alive Handling + entityManager.handleKeepAlive(tickStart); + + // Server tick (chunks/entities) + serverTick(tickStart); + + // the time that the tick took in nanoseconds + final long tickTime = System.nanoTime() - currentTime; + + // Tick end callbacks + doTickCallback(tickEndCallbacks, tickTime / 1000000L); + + } catch (Exception e) { + e.printStackTrace(); } - - long currentTime = System.nanoTime(); - final long tickStart = System.currentTimeMillis(); - - // Tick start callbacks - doTickCallback(tickStartCallbacks, tickStart); - - // Waiting players update (newly connected clients waiting to get into the server) - entityManager.updateWaitingPlayers(); - - // Keep Alive Handling - entityManager.handleKeepAlive(tickStart); - - // Server tick (chunks/entities) - serverTick(tickStart); - - // the time that the tick took in nanoseconds - final long tickTime = System.nanoTime() - currentTime; - - // Tick end callbacks - doTickCallback(tickEndCallbacks, tickTime / 1000000L); - }, 0, MinecraftServer.TICK_MS, TimeUnit.MILLISECONDS); } diff --git a/src/main/java/net/minestom/server/entity/EntityManager.java b/src/main/java/net/minestom/server/entity/EntityManager.java index ecfeb2f7e..cf6226d82 100644 --- a/src/main/java/net/minestom/server/entity/EntityManager.java +++ b/src/main/java/net/minestom/server/entity/EntityManager.java @@ -10,12 +10,12 @@ import net.minestom.server.instance.Instance; import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.packet.server.play.KeepAlivePacket; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.utils.async.AsyncUtils; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; import java.util.Queue; import java.util.UUID; -import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; public final class EntityManager { @@ -90,7 +90,7 @@ public final class EntityManager { playerInitialization.accept(player); } - CompletableFuture.runAsync(() -> { + AsyncUtils.runAsync(() -> { // Call pre login event AsyncPlayerPreLoginEvent asyncPlayerPreLoginEvent = new AsyncPlayerPreLoginEvent(player, player.getUsername(), player.getUuid()); player.callEvent(AsyncPlayerPreLoginEvent.class, asyncPlayerPreLoginEvent); diff --git a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java index 7b17b4b5f..69464be36 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java @@ -9,13 +9,13 @@ import net.minestom.server.extras.mojangAuth.MojangCrypt; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.utils.async.AsyncUtils; import net.minestom.server.utils.binary.BinaryReader; import org.jetbrains.annotations.NotNull; import javax.crypto.SecretKey; import java.math.BigInteger; import java.util.Arrays; -import java.util.concurrent.CompletableFuture; public class EncryptionResponsePacket implements ClientPreplayPacket { @@ -31,7 +31,7 @@ public class EncryptionResponsePacket implements ClientPreplayPacket { } final NettyPlayerConnection nettyConnection = (NettyPlayerConnection) connection; - CompletableFuture.runAsync(() -> { + AsyncUtils.runAsync(() -> { try { final String loginUsername = nettyConnection.getLoginUsername(); if (!Arrays.equals(nettyConnection.getNonce(), getNonce())) { diff --git a/src/main/java/net/minestom/server/utils/async/AsyncUtils.java b/src/main/java/net/minestom/server/utils/async/AsyncUtils.java new file mode 100644 index 000000000..c04d410c6 --- /dev/null +++ b/src/main/java/net/minestom/server/utils/async/AsyncUtils.java @@ -0,0 +1,19 @@ +package net.minestom.server.utils.async; + +import org.jetbrains.annotations.NotNull; + +import java.util.concurrent.CompletableFuture; + +public final class AsyncUtils { + + public static void runAsync(@NotNull Runnable runnable) { + CompletableFuture.runAsync(() -> { + try { + runnable.run(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + +}