diff --git a/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java b/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java
index b656522c7..4ff80045f 100644
--- a/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java
+++ b/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java
@@ -34,9 +34,10 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotManager;
+import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.util.MainUtil;
-import javax.annotation.Nonnull;
+import javax.annotation.Nonnull;
import java.util.Arrays;
@CommandDeclaration(command = "debugroadregen",
@@ -85,12 +86,15 @@ public class DebugRoadRegen extends SubCommand {
Captions.REQUIRES_UNMERGED.send(player);
} else {
PlotManager manager = area.getPlotManager();
- manager.createRoadEast(plot);
- manager.createRoadSouth(plot);
- manager.createRoadSouthEast(plot);
- MainUtil.sendMessage(player, "&6Regenerating plot south/east roads: " + plot.getId()
- + "\n&6 - Result: &aSuccess");
- MainUtil.sendMessage(player, "&cTo regenerate all roads: /plot regenallroads");
+ QueueCoordinator queue = area.getQueue();
+ manager.createRoadEast(plot, queue);
+ manager.createRoadSouth(plot, queue);
+ manager.createRoadSouthEast(plot, queue);
+ queue.setCompleteTask(() -> {
+ MainUtil.sendMessage(player, "&6Regenerating plot south/east roads: " + plot.getId() + "\n&6 - Result: &aSuccess");
+ MainUtil.sendMessage(player, "&cTo regenerate all roads: /plot regenallroads");
+ });
+ queue.enqueue();
}
return true;
}
diff --git a/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java b/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java
index 2361c6814..f4849dd4e 100644
--- a/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java
+++ b/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java
@@ -60,8 +60,10 @@ public class ClassicPlotManager extends SquarePlotManager {
this.regionManager = regionManager;
}
- @Override
- public boolean setComponent(@Nonnull PlotId plotId, @Nonnull String component, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
+ @Override public boolean setComponent(@Nonnull PlotId plotId,
+ @Nonnull String component,
+ @Nonnull Pattern blocks,
+ @Nullable QueueCoordinator queue) {
final Optional componentOptional = ClassicPlotManagerComponent.fromString(component);
if (componentOptional.isPresent()) {
switch (componentOptional.get()) {
@@ -96,6 +98,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return true;
}
+ /**
+ * Set the plot floor
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setFloor(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
Plot plot = classicPlotWorld.getPlotAbs(plotId);
if (plot != null && plot.isBasePlot()) {
@@ -105,6 +113,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return false;
}
+ /**
+ * Sets the plot main, floor and air areas.
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setAll(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
Plot plot = classicPlotWorld.getPlotAbs(plotId);
if (plot != null && plot.isBasePlot()) {
@@ -113,6 +127,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return false;
}
+ /**
+ * Sets the plot air region.
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setAir(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
Plot plot = classicPlotWorld.getPlotAbs(plotId);
if (plot != null && plot.isBasePlot()) {
@@ -122,6 +142,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return false;
}
+ /**
+ * Sets the plot main blocks.
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setMain(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
Plot plot = classicPlotWorld.getPlotAbs(plotId);
if (plot == null || plot.isBasePlot()) {
@@ -130,6 +156,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return false;
}
+ /**
+ * Set the middle plot block to a Pattern
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setMiddle(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
Plot plot = classicPlotWorld.getPlotAbs(plotId);
if (plot == null || !plot.isBasePlot()) {
@@ -149,6 +181,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return !enqueue || queue.enqueue();
}
+ /**
+ * Set a plot's outline
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setOutline(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
if (classicPlotWorld.ROAD_WIDTH == 0) {
return false;
@@ -216,6 +254,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return !enqueue || queue.enqueue();
}
+ /**
+ * Set the wall filling for a plot
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setWallFilling(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
if (classicPlotWorld.ROAD_WIDTH == 0) {
return false;
@@ -274,6 +318,12 @@ public class ClassicPlotManager extends SquarePlotManager {
return !enqueue || queue.enqueue();
}
+ /**
+ * Set a plot's wall top block only
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public boolean setWall(@Nonnull PlotId plotId, @Nonnull Pattern blocks, @Nullable QueueCoordinator queue) {
if (classicPlotWorld.ROAD_WIDTH == 0) {
return false;
@@ -325,9 +375,6 @@ public class ClassicPlotManager extends SquarePlotManager {
return !enqueue || queue.enqueue();
}
- /**
- * PLOT MERGING.
- */
@Override public boolean createRoadEast(@Nonnull Plot plot, @Nullable QueueCoordinator queue) {
Location pos1 = getPlotBottomLocAbs(plot.getId());
Location pos2 = getPlotTopLocAbs(plot.getId());
@@ -363,7 +410,7 @@ public class ClassicPlotManager extends SquarePlotManager {
}
queue.setCuboid(Location.at(classicPlotWorld.getWorldName(), sx + 1, 1, sz + 1),
Location.at(classicPlotWorld.getWorldName(), ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK.toPattern());
- return queue.enqueue();
+ return !enqueue || queue.enqueue();
}
@Override public boolean createRoadSouth(@Nonnull Plot plot, @Nullable QueueCoordinator queue) {
@@ -401,9 +448,10 @@ public class ClassicPlotManager extends SquarePlotManager {
}
queue.setCuboid(Location.at(classicPlotWorld.getWorldName(), sx + 1, 1, sz + 1),
Location.at(classicPlotWorld.getWorldName(), ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK.toPattern());
- return queue.enqueue();
+ return !enqueue || queue.enqueue();
}
+
@Override public boolean createRoadSouthEast(@Nonnull Plot plot, @Nullable QueueCoordinator queue) {
Location pos2 = getPlotTopLocAbs(plot.getId());
int sx = pos2.getX() + 1;
@@ -504,11 +552,6 @@ public class ClassicPlotManager extends SquarePlotManager {
return !enqueue || queue.enqueue();
}
- /**
- * Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED).
- *
- * @return false if part of the merge failed, otherwise true if successful.
- */
@Override public boolean finishPlotMerge(@Nonnull List plotIds, @Nullable QueueCoordinator queue) {
final BlockBucket claim = classicPlotWorld.CLAIMED_WALL_BLOCK;
if (classicPlotWorld.PLACE_TOP_BLOCK && (!claim.isAir() || !claim.equals(classicPlotWorld.WALL_BLOCK))) {
diff --git a/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java b/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java
index 64acf40ad..42efb5e0f 100644
--- a/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java
+++ b/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java
@@ -93,8 +93,8 @@ public class HybridPlotManager extends ClassicPlotManager {
Template.zipAll(hybridPlotWorld.getWorldName(), files);
}
- @Override public boolean createRoadEast(@Nonnull final Plot plot) {
- super.createRoadEast(plot);
+ @Override public boolean createRoadEast(@Nonnull final Plot plot, @Nullable QueueCoordinator queue) {
+ super.createRoadEast(plot, queue);
PlotId id = plot.getId();
PlotId id2 = PlotId.of(id.getX() + 1, id.getY());
Location bot = getPlotBottomLocAbs(id2);
@@ -105,10 +105,13 @@ public class HybridPlotManager extends ClassicPlotManager {
if (!hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
return true;
}
- QueueCoordinator queue = hybridPlotWorld.getQueue();
+ boolean enqueue = false;
+ if (queue == null) {
+ queue = hybridPlotWorld.getQueue();
+ enqueue = true;
+ }
createSchemAbs(queue, pos1, pos2, true);
- queue.enqueue();
- return true;
+ return !enqueue || queue.enqueue();
}
private void resetBiome(@Nonnull final HybridPlotWorld hybridPlotWorld, @Nonnull final Location pos1, @Nonnull final Location pos2) {
@@ -159,8 +162,8 @@ public class HybridPlotManager extends ClassicPlotManager {
}
}
- @Override public boolean createRoadSouth(@Nonnull final Plot plot) {
- super.createRoadSouth(plot);
+ @Override public boolean createRoadSouth(@Nonnull final Plot plot, @Nullable QueueCoordinator queue) {
+ super.createRoadSouth(plot, queue);
PlotId id = plot.getId();
PlotId id2 = PlotId.of(id.getX(), id.getY() + 1);
Location bot = getPlotBottomLocAbs(id2);
@@ -171,24 +174,31 @@ public class HybridPlotManager extends ClassicPlotManager {
if (!hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
return true;
}
- QueueCoordinator queue = hybridPlotWorld.getQueue();
+ boolean enqueue = false;
+ if (queue == null) {
+ enqueue = true;
+ queue = hybridPlotWorld.getQueue();
+ }
createSchemAbs(queue, pos1, pos2, true);
- queue.enqueue();
- return true;
+ return !enqueue || queue.enqueue();
}
- @Override public boolean createRoadSouthEast(@Nonnull final Plot plot) {
- super.createRoadSouthEast(plot);
+ @Override public boolean createRoadSouthEast(@Nonnull final Plot plot, @Nullable QueueCoordinator queue) {
+ super.createRoadSouthEast(plot, queue);
PlotId id = plot.getId();
PlotId id2 = PlotId.of(id.getX() + 1, id.getY() + 1);
Location pos1 = getPlotTopLocAbs(id).add(1, 0, 1).withY(0);
Location pos2 = getPlotBottomLocAbs(id2).withY(Math.min(getWorldHeight(), 255));
- QueueCoordinator queue = hybridPlotWorld.getQueue();
+ boolean enqueue = false;
+ if (queue == null) {
+ enqueue = true;
+ queue = hybridPlotWorld.getQueue();
+ }
createSchemAbs(queue, pos1, pos2, true);
if (hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
createSchemAbs(queue, pos1, pos2, true);
}
- return queue.enqueue();
+ return !enqueue || queue.enqueue();
}
/**
@@ -198,7 +208,7 @@ public class HybridPlotManager extends ClassicPlotManager {
* don't need to do something quite as complex unless you happen to have 512x512 sized plots.
*
*/
- @Override public boolean clearPlot(@Nonnull final Plot plot, @Nullable final Runnable whenDone) {
+ @Override public boolean clearPlot(@Nonnull final Plot plot, @Nullable final Runnable whenDone, @Nullable QueueCoordinator queue) {
if (this.regionManager.notifyClear(this)) {
//If this returns false, the clear didn't work
if (this.regionManager.handleClear(plot, whenDone, this)) {
@@ -224,7 +234,11 @@ public class HybridPlotManager extends ClassicPlotManager {
}
final BiomeType biome = hybridPlotWorld.getPlotBiome();
- final QueueCoordinator queue = hybridPlotWorld.getQueue();
+ boolean enqueue = false;
+ if (queue == null) {
+ enqueue = true;
+ queue = hybridPlotWorld.getQueue();
+ }
if (!canRegen) {
queue.setCuboid(pos1.withY(0), pos2.withY(0), bedrock);
// Each component has a different layer
@@ -236,8 +250,10 @@ public class HybridPlotManager extends ClassicPlotManager {
queue.setRegenRegion(new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()));
}
pastePlotSchematic(queue, pos1, pos2);
- queue.setCompleteTask(whenDone);
- return queue.enqueue();
+ if (whenDone != null) {
+ queue.setCompleteTask(whenDone);
+ }
+ return !enqueue || queue.enqueue();
}
public void pastePlotSchematic(@Nonnull final QueueCoordinator queue, @Nonnull final Location bottom, @Nonnull final Location top) {
diff --git a/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java b/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java
index 384eecdcd..2a1215074 100644
--- a/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java
+++ b/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java
@@ -109,7 +109,7 @@ public class HybridUtils {
public void regeneratePlotWalls(final PlotArea area) {
PlotManager plotManager = area.getPlotManager();
- plotManager.regenerateAllPlotWalls();
+ plotManager.regenerateAllPlotWalls(null);
}
public void analyzeRegion(final String world, final CuboidRegion region, final RunnableVal whenDone) {
diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java
index b12a7a5d5..236f01a27 100644
--- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java
+++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java
@@ -1061,13 +1061,17 @@ public class Plot {
}
TaskManager.runTask(whenDone);
};
+ QueueCoordinator queue = getArea().getQueue();
for (Plot current : plots) {
if (isDelete || !current.hasOwner()) {
- manager.unClaimPlot(current, null);
+ manager.unClaimPlot(current, null, queue);
} else {
- manager.claimPlot(current);
+ manager.claimPlot(current, queue);
}
}
+ if (queue.size() > 0) {
+ queue.enqueue();
+ }
TaskManager.runTask(run);
return;
}
@@ -1082,7 +1086,7 @@ public class Plot {
}
return;
}
- manager.clearPlot(current, this);
+ manager.clearPlot(current, this, null);
}
};
run.run();
@@ -1861,7 +1865,7 @@ public class Plot {
}
});
}
- plotworld.getPlotManager().claimPlot(this);
+ plotworld.getPlotManager().claimPlot(this, null);
return true;
}
@@ -2074,8 +2078,11 @@ public class Plot {
/**
* Remove the east road section of a plot
* - Used when a plot is merged
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
*/
- public void removeRoadEast() {
+ public void removeRoadEast(@Nullable QueueCoordinator queue) {
if (this.area.getType() != PlotAreaType.NORMAL && this.area.getTerrain() == PlotAreaTerrainType.ROAD) {
Plot other = this.getRelative(Direction.EAST);
Location bot = other.getBottomAbs();
@@ -2084,7 +2091,7 @@ public class Plot {
Location pos2 = Location.at(this.getWorldName(), bot.getX(), MAX_HEIGHT, top.getZ());
this.regionManager.regenerateRegion(pos1, pos2, true, null);
} else if (this.area.getTerrain() != PlotAreaTerrainType.ALL) { // no road generated => no road to remove
- this.area.getPlotManager().removeRoadEast(this);
+ this.area.getPlotManager().removeRoadEast(this, queue);
}
}
@@ -2440,8 +2447,11 @@ public class Plot {
/**
* Remove the south road section of a plot
* - Used when a plot is merged
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
*/
- public void removeRoadSouth() {
+ public void removeRoadSouth(@Nullable QueueCoordinator queue) {
if (this.area.getType() != PlotAreaType.NORMAL && this.area.getTerrain() == PlotAreaTerrainType.ROAD) {
Plot other = this.getRelative(Direction.SOUTH);
Location bot = other.getBottomAbs();
@@ -2450,7 +2460,7 @@ public class Plot {
Location pos2 = Location.at(this.getWorldName(), top.getX(), MAX_HEIGHT, bot.getZ());
this.regionManager.regenerateRegion(pos1, pos2, true, null);
} else if (this.area.getTerrain() != PlotAreaTerrainType.ALL) { // no road generated => no road to remove
- this.getManager().removeRoadSouth(this);
+ this.getManager().removeRoadSouth(this, queue);
}
}
@@ -2474,6 +2484,7 @@ public class Plot {
Plot current;
boolean toReturn = false;
HashSet visited = new HashSet<>();
+ QueueCoordinator queue = getArea().getQueue();
while ((current = frontier.poll()) != null && max >= 0) {
if (visited.contains(current)) {
continue;
@@ -2484,7 +2495,7 @@ public class Plot {
Plot other = current.getRelative(Direction.NORTH);
if (other != null && other.isOwner(uuid) && (other.getBasePlot(false).equals(current.getBasePlot(false))
|| (plots = other.getConnectedPlots()).size() <= max && frontier.addAll(plots) && (max -= plots.size()) != -1)) {
- current.mergePlot(other, removeRoads);
+ current.mergePlot(other, removeRoads, queue);
merged.add(current.getId());
merged.add(other.getId());
toReturn = true;
@@ -2493,7 +2504,7 @@ public class Plot {
ArrayList ids = new ArrayList<>();
ids.add(current.getId());
ids.add(other.getId());
- this.getManager().finishPlotMerge(ids);
+ this.getManager().finishPlotMerge(ids, queue);
}
}
}
@@ -2501,7 +2512,7 @@ public class Plot {
Plot other = current.getRelative(Direction.EAST);
if (other != null && other.isOwner(uuid) && (other.getBasePlot(false).equals(current.getBasePlot(false))
|| (plots = other.getConnectedPlots()).size() <= max && frontier.addAll(plots) && (max -= plots.size()) != -1)) {
- current.mergePlot(other, removeRoads);
+ current.mergePlot(other, removeRoads, queue);
merged.add(current.getId());
merged.add(other.getId());
toReturn = true;
@@ -2510,7 +2521,7 @@ public class Plot {
ArrayList ids = new ArrayList<>();
ids.add(current.getId());
ids.add(other.getId());
- this.getManager().finishPlotMerge(ids);
+ this.getManager().finishPlotMerge(ids, queue);
}
}
}
@@ -2518,7 +2529,7 @@ public class Plot {
Plot other = current.getRelative(Direction.SOUTH);
if (other != null && other.isOwner(uuid) && (other.getBasePlot(false).equals(current.getBasePlot(false))
|| (plots = other.getConnectedPlots()).size() <= max && frontier.addAll(plots) && (max -= plots.size()) != -1)) {
- current.mergePlot(other, removeRoads);
+ current.mergePlot(other, removeRoads, queue);
merged.add(current.getId());
merged.add(other.getId());
toReturn = true;
@@ -2527,7 +2538,7 @@ public class Plot {
ArrayList ids = new ArrayList<>();
ids.add(current.getId());
ids.add(other.getId());
- this.getManager().finishPlotMerge(ids);
+ this.getManager().finishPlotMerge(ids, queue);
}
}
}
@@ -2535,7 +2546,7 @@ public class Plot {
Plot other = current.getRelative(Direction.WEST);
if (other != null && other.isOwner(uuid) && (other.getBasePlot(false).equals(current.getBasePlot(false))
|| (plots = other.getConnectedPlots()).size() <= max && frontier.addAll(plots) && (max -= plots.size()) != -1)) {
- current.mergePlot(other, removeRoads);
+ current.mergePlot(other, removeRoads, queue);
merged.add(current.getId());
merged.add(other.getId());
toReturn = true;
@@ -2544,10 +2555,13 @@ public class Plot {
ArrayList ids = new ArrayList<>();
ids.add(current.getId());
ids.add(other.getId());
- this.getManager().finishPlotMerge(ids);
+ this.getManager().finishPlotMerge(ids, queue);
}
}
}
+ if (queue.size() > 0) {
+ queue.enqueue();
+ }
}
return toReturn;
}
@@ -2603,15 +2617,18 @@ public class Plot {
/**
* Remove the SE road (only effects terrain)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
*/
- public void removeRoadSouthEast() {
+ public void removeRoadSouthEast(@Nullable QueueCoordinator queue) {
if (this.area.getType() != PlotAreaType.NORMAL && this.area.getTerrain() == PlotAreaTerrainType.ROAD) {
Plot other = this.getRelative(1, 1);
Location pos1 = this.getTopAbs().add(1, 0, 1).withY(0);
Location pos2 = other.getBottomAbs().subtract(1, 0, 1).withY(MAX_HEIGHT);
this.regionManager.regenerateRegion(pos1, pos2, true, null);
} else if (this.area.getTerrain() != PlotAreaTerrainType.ALL) { // no road generated => no road to remove
- this.area.getPlotManager().removeRoadSouthEast(this);
+ this.area.getPlotManager().removeRoadSouthEast(this, queue);
}
}
@@ -3088,10 +3105,10 @@ public class Plot {
/**
* Merges two plots.
- Assumes plots are directly next to each other
- saves to DB
*
- * @param lesserPlot
- * @param removeRoads
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
*/
- public void mergePlot(Plot lesserPlot, boolean removeRoads) {
+ public void mergePlot(Plot lesserPlot, boolean removeRoads, @Nullable QueueCoordinator queue) {
Plot greaterPlot = this;
lesserPlot.removeSign();
if (lesserPlot.getId().getX() == greaterPlot.getId().getX()) {
@@ -3108,14 +3125,14 @@ public class Plot {
lesserPlot.mergeData(greaterPlot);
if (removeRoads) {
//lesserPlot.removeSign();
- lesserPlot.removeRoadSouth();
+ lesserPlot.removeRoadSouth(queue);
Plot diagonal = greaterPlot.getRelative(Direction.EAST);
if (diagonal.getMerged(Direction.NORTHWEST)) {
- lesserPlot.removeRoadSouthEast();
+ lesserPlot.removeRoadSouthEast(queue);
}
Plot below = greaterPlot.getRelative(Direction.WEST);
if (below.getMerged(Direction.NORTHEAST)) {
- below.getRelative(Direction.NORTH).removeRoadSouthEast();
+ below.getRelative(Direction.NORTH).removeRoadSouthEast(queue);
}
}
}
@@ -3135,17 +3152,16 @@ public class Plot {
//lesserPlot.removeSign();
Plot diagonal = greaterPlot.getRelative(Direction.SOUTH);
if (diagonal.getMerged(Direction.NORTHWEST)) {
- lesserPlot.removeRoadSouthEast();
+ lesserPlot.removeRoadSouthEast(queue);
}
- lesserPlot.removeRoadEast();
+ lesserPlot.removeRoadEast(queue);
}
Plot below = greaterPlot.getRelative(Direction.NORTH);
if (below.getMerged(Direction.SOUTHWEST)) {
- below.getRelative(Direction.WEST).removeRoadSouthEast();
+ below.getRelative(Direction.WEST).removeRoadSouthEast(queue);
}
}
}
-
}
/**
@@ -3235,8 +3251,12 @@ public class Plot {
Plot plot = destination.getRelative(0, 0);
Plot originPlot = originArea.getPlotAbs(PlotId.of(plot.id.getX() - offset.getX(), plot.id.getY() - offset.getY()));
final Runnable clearDone = () -> {
+ QueueCoordinator queue = getArea().getQueue();
for (final Plot current : plot.getConnectedPlots()) {
- getManager().claimPlot(current);
+ getManager().claimPlot(current, queue);
+ }
+ if (queue.size() > 0) {
+ queue.enqueue();
}
plot.setSign();
TaskManager.runTask(whenDone);
@@ -3334,8 +3354,12 @@ public class Plot {
Runnable run = new Runnable() {
@Override public void run() {
if (regions.isEmpty()) {
+ QueueCoordinator queue = getArea().getQueue();
for (Plot current : getConnectedPlots()) {
- destination.getManager().claimPlot(current);
+ destination.getManager().claimPlot(current, queue);
+ }
+ if (queue.size() > 0) {
+ queue.enqueue();
}
destination.setSign();
TaskManager.runTask(whenDone);
diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java b/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java
index 31e637cf9..e12e773eb 100644
--- a/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java
+++ b/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java
@@ -934,7 +934,8 @@ public abstract class PlotArea {
final PlotId pos2 = plotIds.get(plotIds.size() - 1);
final PlotManager manager = getPlotManager();
- manager.startPlotMerge(plotIds);
+ QueueCoordinator queue = getQueue();
+ manager.startPlotMerge(plotIds, queue);
final Set trusted = new HashSet<>();
final Set members = new HashSet<>();
final Set denied = new HashSet<>();
@@ -969,24 +970,25 @@ public abstract class PlotArea {
if (ly) {
if (!plot.getMerged(Direction.EAST) || !plot.getMerged(Direction.SOUTH)) {
if (removeRoads) {
- plot.removeRoadSouthEast();
+ plot.removeRoadSouthEast(queue);
}
}
}
if (!plot.getMerged(Direction.EAST)) {
plot2 = plot.getRelative(1, 0);
- plot.mergePlot(plot2, removeRoads);
+ plot.mergePlot(plot2, removeRoads, queue);
}
}
if (ly) {
if (!plot.getMerged(Direction.SOUTH)) {
plot2 = plot.getRelative(0, 1);
- plot.mergePlot(plot2, removeRoads);
+ plot.mergePlot(plot2, removeRoads, queue);
}
}
}
}
- manager.finishPlotMerge(plotIds);
+ manager.finishPlotMerge(plotIds, queue);
+ queue.enqueue();
return true;
}
diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotManager.java b/Core/src/main/java/com/plotsquared/core/plot/PlotManager.java
index 8a1413a35..187e29ffd 100644
--- a/Core/src/main/java/com/plotsquared/core/plot/PlotManager.java
+++ b/Core/src/main/java/com/plotsquared/core/plot/PlotManager.java
@@ -61,27 +61,16 @@ public abstract class PlotManager {
// the same applies here
public abstract Location getPlotTopLocAbs(@Nonnull PlotId plotId);
- /*
- * Plot clearing (return false if you do not support some method)
- */
- public boolean clearPlot(@Nonnull Plot plot, @Nullable Runnable whenDone) {
- return clearPlot(plot, whenDone, null);
- }
-
- public boolean claimPlot(@Nonnull Plot plot) {
- return claimPlot(plot, null);
-
- }
-
- public boolean unClaimPlot(@Nonnull Plot plot, @Nullable Runnable whenDone) {
- return unClaimPlot(plot, whenDone, null);
-
- }
-
public abstract boolean clearPlot(@Nonnull Plot plot, @Nullable Runnable whenDone, @Nullable QueueCoordinator queue);
public abstract boolean claimPlot(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
+ /**
+ * Completes block changes associated with plot unclaim.
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean unClaimPlot(@Nonnull Plot plot, @Nullable Runnable whenDone, @Nullable QueueCoordinator queue);
/**
@@ -98,77 +87,85 @@ public abstract class PlotManager {
*/
public abstract String[] getPlotComponents(@Nonnull PlotId plotId);
- public boolean setComponent(@Nonnull PlotId plotId, @Nonnull String component, @Nonnull Pattern blocks) {
- return setComponent(plotId, component, blocks, null);
- }
-
+ /**
+ * Set the specified components to the specified Pattern on the specified plot.
+ *
+ * @param component FLOOR, WALL, AIR, MAIN, MIDDLE, OUTLINE, BORDER, ALL (floor, air and main).
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean setComponent(@Nonnull PlotId plotId,
@Nonnull String component,
@Nonnull Pattern blocks,
@Nullable QueueCoordinator queue);
- /*
- * PLOT MERGING (return false if your generator does not support plot
- * merging).
+ /**
+ * Create the road east of the plot (not schematic-based)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
*/
- public boolean createRoadEast(@Nonnull Plot plot) {
- return createRoadEast(plot, null);
- }
-
- public boolean createRoadSouth(@Nonnull Plot plot) {
- return createRoadSouth(plot, null);
- }
-
- public boolean createRoadSouthEast(@Nonnull Plot plot) {
- return createRoadSouthEast(plot, null);
- }
-
- public boolean removeRoadEast(@Nonnull Plot plot) {
- return removeRoadEast(plot, null);
- }
-
- public boolean removeRoadSouth(@Nonnull Plot plot) {
- return removeRoadSouth(plot, null);
- }
-
- public boolean removeRoadSouthEast(@Nonnull Plot plot) {
- return removeRoadSouthEast(plot, null);
- }
-
- public boolean startPlotMerge(@Nonnull List plotIds) {
- return startPlotMerge(plotIds, null);
- }
-
- public boolean startPlotUnlink(@Nonnull List plotIds) {
- return startPlotUnlink(plotIds, null);
- }
-
- public boolean finishPlotMerge(@Nonnull List plotIds) {
- return finishPlotMerge(plotIds, null);
- }
-
- public boolean finishPlotUnlink(@Nonnull List plotIds) {
- return finishPlotUnlink(plotIds, null);
- }
-
public abstract boolean createRoadEast(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
+ /**
+ * Create the road south of the plot (not schematic-based)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean createRoadSouth(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
+ /**
+ * Create the south-east corner of the road (intersection, not schematic-based)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean createRoadSouthEast(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
+ /**
+ * Replace the road to the east of the plot with standard plot blocks (for when merging plots)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean removeRoadEast(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
+ /**
+ * Replace the road to the south of the plot with standard plot blocks (for when merging plots)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean removeRoadSouth(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
+ /**
+ * Replace the road to the south east of the plot (intersection) with standard plot blocks (for when merging plots)
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean removeRoadSouthEast(@Nonnull Plot plot, @Nullable QueueCoordinator queue);
public abstract boolean startPlotMerge(@Nonnull List plotIds, @Nullable QueueCoordinator queue);
public abstract boolean startPlotUnlink(@Nonnull List plotIds, @Nullable QueueCoordinator queue);
+ /**
+ * Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED).
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ * @return false if part if the merge failed, otherwise true if successful.
+ */
public abstract boolean finishPlotMerge(@Nonnull List plotIds, @Nullable QueueCoordinator queue);
+ /**
+ * Finished off an unlink by resetting the top wall block for unlinked plots
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ */
public abstract boolean finishPlotUnlink(@Nonnull List plotIds, @Nullable QueueCoordinator queue);
public void exportTemplate() throws IOException {
@@ -184,12 +181,10 @@ public abstract class PlotManager {
/**
* Sets all the blocks along all the plot walls to their correct state (claimed or unclaimed).
*
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
* @return true if the wall blocks were successfully set
*/
- public boolean regenerateAllPlotWalls() {
- return regenerateAllPlotWalls(null);
- }
-
public boolean regenerateAllPlotWalls(@Nullable QueueCoordinator queue) {
boolean success = true;
for (Plot plot : plotArea.getPlots()) {
diff --git a/Core/src/main/java/com/plotsquared/core/util/RegionManager.java b/Core/src/main/java/com/plotsquared/core/util/RegionManager.java
index e2d6255d8..f3e745c86 100644
--- a/Core/src/main/java/com/plotsquared/core/util/RegionManager.java
+++ b/Core/src/main/java/com/plotsquared/core/util/RegionManager.java
@@ -95,6 +95,13 @@ public abstract class RegionManager {
});
}
+ /**
+ * Set a number of cuboids to a certain block between two y values.
+ *
+ * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
+ * otherwise writes to the queue but does not enqueue.
+ * @return true if not enqueued, otherwise whether the created queue enqueued.
+ */
public boolean setCuboids(final PlotArea area,
final Set regions,
final Pattern blocks,