diff --git a/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java b/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java index 0771e19f3..673f4387d 100644 --- a/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java +++ b/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java @@ -217,55 +217,7 @@ public class EllipsoidRegion implements Region { * @return iterator of points inside the region */ public Iterator iterator() { - return new Iterator() { - private Vector min = getMinimumPoint(); - private Vector max = getMaximumPoint(); - private int nextX = min.getBlockX(); - private int nextY = min.getBlockY(); - private int nextZ = min.getBlockZ(); - { - forward(); - } - - public boolean hasNext() { - return (nextX != Integer.MIN_VALUE); - } - - private void forward() { - while (hasNext() && !contains(new BlockVector(nextX, nextY, nextZ))) { - forwardOne(); - } - } - - public BlockVector next() { - if (!hasNext()) throw new java.util.NoSuchElementException(); - BlockVector answer = new BlockVector(nextX, nextY, nextZ); - forwardOne(); - forward(); - return answer; - } - - private void forwardOne() { - if (++nextX <= max.getBlockX()) { - return; - } - nextX = min.getBlockX(); - - if (++nextY <= max.getBlockY()) { - return; - } - nextY = min.getBlockY(); - - if (++nextZ <= max.getBlockZ()) { - return; - } - nextX = Integer.MIN_VALUE; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - }; + return new RegionIterator(this); } /** diff --git a/src/main/java/com/sk89q/worldedit/regions/RegionIterator.java b/src/main/java/com/sk89q/worldedit/regions/RegionIterator.java new file mode 100644 index 000000000..d960e43c3 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/regions/RegionIterator.java @@ -0,0 +1,75 @@ +package com.sk89q.worldedit.regions; + +import java.util.Iterator; + +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.Vector; + +public class RegionIterator implements Iterator { + private final Region region; + private final int maxX; + private final int maxY; + private final int maxZ; + private final Vector min; + private int nextX; + private int nextY; + private int nextZ; + + public RegionIterator(Region region) { + this.region = region; + + Vector max = region.getMaximumPoint(); + this.maxX = max.getBlockX(); + this.maxY = max.getBlockY(); + this.maxZ = max.getBlockZ(); + + this.min = region.getMinimumPoint(); + this.nextX = min.getBlockX(); + this.nextY = min.getBlockY(); + this.nextZ = min.getBlockZ(); + + forward(); + } + + public boolean hasNext() { + return nextX != Integer.MIN_VALUE; + } + + private void forward() { + while (hasNext() && !region.contains(new BlockVector(nextX, nextY, nextZ))) { + forwardOne(); + } + } + + public BlockVector next() { + if (!hasNext()) throw new java.util.NoSuchElementException(); + + BlockVector answer = new BlockVector(nextX, nextY, nextZ); + + forwardOne(); + forward(); + + return answer; + } + + private void forwardOne() { + if (++nextX <= maxX) { + return; + } + nextX = min.getBlockX(); + + if (++nextY <= maxY) { + return; + } + nextY = min.getBlockY(); + + if (++nextZ <= maxZ) { + return; + } + nextX = Integer.MIN_VALUE; + } + + public void remove() { + throw new UnsupportedOperationException(); + } +}