From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=84=97=E3=84=A0=CB=8B=20=E3=84=91=E3=84=A7=CB=8A?= Date: Sat, 18 Apr 2020 18:10:56 +0800 Subject: [PATCH] Tuinity Log exceptions for async chunk load failures diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java index d6f4daeec90149ef402c2746a4a054c44f7eb21f..f3943532dca289d4ffd1dc1dc645ca1e41949958 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -407,7 +407,10 @@ public class ChunkProviderServer extends IChunkProvider { // either right -> failure if (throwable != null) { - throw new RuntimeException(throwable); + // Tuinity start - thank you once again completablefuture + MinecraftServer.LOGGER.fatal("Failed to asynchronously load chunk " + chunkPos, throwable); + return; + // Tuinity end - thank you once again completablefuture } this.removeTicketAtLevel(TicketType.ASYNC_LOAD, chunkPos, ticketLevel, identifier); @@ -417,12 +420,19 @@ public class ChunkProviderServer extends IChunkProvider { if (failure.isPresent()) { // failure - throw new IllegalStateException("Chunk failed to load: " + failure.get().toString()); + // Tuinity start - thank you once again completablefuture + MinecraftServer.LOGGER.fatal("Failed to asynchronously load chunk " + chunkPos, new IllegalStateException("Chunk failed to load: " + failure.get().toString())); + return; + // Tuinity end - thank you once again completablefuture } onComplete.accept(either.left().get()); - }, this.serverThreadQueue); + }, this.serverThreadQueue).exceptionally((throwable) -> { // Tuinity start - thank you once again completablefuture + MinecraftServer.LOGGER.fatal("Failed to asynchronously load chunk " + chunkPos); + return null; + }); + // Tuinity end - thank you once again completablefuture } public void addTicketAtLevel(TicketType ticketType, ChunkCoordIntPair chunkPos, int ticketLevel, T identifier) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 4aafad0762df44990ed9d610a59f3862bd3fe3b0..5583e26fb62d0a0e4ca8e995f609c474a6f0c4c9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2476,6 +2476,13 @@ public class CraftWorld implements World { this.world.doIfNotEntityTicking(() -> ret.complete(chunk == null ? null : chunk.bukkitChunk)); }); + // Tuinity start - thank you once again completablefuture + ret.exceptionally((throwable) -> { + net.minecraft.server.MinecraftServer.LOGGER.fatal("Failed to asynchronously load chunk (" + x + "," + z + ")", throwable); + return null; + }); + // Tuinity end - thank you once again completablefuture + return ret; } // Paper end