diff --git a/src/main/java/net/minestom/server/entity/PlayerProjectile.java b/src/main/java/net/minestom/server/entity/PlayerProjectile.java index d62c6e75fa5..79230ffeb04 100644 --- a/src/main/java/net/minestom/server/entity/PlayerProjectile.java +++ b/src/main/java/net/minestom/server/entity/PlayerProjectile.java @@ -98,7 +98,7 @@ public void shoot(@NotNull Point from, @NotNull Point to, double power, double s this.setInstance(instance, new Pos(from.x(), from.y(), from.z(), yaw, pitch)).whenComplete((result, throwable) -> { if (throwable != null) { - throwable.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(throwable); } else { this.setVelocity(v); } diff --git a/src/main/java/net/minestom/server/exception/ExceptionManager.java b/src/main/java/net/minestom/server/exception/ExceptionManager.java index 1ee7870e905..14b2d21a3d2 100644 --- a/src/main/java/net/minestom/server/exception/ExceptionManager.java +++ b/src/main/java/net/minestom/server/exception/ExceptionManager.java @@ -2,12 +2,16 @@ import net.minestom.server.MinecraftServer; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Manages the handling of exceptions. */ public final class ExceptionManager { + private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionManager.class); + private ExceptionHandler exceptionHandler; /** @@ -18,7 +22,7 @@ public final class ExceptionManager { public void handleException(Throwable e) { if (e instanceof OutOfMemoryError) { // OOM should be handled manually - e.printStackTrace(); + LOGGER.error("OOM error", e); MinecraftServer.stopCleanly(); return; } diff --git a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java index 10e47b03da0..d965ae05d39 100644 --- a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java +++ b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java @@ -1,5 +1,6 @@ package net.minestom.server.extras.velocity; +import net.minestom.server.MinecraftServer; import net.minestom.server.extras.MojangAuth; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.utils.validate.Check; @@ -66,7 +67,7 @@ public static boolean checkIntegrity(@NotNull NetworkBuffer buffer) { return false; } } catch (NoSuchAlgorithmException | InvalidKeyException e) { - e.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(e); } final int version = buffer.read(VAR_INT); return version == SUPPORTED_FORWARDING_VERSION; diff --git a/src/main/java/net/minestom/server/instance/AnvilLoader.java b/src/main/java/net/minestom/server/instance/AnvilLoader.java index 7aee1ba8bd4..09e6b8eeb26 100644 --- a/src/main/java/net/minestom/server/instance/AnvilLoader.java +++ b/src/main/java/net/minestom/server/instance/AnvilLoader.java @@ -316,7 +316,7 @@ private void loadBlockEntities(Chunk loadedChunk, ChunkReader chunkReader) { try (NBTWriter writer = new NBTWriter(Files.newOutputStream(levelPath))) { writer.writeNamed("", nbt); } catch (IOException e) { - e.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(e); } return AsyncUtils.VOID_FUTURE; } diff --git a/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java b/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java index c427442a99b..0fd29d852ae 100644 --- a/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java +++ b/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java @@ -4,6 +4,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArraySet; import it.unimi.dsi.fastutil.ints.IntSet; +import net.minestom.server.MinecraftServer; import net.minestom.server.instance.Chunk; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceContainer; @@ -193,7 +194,7 @@ private void singleThreadFlush(Instance instance, Chunk chunk, @Nullable ChunkBa if (inverse != null) inverse.readyLatch.countDown(); updateChunk(instance, chunk, sections, callback, safeCallback); } catch (Exception e) { - e.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(e); } } diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index 91108edee91..7fb6459861d 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -85,7 +85,7 @@ public void start() { final SocketChannel client = serverSocket.accept(); worker.receiveConnection(client); } catch (IOException e) { - e.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(e); } }); } catch (IOException e) { diff --git a/src/main/java/net/minestom/server/tag/TagNbtSeparator.java b/src/main/java/net/minestom/server/tag/TagNbtSeparator.java index d0300f1b633..c8096932733 100644 --- a/src/main/java/net/minestom/server/tag/TagNbtSeparator.java +++ b/src/main/java/net/minestom/server/tag/TagNbtSeparator.java @@ -1,5 +1,7 @@ package net.minestom.server.tag; +import net.minestom.server.MinecraftServer; +import net.minestom.server.exception.ExceptionManager; import org.jglrxavpok.hephaistos.nbt.NBT; import org.jglrxavpok.hephaistos.nbt.NBTCompound; import org.jglrxavpok.hephaistos.nbt.NBTList; @@ -74,7 +76,7 @@ private static void convert(List path, String key, NBT nbt, Consumer