diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/generator/AugmentedUtils.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/generator/AugmentedUtils.java
index 5da17ef70..5160a33f4 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/generator/AugmentedUtils.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/generator/AugmentedUtils.java
@@ -31,16 +31,13 @@ import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotAreaTerrainType;
import com.github.intellectualsites.plotsquared.plot.object.PlotAreaType;
import com.github.intellectualsites.plotsquared.plot.object.PlotManager;
-import com.github.intellectualsites.plotsquared.plot.util.block.DelegateLocalBlockQueue;
+import com.github.intellectualsites.plotsquared.plot.util.block.AreaBoundDelegateLocalBlockQueue;
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
+import com.github.intellectualsites.plotsquared.plot.util.block.LocationOffsetDelegateLocalBlockQueue;
import com.github.intellectualsites.plotsquared.plot.util.block.ScopedLocalBlockQueue;
import com.github.intellectualsites.plotsquared.plot.util.world.RegionUtil;
-import com.sk89q.worldedit.function.pattern.Pattern;
-import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion;
-import com.sk89q.worldedit.world.biome.BiomeType;
-import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes;
import org.jetbrains.annotations.NotNull;
@@ -106,21 +103,7 @@ public class AugmentedUtils {
relativeTopX = Math.min(15, area.getRegion().getMaximumPoint().getX() - blockX);
relativeTopZ = Math.min(15, area.getRegion().getMaximumPoint().getZ() - blockZ);
- primaryMask = new DelegateLocalBlockQueue(queue) {
- @Override public boolean setBlock(int x, int y, int z, BlockState id) {
- if (area.contains(x, z)) {
- return super.setBlock(x, y, z, id);
- }
- return false;
- }
-
- @Override public boolean setBiome(int x, int z, BiomeType biome) {
- if (area.contains(x, z)) {
- return super.setBiome(x, z, biome);
- }
- return false;
- }
- };
+ primaryMask = new AreaBoundDelegateLocalBlockQueue(area, queue);
} else {
relativeBottomX = relativeBottomZ = 0;
relativeTopX = relativeTopZ = 15;
@@ -151,36 +134,8 @@ public class AugmentedUtils {
continue;
}
generationResult = true;
- secondaryMask = new DelegateLocalBlockQueue(primaryMask) {
- @Override public boolean setBlock(int x, int y, int z, BlockState id) {
- if (canPlace[x - blockX][z - blockZ]) {
- return super.setBlock(x, y, z, id);
- }
- return false;
- }
-
- @Override public boolean setBlock(int x, int y, int z, BaseBlock id) {
- try {
- if (canPlace[x - blockX][z - blockZ]) {
- return super.setBlock(x, y, z, id);
- }
- } catch (final Exception e) {
- PlotSquared.debug(String.format("Failed to set block at: %d;%d;%d (to = %s) with offset %d;%d."
- + " Translated to: %d;%d", x, y, z, id, blockX, blockZ, x - blockX, z - blockZ));
- throw e;
- }
- return false;
- }
-
- @Override public boolean setBlock(int x, int y, int z, Pattern pattern) {
- final BlockVector3 blockVector3 = BlockVector3.at(x + blockX, y, z + blockZ);
- return this.setBlock(x, y, z, pattern.apply(blockVector3));
- }
-
- @Override public boolean setBiome(int x, int y, BiomeType biome) {
- return super.setBiome(x, y, biome);
- }
- };
+ secondaryMask = new LocationOffsetDelegateLocalBlockQueue(canPlace, blockX,
+ blockZ, primaryMask);
} else {
secondaryMask = primaryMask;
for (int x = relativeBottomX; x <= relativeTopX; x++) {
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/AreaBoundDelegateLocalBlockQueue.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/AreaBoundDelegateLocalBlockQueue.java
new file mode 100644
index 000000000..e5313fe3e
--- /dev/null
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/AreaBoundDelegateLocalBlockQueue.java
@@ -0,0 +1,77 @@
+/*
+ * _____ _ _ _____ _
+ * | __ \| | | | / ____| | |
+ * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
+ * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
+ * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
+ * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
+ * | |
+ * |_|
+ * PlotSquared plot management system for Minecraft
+ * Copyright (C) 2020 IntellectualSites
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.github.intellectualsites.plotsquared.plot.util.block;
+
+import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
+import com.sk89q.worldedit.function.pattern.Pattern;
+import com.sk89q.worldedit.world.biome.BiomeType;
+import com.sk89q.worldedit.world.block.BaseBlock;
+import com.sk89q.worldedit.world.block.BlockState;
+import lombok.Getter;
+import org.jetbrains.annotations.NotNull;
+
+import javax.annotation.Nullable;
+import java.util.Objects;
+
+public class AreaBoundDelegateLocalBlockQueue extends DelegateLocalBlockQueue {
+
+ @Getter private final PlotArea area;
+
+ public AreaBoundDelegateLocalBlockQueue(@NotNull final PlotArea area,
+ @Nullable final LocalBlockQueue parent) {
+ super(parent);
+ this.area = Objects.requireNonNull(area);
+ }
+
+ @Override public boolean setBlock(int x, int y, int z, BlockState id) {
+ if (area.contains(x, z)) {
+ return super.setBlock(x, y, z, id);
+ }
+ return false;
+ }
+
+ @Override public boolean setBlock(int x, int y, int z, BaseBlock id) {
+ if (area.contains(x, z)) {
+ return super.setBlock(x, y, z, id);
+ }
+ return false;
+ }
+
+ @Override public boolean setBlock(int x, int y, int z, Pattern pattern) {
+ if (area.contains(x, z)) {
+ return super.setBlock(x, y, z, pattern);
+ }
+ return false;
+ }
+
+ @Override public boolean setBiome(int x, int z, BiomeType biome) {
+ if (area.contains(x, z)) {
+ return super.setBiome(x, z, biome);
+ }
+ return false;
+ }
+
+}
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/LocationOffsetDelegateLocalBlockQueue.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/LocationOffsetDelegateLocalBlockQueue.java
new file mode 100644
index 000000000..1a5ad5aa1
--- /dev/null
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/LocationOffsetDelegateLocalBlockQueue.java
@@ -0,0 +1,81 @@
+/*
+ * _____ _ _ _____ _
+ * | __ \| | | | / ____| | |
+ * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
+ * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
+ * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
+ * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
+ * | |
+ * |_|
+ * PlotSquared plot management system for Minecraft
+ * Copyright (C) 2020 IntellectualSites
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.github.intellectualsites.plotsquared.plot.util.block;
+
+import com.github.intellectualsites.plotsquared.plot.PlotSquared;
+import com.sk89q.worldedit.function.pattern.Pattern;
+import com.sk89q.worldedit.math.BlockVector3;
+import com.sk89q.worldedit.world.biome.BiomeType;
+import com.sk89q.worldedit.world.block.BaseBlock;
+import com.sk89q.worldedit.world.block.BlockState;
+
+import javax.annotation.Nullable;
+
+public class LocationOffsetDelegateLocalBlockQueue extends DelegateLocalBlockQueue {
+
+ private final boolean[][] canPlace;
+ private final int blockX;
+ private final int blockZ;
+
+ public LocationOffsetDelegateLocalBlockQueue(final boolean[][] canPlace,
+ final int blockX, final int blockZ,
+ @Nullable LocalBlockQueue parent) {
+ super(parent);
+ this.canPlace = canPlace;
+ this.blockX = blockX;
+ this.blockZ = blockZ;
+ }
+
+ @Override public boolean setBlock(int x, int y, int z, BlockState id) {
+ if (canPlace[x - blockX][z - blockZ]) {
+ return super.setBlock(x, y, z, id);
+ }
+ return false;
+ }
+
+ @Override public boolean setBlock(int x, int y, int z, BaseBlock id) {
+ try {
+ if (canPlace[x - blockX][z - blockZ]) {
+ return super.setBlock(x, y, z, id);
+ }
+ } catch (final Exception e) {
+ PlotSquared.debug(String.format("Failed to set block at: %d;%d;%d (to = %s) with offset %d;%d."
+ + " Translated to: %d;%d", x, y, z, id, blockX, blockZ, x - blockX, z - blockZ));
+ throw e;
+ }
+ return false;
+ }
+
+ @Override public boolean setBlock(int x, int y, int z, Pattern pattern) {
+ final BlockVector3 blockVector3 = BlockVector3.at(x + blockX, y, z + blockZ);
+ return this.setBlock(x, y, z, pattern.apply(blockVector3));
+ }
+
+ @Override public boolean setBiome(int x, int y, BiomeType biome) {
+ return super.setBiome(x, y, biome);
+ }
+
+}