mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 03:03:43 +01:00 
			
		
		
		
	Minor changes to the block queue classes to match FAWE more closely.
This commit is contained in:
		@@ -228,7 +228,7 @@ public class BukkitChunkManager extends ChunkManager {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            queue.enqueue();
 | 
					            queue.enqueue();
 | 
				
			||||||
            GlobalBlockQueue.IMP.addTask(() -> {
 | 
					            GlobalBlockQueue.IMP.addEmptyTask(() -> {
 | 
				
			||||||
                //map.restoreBlocks(newWorld, 0, 0);
 | 
					                //map.restoreBlocks(newWorld, 0, 0);
 | 
				
			||||||
                map.restoreEntities(newWorld, relX, relZ);
 | 
					                map.restoreEntities(newWorld, relX, relZ);
 | 
				
			||||||
                TaskManager.runTask(whenDone);
 | 
					                TaskManager.runTask(whenDone);
 | 
				
			||||||
@@ -444,7 +444,7 @@ public class BukkitChunkManager extends ChunkManager {
 | 
				
			|||||||
                maps.add(swapChunk(world1, world2, chunk1, chunk2, region1, region2));
 | 
					                maps.add(swapChunk(world1, world2, chunk1, chunk2, region1, region2));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        GlobalBlockQueue.IMP.addTask(() -> {
 | 
					        GlobalBlockQueue.IMP.addEmptyTask(() -> {
 | 
				
			||||||
            for (ContentMap map : maps) {
 | 
					            for (ContentMap map : maps) {
 | 
				
			||||||
                map.restoreEntities(world1, 0, 0);
 | 
					                map.restoreEntities(world1, 0, 0);
 | 
				
			||||||
                TaskManager.runTaskLater(whenDone, 1);
 | 
					                TaskManager.runTaskLater(whenDone, 1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@ import java.util.concurrent.CompletableFuture;
 | 
				
			|||||||
            final long start = System.currentTimeMillis();
 | 
					            final long start = System.currentTimeMillis();
 | 
				
			||||||
            boolean result = plot.clear(true, false, () -> {
 | 
					            boolean result = plot.clear(true, false, () -> {
 | 
				
			||||||
                plot.unlink();
 | 
					                plot.unlink();
 | 
				
			||||||
                GlobalBlockQueue.IMP.addTask(() -> {
 | 
					                GlobalBlockQueue.IMP.addEmptyTask(() -> {
 | 
				
			||||||
                    plot.removeRunning();
 | 
					                    plot.removeRunning();
 | 
				
			||||||
                    // If the state changes, then mark it as no longer done
 | 
					                    // If the state changes, then mark it as no longer done
 | 
				
			||||||
                    if (plot.getFlag(Flags.DONE).isPresent()) {
 | 
					                    if (plot.getFlag(Flags.DONE).isPresent()) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,7 +107,7 @@ import java.util.stream.IntStream;
 | 
				
			|||||||
                            current.setComponent(component, bucket);
 | 
					                            current.setComponent(component, bucket);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        MainUtil.sendMessage(player, Captions.GENERATING_COMPONENT);
 | 
					                        MainUtil.sendMessage(player, Captions.GENERATING_COMPONENT);
 | 
				
			||||||
                        GlobalBlockQueue.IMP.addTask(plot::removeRunning);
 | 
					                        GlobalBlockQueue.IMP.addEmptyTask(plot::removeRunning);
 | 
				
			||||||
                        return true;
 | 
					                        return true;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -158,7 +158,7 @@ import java.util.zip.ZipOutputStream;
 | 
				
			|||||||
                setup.step = new ConfigurationNode[0];
 | 
					                setup.step = new ConfigurationNode[0];
 | 
				
			||||||
                setup.world = world;
 | 
					                setup.world = world;
 | 
				
			||||||
                SetupUtils.manager.setupWorld(setup);
 | 
					                SetupUtils.manager.setupWorld(setup);
 | 
				
			||||||
                GlobalBlockQueue.IMP.addTask(() -> {
 | 
					                GlobalBlockQueue.IMP.addEmptyTask(() -> {
 | 
				
			||||||
                    MainUtil.sendMessage(player, "Done!");
 | 
					                    MainUtil.sendMessage(player, "Done!");
 | 
				
			||||||
                    player.teleport(WorldUtil.IMP.getSpawn(world));
 | 
					                    player.teleport(WorldUtil.IMP.getSpawn(world));
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ public class ClassicPlotManager extends SquarePlotManager {
 | 
				
			|||||||
    @Override public boolean unClaimPlot(Plot plot, Runnable whenDone) {
 | 
					    @Override public boolean unClaimPlot(Plot plot, Runnable whenDone) {
 | 
				
			||||||
        setWallFilling(plot.getId(), classicPlotWorld.WALL_FILLING);
 | 
					        setWallFilling(plot.getId(), classicPlotWorld.WALL_FILLING);
 | 
				
			||||||
        setWall(plot.getId(), classicPlotWorld.WALL_BLOCK);
 | 
					        setWall(plot.getId(), classicPlotWorld.WALL_BLOCK);
 | 
				
			||||||
        return GlobalBlockQueue.IMP.addTask(whenDone);
 | 
					        return GlobalBlockQueue.IMP.addEmptyTask(whenDone);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean setFloor(PlotId plotId, BlockBucket blocks) {
 | 
					    public boolean setFloor(PlotId plotId, BlockBucket blocks) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,7 +207,7 @@ public class HybridPlotManager extends ClassicPlotManager {
 | 
				
			|||||||
        }, () -> {
 | 
					        }, () -> {
 | 
				
			||||||
            queue.enqueue();
 | 
					            queue.enqueue();
 | 
				
			||||||
            // And notify whatever called this when plot clearing is done
 | 
					            // And notify whatever called this when plot clearing is done
 | 
				
			||||||
            GlobalBlockQueue.IMP.addTask(whenDone);
 | 
					            GlobalBlockQueue.IMP.addEmptyTask(whenDone);
 | 
				
			||||||
        }, 10);
 | 
					        }, 10);
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -223,7 +223,7 @@ public abstract class HybridUtils {
 | 
				
			|||||||
                            PlotSquared.debug("&d - Potentially skipping 1024 chunks");
 | 
					                            PlotSquared.debug("&d - Potentially skipping 1024 chunks");
 | 
				
			||||||
                            PlotSquared.debug("&d - TODO: recommend chunkster if corrupt");
 | 
					                            PlotSquared.debug("&d - TODO: recommend chunkster if corrupt");
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        GlobalBlockQueue.IMP.addTask(() -> TaskManager.runTaskLater(task, 20));
 | 
					                        GlobalBlockQueue.IMP.addEmptyTask(() -> TaskManager.runTaskLater(task, 20));
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -869,7 +869,7 @@ public class Plot {
 | 
				
			|||||||
                            manager.claimPlot(current);
 | 
					                            manager.claimPlot(current);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    GlobalBlockQueue.IMP.addTask(run);
 | 
					                    GlobalBlockQueue.IMP.addEmptyTask(run);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                Plot current = queue.poll();
 | 
					                Plot current = queue.poll();
 | 
				
			||||||
@@ -982,7 +982,7 @@ public class Plot {
 | 
				
			|||||||
            current.setMerged(merged);
 | 
					            current.setMerged(merged);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (createSign) {
 | 
					        if (createSign) {
 | 
				
			||||||
            GlobalBlockQueue.IMP.addTask(() -> {
 | 
					            GlobalBlockQueue.IMP.addEmptyTask(() -> {
 | 
				
			||||||
                for (Plot current : plots) {
 | 
					                for (Plot current : plots) {
 | 
				
			||||||
                    current.setSign(MainUtil.getName(current.owner));
 | 
					                    current.setSign(MainUtil.getName(current.owner));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import java.util.ArrayList;
 | 
				
			|||||||
import java.util.ConcurrentModificationException;
 | 
					import java.util.ConcurrentModificationException;
 | 
				
			||||||
import java.util.Iterator;
 | 
					import java.util.Iterator;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Vector;
 | 
					 | 
				
			||||||
import java.util.concurrent.ConcurrentLinkedDeque;
 | 
					import java.util.concurrent.ConcurrentLinkedDeque;
 | 
				
			||||||
import java.util.concurrent.atomic.AtomicBoolean;
 | 
					import java.util.concurrent.atomic.AtomicBoolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,8 +20,10 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
    private final ConcurrentLinkedDeque<Runnable> runnables;
 | 
					    private final ConcurrentLinkedDeque<Runnable> runnables;
 | 
				
			||||||
    private final AtomicBoolean running;
 | 
					    private final AtomicBoolean running;
 | 
				
			||||||
    private QueueProvider provider;
 | 
					    private QueueProvider provider;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Used to calculate elapsed time in milliseconds and ensure block placement doesn't lag the server
 | 
					     * Used to calculate elapsed time in milliseconds and ensure block placement doesn't lag the
 | 
				
			||||||
 | 
					     * server
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private long last;
 | 
					    private long last;
 | 
				
			||||||
    private long secondLast;
 | 
					    private long secondLast;
 | 
				
			||||||
@@ -35,11 +36,12 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
                    if (!more) {
 | 
					                    if (!more) {
 | 
				
			||||||
                        lastSuccess = last;
 | 
					                        lastSuccess = last;
 | 
				
			||||||
                        if (inactiveQueues.size() == 0 && activeQueues.size() == 0) {
 | 
					                        if (inactiveQueues.size() == 0 && activeQueues.size() == 0) {
 | 
				
			||||||
                            tasks();
 | 
					                            runEmptyTasks();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                } while (((GlobalBlockQueue.this.secondLast = System.currentTimeMillis())- GlobalBlockQueue.this.last) < free);
 | 
					                } while (((GlobalBlockQueue.this.secondLast = System.currentTimeMillis())
 | 
				
			||||||
 | 
					                    - GlobalBlockQueue.this.last) < free);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,10 +87,12 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
            @Override public void run() {
 | 
					            @Override public void run() {
 | 
				
			||||||
                if (inactiveQueues.isEmpty() && activeQueues.isEmpty()) {
 | 
					                if (inactiveQueues.isEmpty() && activeQueues.isEmpty()) {
 | 
				
			||||||
                    lastSuccess = System.currentTimeMillis();
 | 
					                    lastSuccess = System.currentTimeMillis();
 | 
				
			||||||
                    GlobalBlockQueue.this.tasks();
 | 
					                    GlobalBlockQueue.this.runEmptyTasks();
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                SET_TASK.value1 = 50 + Math.min((50 + GlobalBlockQueue.this.last) - (GlobalBlockQueue.this.last = System.currentTimeMillis()),
 | 
					                SET_TASK.value1 = 50 + Math.min(
 | 
				
			||||||
 | 
					                    (50 + GlobalBlockQueue.this.last) - (GlobalBlockQueue.this.last =
 | 
				
			||||||
 | 
					                        System.currentTimeMillis()),
 | 
				
			||||||
                    GlobalBlockQueue.this.secondLast - System.currentTimeMillis());
 | 
					                    GlobalBlockQueue.this.secondLast - System.currentTimeMillis());
 | 
				
			||||||
                SET_TASK.value2 = GlobalBlockQueue.this.getNextQueue();
 | 
					                SET_TASK.value2 = GlobalBlockQueue.this.getNextQueue();
 | 
				
			||||||
                if (SET_TASK.value2 == null) {
 | 
					                if (SET_TASK.value2 == null) {
 | 
				
			||||||
@@ -231,7 +235,7 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public LocalBlockQueue getNextQueue() {
 | 
					    public LocalBlockQueue getNextQueue() {
 | 
				
			||||||
        long now = System.currentTimeMillis();
 | 
					        long now = System.currentTimeMillis();
 | 
				
			||||||
        while (activeQueues.size() > 0) {
 | 
					        while (!activeQueues.isEmpty()) {
 | 
				
			||||||
            LocalBlockQueue queue = activeQueues.peek();
 | 
					            LocalBlockQueue queue = activeQueues.peek();
 | 
				
			||||||
            if (queue != null && queue.size() > 0) {
 | 
					            if (queue != null && queue.size() > 0) {
 | 
				
			||||||
                queue.setModified(now);
 | 
					                queue.setModified(now);
 | 
				
			||||||
@@ -251,7 +255,7 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
                    long age = now - queue.getModified();
 | 
					                    long age = now - queue.getModified();
 | 
				
			||||||
                    total += queue.size();
 | 
					                    total += queue.size();
 | 
				
			||||||
                    if (queue.size() == 0) {
 | 
					                    if (queue.size() == 0) {
 | 
				
			||||||
                        if (age > 1000) {
 | 
					                        if (age > 60000) {
 | 
				
			||||||
                            iter.remove();
 | 
					                            iter.remove();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        continue;
 | 
					                        continue;
 | 
				
			||||||
@@ -263,7 +267,7 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
                        firstNonEmpty.setModified(now);
 | 
					                        firstNonEmpty.setModified(now);
 | 
				
			||||||
                        return firstNonEmpty;
 | 
					                        return firstNonEmpty;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (age > 60000) {
 | 
					                    if (age > 1000) {
 | 
				
			||||||
                        queue.setModified(now);
 | 
					                        queue.setModified(now);
 | 
				
			||||||
                        return queue;
 | 
					                        return queue;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -279,10 +283,10 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
        return activeQueues.size() == 0 && inactiveQueues.size() == 0;
 | 
					        return activeQueues.size() == 0 && inactiveQueues.size() == 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean addTask(final Runnable whenDone) {
 | 
					    public boolean addEmptyTask(final Runnable whenDone) {
 | 
				
			||||||
        if (this.isDone()) {
 | 
					        if (this.isDone()) {
 | 
				
			||||||
            // Run
 | 
					            // Run
 | 
				
			||||||
            this.tasks();
 | 
					            this.runEmptyTasks();
 | 
				
			||||||
            if (whenDone != null) {
 | 
					            if (whenDone != null) {
 | 
				
			||||||
                whenDone.run();
 | 
					                whenDone.run();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -294,19 +298,18 @@ public class GlobalBlockQueue {
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public synchronized boolean tasks() {
 | 
					    private synchronized void runEmptyTasks() {
 | 
				
			||||||
        if (this.runnables.isEmpty()) {
 | 
					        if (this.runnables.isEmpty()) {
 | 
				
			||||||
            return false;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        final ArrayList<Runnable> tmp = new ArrayList<>(this.runnables);
 | 
					        final ConcurrentLinkedDeque<Runnable> tmp = new ConcurrentLinkedDeque<>(this.runnables);
 | 
				
			||||||
        this.runnables.clear();
 | 
					        this.runnables.clear();
 | 
				
			||||||
        for (final Runnable runnable : tmp) {
 | 
					        for (final Runnable runnable : tmp) {
 | 
				
			||||||
            runnable.run();
 | 
					            runnable.run();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public enum QueueStage {
 | 
					    public enum QueueStage {
 | 
				
			||||||
        INACTIVE, ACTIVE, NONE;
 | 
					        INACTIVE, ACTIVE, NONE
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user