From 479c6c5172d43e212fd8c3aa9798b77ae575afb0 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Sun, 25 Sep 2016 05:11:34 +1000 Subject: [PATCH] Adjacent mask range parameter --- .../boydti/fawe/object/mask/AdjacentMask.java | 21 ++++++++++--------- .../extension/factory/DefaultMaskParser.java | 11 +++++++--- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/com/boydti/fawe/object/mask/AdjacentMask.java b/core/src/main/java/com/boydti/fawe/object/mask/AdjacentMask.java index 72b911c0..575636bf 100644 --- a/core/src/main/java/com/boydti/fawe/object/mask/AdjacentMask.java +++ b/core/src/main/java/com/boydti/fawe/object/mask/AdjacentMask.java @@ -7,11 +7,12 @@ import com.sk89q.worldedit.function.mask.BlockMask; import java.util.Collection; public class AdjacentMask extends BlockMask { - private final int required; + private final int min, max; - public AdjacentMask(Extent extent, Collection blocks, int required) { + public AdjacentMask(Extent extent, Collection blocks, int requiredMin, int requiredMax) { super(extent, blocks); - this.required = required; + this.min = requiredMin; + this.max = requiredMax; } @Override @@ -21,20 +22,20 @@ public class AdjacentMask extends BlockMask { double y = v.y; double z = v.z; v.x = x + 1; - if (super.test(v) && ++count == required) { v.x = x; return true; } + if (super.test(v) && ++count == min && max >= 8) { v.x = x; return true; } v.x = x - 1; - if (super.test(v) && ++count == required) { v.x = x; return true; } + if (super.test(v) && ++count == min && max >= 8) { v.x = x; return true; } v.x = x; v.y = y + 1; - if (super.test(v) && ++count == required) { v.y = y; return true; } + if (super.test(v) && ++count == min && max >= 8) { v.y = y; return true; } v.y = y - 1; - if (super.test(v) && ++count == required) { v.y = y; return true; } + if (super.test(v) && ++count == min && max >= 8) { v.y = y; return true; } v.y = y; v.z = z + 1; - if (super.test(v) && ++count == required) { v.z = z; return true; } + if (super.test(v) && ++count == min && max >= 8) { v.z = z; return true; } v.z = z - 1; - if (super.test(v) && ++count == required) { v.z = z; return true; } + if (super.test(v) && ++count == min && max >= 8) { v.z = z; return true; } v.z = z; - return false; + return count >= min && count <= max; } } diff --git a/core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultMaskParser.java b/core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultMaskParser.java index 7cd61882..4ea5ce99 100644 --- a/core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultMaskParser.java +++ b/core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultMaskParser.java @@ -167,11 +167,16 @@ public class DefaultMaskParser extends InputParser { tempContext.setRestricted(false); tempContext.setPreferringWildcard(true); try { - int requiredCount = 1; + int requiredMin = 1; + int requiredMax = 8; if (split.length == 2) { - requiredCount = Integer.parseInt(split[1]); + String[] split2 = split[1].split(","); + requiredMin = Integer.parseInt(split2[0]); + if (split2.length == 2) { + requiredMax = Integer.parseInt(split2[1]); + } } - return new AdjacentMask(extent, worldEdit.getBlockFactory().parseFromListInput(component.substring(1), tempContext), requiredCount); + return new AdjacentMask(extent, worldEdit.getBlockFactory().parseFromListInput(component.substring(1), tempContext), requiredMin, requiredMax); } catch (NumberFormatException e) { throw new InputParseException("Unknown adjacent mask '" + component + "' (not in form `~[=count]`)"); }