From d46af0136b44fdea757f5ff9c485c4587b348320 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sat, 24 Jul 2021 10:04:04 +0100 Subject: [PATCH] Fix nullable world in regions --- .../worldedit/regions/AbstractRegion.java | 15 ++++++++++----- .../sk89q/worldedit/regions/CuboidRegion.java | 2 +- .../worldedit/regions/EllipsoidRegion.java | 18 +++++++++--------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/AbstractRegion.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/AbstractRegion.java index c3af94635..f884f149f 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/AbstractRegion.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/AbstractRegion.java @@ -27,6 +27,7 @@ import com.sk89q.worldedit.regions.iterator.RegionIterator; import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.storage.ChunkStore; +import javax.annotation.Nullable; import java.util.AbstractSet; import java.util.ArrayList; import java.util.HashSet; @@ -39,9 +40,9 @@ import java.util.Set; public abstract class AbstractRegion extends AbstractSet implements Region { //FAWE end - protected World world; + @Nullable protected World world; - public AbstractRegion(World world) { + public AbstractRegion(@Nullable World world) { this.world = world; } @@ -68,7 +69,7 @@ public abstract class AbstractRegion extends AbstractSet implement } @Override - public World getWorld() { + public @Nullable World getWorld() { return world; } @@ -217,11 +218,15 @@ public abstract class AbstractRegion extends AbstractSet implement // Sub-class utilities protected final int getWorldMinY() { - return world == null ? Integer.MIN_VALUE : world.getMinY(); + //FAWE start > Integer.MIN_VALUE -> 0 (to avoid crazy for loops...) TODO: See if there's a way to find a "server default" + return world == null ? 0 : world.getMinY(); + //FAWE end } protected final int getWorldMaxY() { - return world == null ? Integer.MAX_VALUE : world.getMaxY(); + //FAWE start > Integer.MAX_VALUE -> 255 (to avoid crazy for loops...) TODO: See if there's a way to find a "server default" + return world == null ? 255 : world.getMaxY(); + //FAWE end } //FAWE start diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java index ce3f16878..f8ae1ceb0 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java @@ -752,7 +752,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion { char[] arr = set.load(layer); if (trimX || trimZ) { int indexY = 0; - for (int y = world.getMinY(); y < 16; y++, indexY += world.getMaxY()) { + for (int y = getWorldMinY(); y < 16; y++, indexY += getWorldMaxY()) { int index; if (trimZ) { index = indexY; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java index 72dd2ac7c..47a35ee17 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/EllipsoidRegion.java @@ -243,7 +243,7 @@ public class EllipsoidRegion extends AbstractRegion { } int cy = y - center.getBlockY(); int cy2 = cy * cy; - if (radiusSqr.getBlockY() < world.getMaxY() && cy2 > radiusSqr.getBlockY()) { + if (radiusSqr.getBlockY() < getWorldMaxY() && cy2 > radiusSqr.getBlockY()) { return false; } if (sphere) { @@ -318,7 +318,7 @@ public class EllipsoidRegion extends AbstractRegion { filterSpherePartial(minSection, 0, 15, bx, bz, filter, block, get, set); } - if (yStart != world.getMinY()) { + if (yStart != getWorldMinY()) { filterSpherePartial(minSection, yStart, 15, bx, bz, filter, block, get, set); minSection++; } @@ -412,28 +412,28 @@ public class EllipsoidRegion extends AbstractRegion { int cy = center.getBlockY(); int diffYFull = MathMan.usqrt(diffY2); - int yBotFull = Math.max(world.getMinY(), cy - diffYFull); - int yTopFull = Math.min(world.getMaxY(), cy + diffYFull); + int yBotFull = Math.max(getWorldMinY(), cy - diffYFull); + int yTopFull = Math.min(getWorldMaxY(), cy + diffYFull); if (yBotFull == yTopFull || yBotFull > yTopFull) { } // Set those layers filter(chunk, filter, block, get, set, yBotFull, yTopFull, full); - if (yBotFull == world.getMinY() && yTopFull == world.getMaxY()) { + if (yBotFull == getWorldMinY() && yTopFull == getWorldMaxY()) { return; } int diffYPartial = MathMan.usqrt(radiusLengthSqr - cxMin * cxMin - czMin * czMin); //Fill the remaining layers - if (yBotFull != world.getMinY()) { - int yBotPartial = Math.max(world.getMinY(), cy - diffYPartial); + if (yBotFull != getWorldMinY()) { + int yBotPartial = Math.max(getWorldMinY(), cy - diffYPartial); filterSpherePartial(yBotPartial, yBotFull - 1, bx, bz, filter, block, get, set); } - if (yTopFull != world.getMaxY()) { - int yTopPartial = Math.min(world.getMaxY(), cy + diffYPartial); + if (yTopFull != getWorldMaxY()) { + int yTopPartial = Math.min(getWorldMaxY(), cy + diffYPartial); filterSpherePartial(yTopFull + 1, yTopPartial, bx, bz, filter, block, get, set); }