Print exceptions properly during server tick

This commit is contained in:
themode 2020-12-28 12:27:25 +01:00
parent 22aa9d01ed
commit 924fac562b
4 changed files with 52 additions and 29 deletions

View File

@ -53,6 +53,7 @@ public final class UpdateManager {
final EntityManager entityManager = MinecraftServer.getEntityManager(); final EntityManager entityManager = MinecraftServer.getEntityManager();
updateExecutionService.scheduleAtFixedRate(() -> { updateExecutionService.scheduleAtFixedRate(() -> {
try {
if (stopRequested) { if (stopRequested) {
updateExecutionService.shutdown(); updateExecutionService.shutdown();
return; return;
@ -79,6 +80,9 @@ public final class UpdateManager {
// Tick end callbacks // Tick end callbacks
doTickCallback(tickEndCallbacks, tickTime / 1000000L); doTickCallback(tickEndCallbacks, tickTime / 1000000L);
} catch (Exception e) {
e.printStackTrace();
}
}, 0, MinecraftServer.TICK_MS, TimeUnit.MILLISECONDS); }, 0, MinecraftServer.TICK_MS, TimeUnit.MILLISECONDS);
} }

View File

@ -10,12 +10,12 @@ import net.minestom.server.instance.Instance;
import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.packet.server.play.KeepAlivePacket; import net.minestom.server.network.packet.server.play.KeepAlivePacket;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.async.AsyncUtils;
import net.minestom.server.utils.validate.Check; import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Queue; import java.util.Queue;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer; import java.util.function.Consumer;
public final class EntityManager { public final class EntityManager {
@ -90,7 +90,7 @@ public final class EntityManager {
playerInitialization.accept(player); playerInitialization.accept(player);
} }
CompletableFuture.runAsync(() -> { AsyncUtils.runAsync(() -> {
// Call pre login event // Call pre login event
AsyncPlayerPreLoginEvent asyncPlayerPreLoginEvent = new AsyncPlayerPreLoginEvent(player, player.getUsername(), player.getUuid()); AsyncPlayerPreLoginEvent asyncPlayerPreLoginEvent = new AsyncPlayerPreLoginEvent(player, player.getUsername(), player.getUuid());
player.callEvent(AsyncPlayerPreLoginEvent.class, asyncPlayerPreLoginEvent); player.callEvent(AsyncPlayerPreLoginEvent.class, asyncPlayerPreLoginEvent);

View File

@ -9,13 +9,13 @@ import net.minestom.server.extras.mojangAuth.MojangCrypt;
import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket;
import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.NettyPlayerConnection;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.async.AsyncUtils;
import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryReader;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
public class EncryptionResponsePacket implements ClientPreplayPacket { public class EncryptionResponsePacket implements ClientPreplayPacket {
@ -31,7 +31,7 @@ public class EncryptionResponsePacket implements ClientPreplayPacket {
} }
final NettyPlayerConnection nettyConnection = (NettyPlayerConnection) connection; final NettyPlayerConnection nettyConnection = (NettyPlayerConnection) connection;
CompletableFuture.runAsync(() -> { AsyncUtils.runAsync(() -> {
try { try {
final String loginUsername = nettyConnection.getLoginUsername(); final String loginUsername = nettyConnection.getLoginUsername();
if (!Arrays.equals(nettyConnection.getNonce(), getNonce())) { if (!Arrays.equals(nettyConnection.getNonce(), getNonce())) {

View File

@ -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();
}
});
}
}