9
0
mirror of https://github.com/Xiao-MoMi/Custom-Crops.git synced 2025-12-20 15:39:21 +00:00
This commit is contained in:
XiaoMoMi
2024-09-30 21:12:38 +08:00
parent cfcf716e9d
commit b8f3ed07de
7 changed files with 15 additions and 12 deletions

View File

@@ -61,7 +61,6 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public class PotBlock extends AbstractCustomCropsBlock { public class PotBlock extends AbstractCustomCropsBlock {

View File

@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Optional; import java.util.Optional;
import java.util.PriorityQueue; import java.util.PriorityQueue;
import java.util.Set; import java.util.Set;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
@@ -227,7 +228,7 @@ public interface CustomCropsChunk {
* *
* @return A {@link PriorityQueue} of {@link DelayedTickTask}. * @return A {@link PriorityQueue} of {@link DelayedTickTask}.
*/ */
PriorityQueue<DelayedTickTask> tickTaskQueue(); PriorityBlockingQueue<DelayedTickTask> tickTaskQueue();
/** /**
* Gets the set of blocks that have been ticked in one tick cycle within this chunk. * Gets the set of blocks that have been ticked in one tick cycle within this chunk.

View File

@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -30,7 +31,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk {
private final CustomCropsWorld<?> world; private final CustomCropsWorld<?> world;
private final ChunkPos chunkPos; private final ChunkPos chunkPos;
private final ConcurrentHashMap<Integer, CustomCropsSection> loadedSections; private final ConcurrentHashMap<Integer, CustomCropsSection> loadedSections;
private final PriorityQueue<DelayedTickTask> queue; private final PriorityBlockingQueue<DelayedTickTask> queue;
private final Set<BlockPos> tickedBlocks; private final Set<BlockPos> tickedBlocks;
private long lastUnloadTime; private long lastUnloadTime;
private int loadedSeconds; private int loadedSeconds;
@@ -44,7 +45,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk {
this.world = world; this.world = world;
this.chunkPos = chunkPos; this.chunkPos = chunkPos;
this.loadedSections = new ConcurrentHashMap<>(16); this.loadedSections = new ConcurrentHashMap<>(16);
this.queue = new PriorityQueue<>(); this.queue = new PriorityBlockingQueue<>();
this.lazySeconds = 0; this.lazySeconds = 0;
this.tickedBlocks = Collections.synchronizedSet(new HashSet<>()); this.tickedBlocks = Collections.synchronizedSet(new HashSet<>());
this.notified = true; this.notified = true;
@@ -58,7 +59,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk {
int loadedSeconds, int loadedSeconds,
long lastUnloadTime, long lastUnloadTime,
ConcurrentHashMap<Integer, CustomCropsSection> loadedSections, ConcurrentHashMap<Integer, CustomCropsSection> loadedSections,
PriorityQueue<DelayedTickTask> queue, PriorityBlockingQueue<DelayedTickTask> queue,
HashSet<BlockPos> tickedBlocks HashSet<BlockPos> tickedBlocks
) { ) {
this.world = world; this.world = world;
@@ -313,7 +314,7 @@ public class CustomCropsChunkImpl implements CustomCropsChunk {
} }
@Override @Override
public PriorityQueue<DelayedTickTask> tickTaskQueue() { public PriorityBlockingQueue<DelayedTickTask> tickTaskQueue() {
return queue; return queue;
} }

View File

@@ -24,8 +24,8 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashSet; import java.util.HashSet;
import java.util.Optional; import java.util.Optional;
import java.util.PriorityQueue;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
/** /**
* Interface representing a custom world in the CustomCrops plugin * Interface representing a custom world in the CustomCrops plugin
@@ -72,7 +72,7 @@ public interface CustomCropsWorld<W> {
int loadedSeconds, int loadedSeconds,
long lastLoadedTime, long lastLoadedTime,
ConcurrentHashMap<Integer, CustomCropsSection> loadedSections, ConcurrentHashMap<Integer, CustomCropsSection> loadedSections,
PriorityQueue<DelayedTickTask> queue, PriorityBlockingQueue<DelayedTickTask> queue,
HashSet<BlockPos> tickedBlocks HashSet<BlockPos> tickedBlocks
) { ) {
return new CustomCropsChunkImpl(this, pos, loadedSeconds, lastLoadedTime, loadedSections, queue, tickedBlocks); return new CustomCropsChunkImpl(this, pos, loadedSeconds, lastLoadedTime, loadedSections, queue, tickedBlocks);

View File

@@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
public abstract class AbstractWorldAdaptor<W> implements WorldAdaptor<W> { public abstract class AbstractWorldAdaptor<W> implements WorldAdaptor<W> {
@@ -127,7 +128,7 @@ public abstract class AbstractWorldAdaptor<W> implements WorldAdaptor<W> {
return ticked; return ticked;
} }
private int[] queueToIntArray(PriorityQueue<DelayedTickTask> queue) { private int[] queueToIntArray(PriorityBlockingQueue<DelayedTickTask> queue) {
queue.removeIf(Objects::isNull); queue.removeIf(Objects::isNull);
int size = queue.size() * 2; int size = queue.size() * 2;
int[] tasks = new int[size]; int[] tasks = new int[size];

View File

@@ -36,8 +36,8 @@ import java.lang.reflect.Method;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.PriorityQueue;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.function.Function; import java.util.function.Function;
public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor<SlimeWorld> { public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor<SlimeWorld> {
@@ -204,7 +204,7 @@ public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor<SlimeWorld> {
int[] queued = (int[]) map.get("queued").getValue(); int[] queued = (int[]) map.get("queued").getValue();
int[] ticked = (int[]) map.get("ticked").getValue(); int[] ticked = (int[]) map.get("ticked").getValue();
PriorityQueue<DelayedTickTask> queue = new PriorityQueue<>(Math.max(11, queued.length / 2)); PriorityBlockingQueue<DelayedTickTask> queue = new PriorityBlockingQueue<>(Math.max(11, queued.length / 2));
for (int i = 0, size = queued.length / 2; i < size; i++) { for (int i = 0, size = queued.length / 2; i < size; i++) {
BlockPos pos = new BlockPos(queued[2*i+1]); BlockPos pos = new BlockPos(queued[2*i+1]);
queue.add(new DelayedTickTask(queued[2*i], pos)); queue.add(new DelayedTickTask(queued[2*i], pos));

View File

@@ -43,6 +43,7 @@ import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
@@ -392,7 +393,7 @@ public class BukkitWorldAdaptor extends AbstractWorldAdaptor<World> {
long lastLoadedTime = chunkData.readLong(); long lastLoadedTime = chunkData.readLong();
// read task queue // read task queue
int tasksSize = chunkData.readInt(); int tasksSize = chunkData.readInt();
PriorityQueue<DelayedTickTask> queue = new PriorityQueue<>(Math.max(11, tasksSize)); PriorityBlockingQueue<DelayedTickTask> queue = new PriorityBlockingQueue<>(Math.max(11, tasksSize));
for (int i = 0; i < tasksSize; i++) { for (int i = 0; i < tasksSize; i++) {
int time = chunkData.readInt(); int time = chunkData.readInt();
BlockPos pos = new BlockPos(chunkData.readInt()); BlockPos pos = new BlockPos(chunkData.readInt());