From 7891e935ca9ff9dfe5386321b8b70f5f390a8090 Mon Sep 17 00:00:00 2001 From: Kevin Z Date: Sun, 14 Apr 2024 10:50:06 -0600 Subject: [PATCH] Fix NullPointerException when server ticking #581 Critical fix back to 1.18 Signed-off-by: Kevin Z --- .../common/util/ServerWorker.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/srendi/advancedperipherals/common/util/ServerWorker.java b/src/main/java/de/srendi/advancedperipherals/common/util/ServerWorker.java index 558fee12c..a77bc0a02 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/util/ServerWorker.java +++ b/src/main/java/de/srendi/advancedperipherals/common/util/ServerWorker.java @@ -5,23 +5,28 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import java.util.ArrayDeque; import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; @Mod.EventBusSubscriber(modid = AdvancedPeripherals.MOD_ID) public class ServerWorker { - private static final Queue callQueue = new ArrayDeque<>(); + private static final Queue callQueue = new ConcurrentLinkedQueue<>(); public static void add(final Runnable call) { - callQueue.add(call); + if (call != null) { + callQueue.add(call); + } } @SubscribeEvent public static void serverTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.END) { - while (!callQueue.isEmpty()) { + while (true) { final Runnable runnable = callQueue.poll(); + if (runnable == null) { + return; + } AdvancedPeripherals.debug("Running queued server worker call: " + runnable); runnable.run(); }