From 965bbb9f3b3edee54f566f6e5e64eae44a9693fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Sat, 11 Apr 2020 13:23:57 +0200 Subject: [PATCH] Extract block queues from AugmentedUtils --- .../plot/generator/AugmentedUtils.java | 55 ++----------- .../AreaBoundDelegateLocalBlockQueue.java | 77 ++++++++++++++++++ ...LocationOffsetDelegateLocalBlockQueue.java | 81 +++++++++++++++++++ 3 files changed, 163 insertions(+), 50 deletions(-) create mode 100644 Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/AreaBoundDelegateLocalBlockQueue.java create mode 100644 Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/block/LocationOffsetDelegateLocalBlockQueue.java 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); + } + +}