From 7c0689911112c5426fbcb08f5cd5a4c3cc6eafce Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Mon, 1 Aug 2016 16:41:21 +1000 Subject: [PATCH] Fix fixliquid. --- .../java/com/sk89q/worldedit/EditSession.java | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/sk89q/worldedit/EditSession.java b/core/src/main/java/com/sk89q/worldedit/EditSession.java index a5233253..ef5d8b73 100644 --- a/core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -72,7 +72,6 @@ import com.sk89q.worldedit.function.mask.ExistingBlockMask; import com.sk89q.worldedit.function.mask.FuzzyBlockMask; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.MaskIntersection; -import com.sk89q.worldedit.function.mask.MaskUnion; import com.sk89q.worldedit.function.mask.Masks; import com.sk89q.worldedit.function.mask.NoiseFilter2D; import com.sk89q.worldedit.function.mask.RegionMask; @@ -1685,19 +1684,31 @@ public class EditSession implements Extent { public int fixLiquid(final Vector origin, final double radius, final int moving, final int stationary) throws MaxChangedBlocksException { checkNotNull(origin); checkArgument(radius >= 0, "radius >= 0 required"); - // Our origins can only be liquids BlockMask liquidMask = new BlockMask( this, - FaweCache.getBlock(moving, 0), - FaweCache.getBlock(stationary, 0)); + new BaseBlock(moving, -1), + new BaseBlock(stationary, -1) + ) { + @Override + public boolean test(Vector vector) { + BaseBlock block = getBlock(vector); + return block.getId() == moving || block.getId() == stationary; + } + }; - // But we will also visit air blocks - MaskIntersection blockMask = - new MaskUnion(liquidMask, - new BlockMask( - this, - new BaseBlock(BlockID.AIR))); + BlockMask blockMask = new BlockMask( + this, + new BaseBlock(moving, -1), + new BaseBlock(stationary, -1), + new BaseBlock(0, 0) + ) { + @Override + public boolean test(Vector vector) { + BaseBlock block = getBlock(vector); + return block.getId() == 0 || block.getId() == moving || block.getId() == stationary; + } + }; // There are boundaries that the routine needs to stay in MaskIntersection mask = new MaskIntersection(