diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/block/PotBlock.java b/api/src/main/java/net/momirealms/customcrops/api/core/block/PotBlock.java index c9f1550..174c6ee 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/block/PotBlock.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/block/PotBlock.java @@ -61,7 +61,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; public class PotBlock extends AbstractCustomCropsBlock { diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunk.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunk.java index ca1f44c..d07b1e4 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunk.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunk.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Optional; import java.util.PriorityQueue; import java.util.Set; +import java.util.concurrent.PriorityBlockingQueue; import java.util.stream.Stream; /** @@ -227,7 +228,7 @@ public interface CustomCropsChunk { * * @return A {@link PriorityQueue} of {@link DelayedTickTask}. */ - PriorityQueue tickTaskQueue(); + PriorityBlockingQueue tickTaskQueue(); /** * Gets the set of blocks that have been ticked in one tick cycle within this chunk. diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunkImpl.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunkImpl.java index d7326df..465d0a5 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunkImpl.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsChunkImpl.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Stream; @@ -30,7 +31,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk { private final CustomCropsWorld world; private final ChunkPos chunkPos; private final ConcurrentHashMap loadedSections; - private final PriorityQueue queue; + private final PriorityBlockingQueue queue; private final Set tickedBlocks; private long lastUnloadTime; private int loadedSeconds; @@ -44,7 +45,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk { this.world = world; this.chunkPos = chunkPos; this.loadedSections = new ConcurrentHashMap<>(16); - this.queue = new PriorityQueue<>(); + this.queue = new PriorityBlockingQueue<>(); this.lazySeconds = 0; this.tickedBlocks = Collections.synchronizedSet(new HashSet<>()); this.notified = true; @@ -58,7 +59,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk { int loadedSeconds, long lastUnloadTime, ConcurrentHashMap loadedSections, - PriorityQueue queue, + PriorityBlockingQueue queue, HashSet tickedBlocks ) { this.world = world; @@ -313,7 +314,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk { } @Override - public PriorityQueue tickTaskQueue() { + public PriorityBlockingQueue tickTaskQueue() { return queue; } diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java index 138d524..8ce3b2b 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java @@ -24,8 +24,8 @@ import org.jetbrains.annotations.NotNull; import java.util.HashSet; import java.util.Optional; -import java.util.PriorityQueue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.PriorityBlockingQueue; /** * Interface representing a custom world in the CustomCrops plugin @@ -72,7 +72,7 @@ public interface CustomCropsWorld { int loadedSeconds, long lastLoadedTime, ConcurrentHashMap loadedSections, - PriorityQueue queue, + PriorityBlockingQueue queue, HashSet tickedBlocks ) { return new CustomCropsChunkImpl(this, pos, loadedSeconds, lastLoadedTime, loadedSections, queue, tickedBlocks); diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/adaptor/AbstractWorldAdaptor.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/adaptor/AbstractWorldAdaptor.java index 917594b..faba4e8 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/adaptor/AbstractWorldAdaptor.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/adaptor/AbstractWorldAdaptor.java @@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; +import java.util.concurrent.PriorityBlockingQueue; public abstract class AbstractWorldAdaptor implements WorldAdaptor { @@ -127,7 +128,7 @@ public abstract class AbstractWorldAdaptor implements WorldAdaptor { return ticked; } - private int[] queueToIntArray(PriorityQueue queue) { + private int[] queueToIntArray(PriorityBlockingQueue queue) { queue.removeIf(Objects::isNull); int size = queue.size() * 2; int[] tasks = new int[size]; diff --git a/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java b/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java index dd3cb1a..824f268 100644 --- a/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java +++ b/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java @@ -36,8 +36,8 @@ import java.lang.reflect.Method; import java.util.HashSet; import java.util.Map; import java.util.Optional; -import java.util.PriorityQueue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.PriorityBlockingQueue; import java.util.function.Function; public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor { @@ -204,7 +204,7 @@ public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor { int[] queued = (int[]) map.get("queued").getValue(); int[] ticked = (int[]) map.get("ticked").getValue(); - PriorityQueue queue = new PriorityQueue<>(Math.max(11, queued.length / 2)); + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(Math.max(11, queued.length / 2)); for (int i = 0, size = queued.length / 2; i < size; i++) { BlockPos pos = new BlockPos(queued[2*i+1]); queue.add(new DelayedTickTask(queued[2*i], pos)); diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/BukkitWorldAdaptor.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/BukkitWorldAdaptor.java index 4bdce05..0086cc9 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/BukkitWorldAdaptor.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/BukkitWorldAdaptor.java @@ -43,6 +43,7 @@ import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.PriorityBlockingQueue; import java.util.function.BiFunction; import java.util.function.Function; @@ -392,7 +393,7 @@ public class BukkitWorldAdaptor extends AbstractWorldAdaptor { long lastLoadedTime = chunkData.readLong(); // read task queue int tasksSize = chunkData.readInt(); - PriorityQueue queue = new PriorityQueue<>(Math.max(11, tasksSize)); + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(Math.max(11, tasksSize)); for (int i = 0; i < tasksSize; i++) { int time = chunkData.readInt(); BlockPos pos = new BlockPos(chunkData.readInt());