Add get default version min/max world height to platform

- Fixes #1500
This commit is contained in:
dordsor21 2021-12-28 22:46:19 +00:00
parent f9ecb449cf
commit f236934a39
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B
16 changed files with 108 additions and 19 deletions

View File

@ -84,7 +84,7 @@ public class FaweBukkit implements IFawe, Listener {
Bukkit.getServer().shutdown(); Bukkit.getServer().shutdown();
} }
chunksStretched = new MinecraftVersion().isEqualOrHigher(MinecraftVersion.NETHER); chunksStretched = new MinecraftVersion().isEqualOrLower(MinecraftVersion.NETHER);
platformAdapter = new NMSAdapter(); platformAdapter = new NMSAdapter();

View File

@ -1,7 +1,9 @@
package com.fastasyncworldedit.bukkit.regions; package com.fastasyncworldedit.bukkit.regions;
import com.fastasyncworldedit.core.regions.FaweMask; import com.fastasyncworldedit.core.regions.FaweMask;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.internal.util.LogManagerCompat; import com.sk89q.worldedit.internal.util.LogManagerCompat;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
@ -38,12 +40,12 @@ public class GriefPreventionFeature extends BukkitMaskManager implements Listene
claim.getGreaterBoundaryCorner().getBlockX(); claim.getGreaterBoundaryCorner().getBlockX();
final BlockVector3 pos1 = BlockVector3.at( final BlockVector3 pos1 = BlockVector3.at(
claim.getLesserBoundaryCorner().getBlockX(), claim.getLesserBoundaryCorner().getBlockX(),
0, player.getWorld().getMinHeight(),
claim.getLesserBoundaryCorner().getBlockZ() claim.getLesserBoundaryCorner().getBlockZ()
); );
final BlockVector3 pos2 = BlockVector3.at( final BlockVector3 pos2 = BlockVector3.at(
claim.getGreaterBoundaryCorner().getBlockX(), claim.getGreaterBoundaryCorner().getBlockX(),
256, player.getWorld().getMaxHeight(),
claim.getGreaterBoundaryCorner().getBlockZ() claim.getGreaterBoundaryCorner().getBlockZ()
); );
return new FaweMask(new CuboidRegion(pos1, pos2)) { return new FaweMask(new CuboidRegion(pos1, pos2)) {

View File

@ -12,6 +12,7 @@ public class MinecraftVersion implements Comparable<MinecraftVersion> {
public static final MinecraftVersion NETHER = new MinecraftVersion(1, 16); public static final MinecraftVersion NETHER = new MinecraftVersion(1, 16);
public static final MinecraftVersion CAVES_17 = new MinecraftVersion(1, 17); public static final MinecraftVersion CAVES_17 = new MinecraftVersion(1, 17);
public static final MinecraftVersion CAVES_18 = new MinecraftVersion(1, 18);
private final int major; private final int major;
private final int minor; private final int minor;

View File

@ -19,6 +19,7 @@
package com.sk89q.worldedit.bukkit; package com.sk89q.worldedit.bukkit;
import com.fastasyncworldedit.bukkit.util.MinecraftVersion;
import com.fastasyncworldedit.core.extent.processor.lighting.RelighterFactory; import com.fastasyncworldedit.core.extent.processor.lighting.RelighterFactory;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.sk89q.bukkit.util.CommandInfo; import com.sk89q.bukkit.util.CommandInfo;
@ -278,5 +279,15 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
} }
return this.relighterFactory; return this.relighterFactory;
} }
@Override
public int getVersionMinY() {
return new MinecraftVersion().isEqualOrLower(MinecraftVersion.CAVES_18) ? -64 : 0;
}
@Override
public int getVersionMaxY() {
return new MinecraftVersion().isEqualOrLower(MinecraftVersion.CAVES_18) ? 319 : 255;
}
//FAWE end //FAWE end
} }

View File

@ -1,5 +1,7 @@
package com.fastasyncworldedit.core.regions; package com.fastasyncworldedit.core.regions;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
@ -27,7 +29,13 @@ public class RegionWrapper extends CuboidRegion {
*/ */
@Deprecated @Deprecated
public RegionWrapper(final int minX, final int maxX, final int minZ, final int maxZ) { public RegionWrapper(final int minX, final int maxX, final int minZ, final int maxZ) {
this(minX, maxX, 0, 255, minZ, maxZ); this(minX,
maxX,
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY(),
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY(),
minZ,
maxZ
);
} }
public RegionWrapper(final int minX, final int maxX, final int minY, final int maxY, final int minZ, final int maxZ) { public RegionWrapper(final int minX, final int maxX, final int minY, final int maxY, final int minZ, final int maxZ) {

View File

@ -21,8 +21,10 @@ package com.sk89q.worldedit.extension.input;
import com.fastasyncworldedit.core.configuration.Caption; import com.fastasyncworldedit.core.configuration.Caption;
import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.factory.MaskFactory; import com.sk89q.worldedit.extension.factory.MaskFactory;
import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extension.platform.Locatable; import com.sk89q.worldedit.extension.platform.Locatable;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
@ -303,8 +305,8 @@ public class ParserContext {
minY = extent.getMinY(); minY = extent.getMinY();
maxY = extent.getMaxY(); maxY = extent.getMaxY();
} else { } else {
minY = 0; minY = WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY();
maxY = 255; maxY = WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY();
} }
return minY; return minY;

View File

@ -22,6 +22,7 @@ package com.sk89q.worldedit.extension.platform;
import com.fastasyncworldedit.core.extent.processor.lighting.Relighter; import com.fastasyncworldedit.core.extent.processor.lighting.Relighter;
import com.fastasyncworldedit.core.extent.processor.lighting.RelighterFactory; import com.fastasyncworldedit.core.extent.processor.lighting.RelighterFactory;
import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalConfiguration;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility; import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility;
import com.sk89q.worldedit.registry.Keyed; import com.sk89q.worldedit.registry.Keyed;
@ -235,5 +236,15 @@ public interface Platform extends Keyed {
*/ */
@Nonnull @Nonnull
RelighterFactory getRelighterFactory(); RelighterFactory getRelighterFactory();
/**
* Get the default minimum Y value of worlds based on Minecraft version (inclusive).
*/
int getVersionMinY();
/**
* Get the default maximum Y value of worlds based on Minecraft version (inclusive).
*/
int getVersionMaxY();
//FAWE end //FAWE end
} }

View File

@ -22,7 +22,9 @@ package com.sk89q.worldedit.extent;
import com.fastasyncworldedit.core.extent.processor.heightmap.HeightMapType; import com.fastasyncworldedit.core.extent.processor.heightmap.HeightMapType;
import com.fastasyncworldedit.core.math.MutableBlockVector3; import com.fastasyncworldedit.core.math.MutableBlockVector3;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operation;
import com.sk89q.worldedit.internal.util.DeprecationUtil; import com.sk89q.worldedit.internal.util.DeprecationUtil;
import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility; import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility;
@ -95,7 +97,9 @@ public interface OutputExtent {
@Deprecated @Deprecated
default boolean setBiome(BlockVector2 position, BiomeType biome) { default boolean setBiome(BlockVector2 position, BiomeType biome) {
boolean result = false; boolean result = false;
for (int y = 0; y < 256; y++) { int minY = WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY();
int maxY = WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY();
for (int y = minY; y < maxY; y++) {
result |= setBiome(position.toBlockVector3().mutY(y), biome); result |= setBiome(position.toBlockVector3().mutY(y), biome);
} }
return result; return result;

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.function.mask; package com.sk89q.worldedit.function.mask;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -47,7 +49,10 @@ public class OffsetMask extends AbstractMask {
*/ */
@Deprecated @Deprecated
public OffsetMask(Mask mask, BlockVector3 offset) { public OffsetMask(Mask mask, BlockVector3 offset) {
this(mask, offset, 0, 255); this(mask, offset,
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY(),
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY()
);
} }
/** /**

View File

@ -28,7 +28,9 @@ import com.fastasyncworldedit.core.queue.implementation.SingleThreadQueueExtent;
import com.fastasyncworldedit.core.util.ExtentTraverser; import com.fastasyncworldedit.core.util.ExtentTraverser;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.function.RegionFunction; import com.sk89q.worldedit.function.RegionFunction;
import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operation;
@ -110,7 +112,10 @@ public abstract class BreadthFirstSearch implements Operation {
*/ */
public BreadthFirstSearch(RegionFunction function) { public BreadthFirstSearch(RegionFunction function) {
//FAWE start - int depth, min/max y //FAWE start - int depth, min/max y
this(function, Integer.MAX_VALUE, 0, 255, null); this(function, Integer.MAX_VALUE,
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY(),
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY(), null
);
} }
//FAWE start - int depth, min/max y, preloading //FAWE start - int depth, min/max y, preloading

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.function.visitor; package com.sk89q.worldedit.function.visitor;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.function.RegionFunction; import com.sk89q.worldedit.function.RegionFunction;
import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Mask;
@ -48,7 +50,10 @@ public class DownwardVisitor extends RecursiveVisitor {
@Deprecated @Deprecated
public DownwardVisitor(Mask mask, RegionFunction function, int baseY) { public DownwardVisitor(Mask mask, RegionFunction function, int baseY) {
//FAWE start - int depth, min/max y //FAWE start - int depth, min/max y
this(mask, function, baseY, Integer.MAX_VALUE, 0, 255, null); this(mask, function, baseY, Integer.MAX_VALUE, WorldEdit
.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY(),
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY(), null
);
//FAWE end //FAWE end
} }

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.function.visitor; package com.sk89q.worldedit.function.visitor;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.function.RegionFunction; import com.sk89q.worldedit.function.RegionFunction;
import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Mask;
@ -39,7 +41,10 @@ public class NonRisingVisitor extends RecursiveVisitor {
@Deprecated @Deprecated
public NonRisingVisitor(Mask mask, RegionFunction function) { public NonRisingVisitor(Mask mask, RegionFunction function) {
//FAWE start - int depth, y min/max //FAWE start - int depth, y min/max
this(mask, function, Integer.MAX_VALUE, 0, 255, null); this(mask, function, Integer.MAX_VALUE, WorldEdit
.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY(),
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY(), null
);
//FAWE end //FAWE end
} }

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.function.visitor; package com.sk89q.worldedit.function.visitor;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.function.RegionFunction; import com.sk89q.worldedit.function.RegionFunction;
import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Mask;
@ -41,7 +43,10 @@ public class RecursiveVisitor extends BreadthFirstSearch {
* @param function the function * @param function the function
*/ */
public RecursiveVisitor(Mask mask, RegionFunction function) { public RecursiveVisitor(Mask mask, RegionFunction function) {
this(mask, function, Integer.MAX_VALUE, 0, 255, null); this(mask, function, Integer.MAX_VALUE, WorldEdit
.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY(),
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY(), null
);
//FAWE end //FAWE end
} }

View File

@ -20,6 +20,8 @@
package com.sk89q.worldedit.regions; package com.sk89q.worldedit.regions;
import com.fastasyncworldedit.core.math.BlockVectorSet; import com.fastasyncworldedit.core.math.BlockVectorSet;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.math.Vector3;
@ -221,14 +223,22 @@ public abstract class AbstractRegion extends AbstractSet<BlockVector3> implement
// Sub-class utilities // Sub-class utilities
protected final int getWorldMinY() { protected final int getWorldMinY() {
//FAWE start > Integer.MIN_VALUE -> 0 (to avoid crazy for loops...) TODO: See if there's a way to find a "server default" //FAWE start > Server default based on version
return world == null ? 0 : world.getMinY(); return world == null ? WorldEdit
.getInstance()
.getPlatformManager()
.queryCapability(Capability.WORLD_EDITING)
.getVersionMinY() : world.getMinY();
//FAWE end //FAWE end
} }
protected final int getWorldMaxY() { protected final int getWorldMaxY() {
//FAWE start > Integer.MAX_VALUE -> 255 (to avoid crazy for loops...) TODO: See if there's a way to find a "server default" //FAWE start > Server default based on version
return world == null ? 255 : world.getMaxY(); return world == null ? WorldEdit
.getInstance()
.getPlatformManager()
.queryCapability(Capability.WORLD_EDITING)
.getVersionMaxY() : world.getMaxY();
//FAWE end //FAWE end
} }

View File

@ -29,6 +29,8 @@ import com.fastasyncworldedit.core.queue.IBatchProcessor;
import com.fastasyncworldedit.core.queue.IChunk; import com.fastasyncworldedit.core.queue.IChunk;
import com.fastasyncworldedit.core.queue.IChunkGet; import com.fastasyncworldedit.core.queue.IChunkGet;
import com.fastasyncworldedit.core.queue.IChunkSet; import com.fastasyncworldedit.core.queue.IChunkSet;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.internal.util.DeprecationUtil; import com.sk89q.worldedit.internal.util.DeprecationUtil;
import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility; import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility;
@ -226,7 +228,18 @@ public interface Region extends Iterable<BlockVector3>, Cloneable, IBatchProcess
BlockVector3 pos1 = getMinimumPoint(); BlockVector3 pos1 = getMinimumPoint();
BlockVector3 pos2 = getMaximumPoint(); BlockVector3 pos2 = getMaximumPoint();
return pos1.getBlockX() == Integer.MIN_VALUE && pos1.getBlockZ() == Integer.MIN_VALUE && pos2.getBlockX() == Integer.MAX_VALUE && pos2 return pos1.getBlockX() == Integer.MIN_VALUE && pos1.getBlockZ() == Integer.MIN_VALUE && pos2.getBlockX() == Integer.MAX_VALUE && pos2
.getBlockZ() == Integer.MAX_VALUE && pos1.getBlockY() <= 0 && pos2.getBlockY() >= 255; .getBlockZ() == Integer.MAX_VALUE
&& pos1.getBlockY() <= WorldEdit
.getInstance()
.getPlatformManager()
.queryCapability(
Capability.WORLD_EDITING)
.getVersionMinY()
&& pos2.getBlockY() >= WorldEdit
.getInstance()
.getPlatformManager()
.queryCapability(Capability.WORLD_EDITING)
.getVersionMaxY();
} }
default int getMinimumY() { default int getMinimumY() {

View File

@ -20,9 +20,11 @@
package com.sk89q.worldedit.world; package com.sk89q.worldedit.world;
import com.fastasyncworldedit.core.function.mask.BlockMaskBuilder; import com.fastasyncworldedit.core.function.mask.BlockMaskBuilder;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseItem; import com.sk89q.worldedit.blocks.BaseItem;
import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extension.platform.Platform; import com.sk89q.worldedit.extension.platform.Platform;
import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operation;
@ -66,12 +68,12 @@ public abstract class AbstractWorld implements World {
@Override @Override
public int getMinY() { public int getMinY() {
return 0; return WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMinY();
} }
@Override @Override
public int getMaxY() { public int getMaxY() {
return 255; return WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getVersionMaxY();
} }
@Override @Override