From 6a6c113e5b97f8193c24991a91b91c6195c7f4e1 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sun, 23 Feb 2025 19:56:58 +0000 Subject: [PATCH] fix: use orTimeout instead of completing null in chunk coordinator --- .../bukkit/queue/BukkitChunkCoordinator.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/queue/BukkitChunkCoordinator.java b/Bukkit/src/main/java/com/plotsquared/bukkit/queue/BukkitChunkCoordinator.java index 39c2c59cd..759cbbb4a 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/queue/BukkitChunkCoordinator.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/queue/BukkitChunkCoordinator.java @@ -44,6 +44,7 @@ import java.util.List; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; @@ -226,16 +227,22 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator { loadingChunks.incrementAndGet(); PaperLib .getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), shouldGen, true) - .completeOnTimeout(null, 10L, TimeUnit.SECONDS) + .orTimeout(10L, TimeUnit.SECONDS) .whenComplete((chunkObject, throwable) -> { loadingChunks.decrementAndGet(); if (throwable != null) { - LOGGER.error("Failed to load chunk {}", chunk, throwable); - // We want one less because this couldn't be processed - this.expectedSize.decrementAndGet(); + if (throwable instanceof TimeoutException) { + LOGGER.warn("Timed out awaiting chunk load {}", chunk); + this.requestedChunks.offer(chunk); + } else { + LOGGER.error("Failed to load chunk {}", chunk, throwable); + // We want one less because this couldn't be processed + this.expectedSize.decrementAndGet(); + } } else if (chunkObject == null) { - LOGGER.warn("Timed out awaiting chunk load {}", chunk); - this.requestedChunks.offer(chunk); + if (shouldGen) { + LOGGER.error("Null chunk returned for chunk at {}", chunk); + } } else if (PlotSquared.get().isMainThread(Thread.currentThread())) { this.processChunk(chunkObject); } else {