3
0
Mirror von https://github.com/IntellectualSites/FastAsyncWorldEdit.git synchronisiert 2024-11-03 01:50:07 +01:00

Fix nullable world in regions

Dieser Commit ist enthalten in:
dordsor21 2021-07-24 10:04:04 +01:00
Ursprung 39defaea5e
Commit d46af0136b
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 1E53E88969FFCF0B
3 geänderte Dateien mit 20 neuen und 15 gelöschten Zeilen

Datei anzeigen

@ -27,6 +27,7 @@ import com.sk89q.worldedit.regions.iterator.RegionIterator;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.storage.ChunkStore; import com.sk89q.worldedit.world.storage.ChunkStore;
import javax.annotation.Nullable;
import java.util.AbstractSet; import java.util.AbstractSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
@ -39,9 +40,9 @@ import java.util.Set;
public abstract class AbstractRegion extends AbstractSet<BlockVector3> implements Region { public abstract class AbstractRegion extends AbstractSet<BlockVector3> implements Region {
//FAWE end //FAWE end
protected World world; @Nullable protected World world;
public AbstractRegion(World world) { public AbstractRegion(@Nullable World world) {
this.world = world; this.world = world;
} }
@ -68,7 +69,7 @@ public abstract class AbstractRegion extends AbstractSet<BlockVector3> implement
} }
@Override @Override
public World getWorld() { public @Nullable World getWorld() {
return world; return world;
} }
@ -217,11 +218,15 @@ public abstract class AbstractRegion extends AbstractSet<BlockVector3> implement
// Sub-class utilities // Sub-class utilities
protected final int getWorldMinY() { 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() { 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 //FAWE start

Datei anzeigen

@ -752,7 +752,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
char[] arr = set.load(layer); char[] arr = set.load(layer);
if (trimX || trimZ) { if (trimX || trimZ) {
int indexY = 0; 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; int index;
if (trimZ) { if (trimZ) {
index = indexY; index = indexY;

Datei anzeigen

@ -243,7 +243,7 @@ public class EllipsoidRegion extends AbstractRegion {
} }
int cy = y - center.getBlockY(); int cy = y - center.getBlockY();
int cy2 = cy * cy; int cy2 = cy * cy;
if (radiusSqr.getBlockY() < world.getMaxY() && cy2 > radiusSqr.getBlockY()) { if (radiusSqr.getBlockY() < getWorldMaxY() && cy2 > radiusSqr.getBlockY()) {
return false; return false;
} }
if (sphere) { if (sphere) {
@ -318,7 +318,7 @@ public class EllipsoidRegion extends AbstractRegion {
filterSpherePartial(minSection, 0, 15, bx, bz, filter, block, get, set); 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); filterSpherePartial(minSection, yStart, 15, bx, bz, filter, block, get, set);
minSection++; minSection++;
} }
@ -412,28 +412,28 @@ public class EllipsoidRegion extends AbstractRegion {
int cy = center.getBlockY(); int cy = center.getBlockY();
int diffYFull = MathMan.usqrt(diffY2); int diffYFull = MathMan.usqrt(diffY2);
int yBotFull = Math.max(world.getMinY(), cy - diffYFull); int yBotFull = Math.max(getWorldMinY(), cy - diffYFull);
int yTopFull = Math.min(world.getMaxY(), cy + diffYFull); int yTopFull = Math.min(getWorldMaxY(), cy + diffYFull);
if (yBotFull == yTopFull || yBotFull > yTopFull) { if (yBotFull == yTopFull || yBotFull > yTopFull) {
} }
// Set those layers // Set those layers
filter(chunk, filter, block, get, set, yBotFull, yTopFull, full); filter(chunk, filter, block, get, set, yBotFull, yTopFull, full);
if (yBotFull == world.getMinY() && yTopFull == world.getMaxY()) { if (yBotFull == getWorldMinY() && yTopFull == getWorldMaxY()) {
return; return;
} }
int diffYPartial = MathMan.usqrt(radiusLengthSqr - cxMin * cxMin - czMin * czMin); int diffYPartial = MathMan.usqrt(radiusLengthSqr - cxMin * cxMin - czMin * czMin);
//Fill the remaining layers //Fill the remaining layers
if (yBotFull != world.getMinY()) { if (yBotFull != getWorldMinY()) {
int yBotPartial = Math.max(world.getMinY(), cy - diffYPartial); int yBotPartial = Math.max(getWorldMinY(), cy - diffYPartial);
filterSpherePartial(yBotPartial, yBotFull - 1, bx, bz, filter, block, get, set); filterSpherePartial(yBotPartial, yBotFull - 1, bx, bz, filter, block, get, set);
} }
if (yTopFull != world.getMaxY()) { if (yTopFull != getWorldMaxY()) {
int yTopPartial = Math.min(world.getMaxY(), cy + diffYPartial); int yTopPartial = Math.min(getWorldMaxY(), cy + diffYPartial);
filterSpherePartial(yTopFull + 1, yTopPartial, bx, bz, filter, block, get, set); filterSpherePartial(yTopFull + 1, yTopPartial, bx, bz, filter, block, get, set);
} }