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