diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java index fcde4889b..76e9dc607 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java @@ -3,6 +3,7 @@ package com.boydti.fawe.beta; import com.boydti.fawe.beta.implementation.lighting.HeightMapType; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.extent.InputExtent; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BlockState; @@ -21,6 +22,11 @@ public interface IChunkGet extends IBlocks, Trimable, InputExtent, ITileInput { @Override BiomeType getBiomeType(int x, int y, int z); + @Override + default BiomeType getBiome(BlockVector3 position) { + return getBiomeType(position.getX(), position.getY(), position.getZ()); + } + @Override BlockState getBlock(int x, int y, int z); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkSet.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkSet.java index 16b6e61c8..5dd95da55 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkSet.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkSet.java @@ -4,6 +4,7 @@ import com.boydti.fawe.beta.implementation.lighting.HeightMapType; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.extent.OutputExtent; import com.sk89q.worldedit.function.operation.Operation; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockStateHolder; @@ -21,6 +22,11 @@ public interface IChunkSet extends IBlocks, OutputExtent { @Override boolean setBiome(int x, int y, int z, BiomeType biome); + @Override + default boolean setBiome(BlockVector3 position, BiomeType biome) { + return setBiome(position.getX(), position.getY(), position.getZ(), biome); + } + @Override > boolean setBlock(int x, int y, int z, T holder); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/IChunkExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/IChunkExtent.java index a8a3621ca..b9b79e062 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/IChunkExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/IChunkExtent.java @@ -12,6 +12,7 @@ import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BaseBlock; @@ -52,6 +53,12 @@ public interface IChunkExtent extends Extent { return chunk.setBiome(x & 15, y, z & 15, biome); } + @Override + default boolean setBiome(BlockVector3 position, BiomeType biome) { + final IChunk chunk = getOrCreateChunk(position.getX() >> 4, position.getZ() >> 4); + return chunk.setBiome(position.getX() & 15, position.getY(), position.getZ() & 15, biome); + } + @Override default BlockState getBlock(int x, int y, int z) { final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4); @@ -70,6 +77,12 @@ public interface IChunkExtent extends Extent { return chunk.getBiomeType(x & 15, y, z & 15); } + @Override + default BiomeType getBiome(BlockVector3 position) { + final IChunk chunk = getOrCreateChunk(position.getX() >> 4, position.getZ() >> 4); + return chunk.getBiomeType(position.getX() & 15, position.getY(), position.getZ() & 15); + } + @Override default void setSkyLight(int x, int y, int z, int value) { final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/filter/block/FilterBlock.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/filter/block/FilterBlock.java index 17c24cd3a..6acf6b43c 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/filter/block/FilterBlock.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/filter/block/FilterBlock.java @@ -184,4 +184,14 @@ public abstract class FilterBlock extends BlockVector3 implements Extent, TileEn public BlockState getStateRelativeY(Extent orDefault, int y) { return getBlockRelativeY(y); } + + @Override @Nullable + public BiomeType getBiome(BlockVector3 position) { + return null; + } + + @Override + public boolean setBiome(BlockVector3 position, BiomeType biome) { + return setBiome(position.getX(), position.getY(), position.getZ(), biome); + } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java index bc5e52823..5de49ba4d 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java @@ -8,6 +8,7 @@ import com.sk89q.jnbt.Tag; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.world.biome.BiomeType; @@ -15,13 +16,13 @@ import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; +import javax.annotation.Nullable; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.annotation.Nullable; public class CPUOptimizedClipboard extends LinearClipboard { @@ -44,6 +45,11 @@ public class CPUOptimizedClipboard extends LinearClipboard { return biomes != null; } + @Override + public boolean setBiome(BlockVector3 position, BiomeType biome) { + return setBiome(position.getX(), position.getY(), position.getZ(), biome); + } + @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { setBiome(getIndex(x, 0, z), biome); @@ -87,6 +93,11 @@ public class CPUOptimizedClipboard extends LinearClipboard { return getBiome(getIndex(x, 0, z)); } + @Override + public BiomeType getBiome(BlockVector3 position) { + return getBiome(getIndex(position.getX(), 0, position.getZ())); + } + public void convertTilesToIndex() { if (nbtMapLoc.isEmpty()) { return; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java index 923fa2056..4d1692d1a 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java @@ -178,6 +178,11 @@ public class DiskOptimizedClipboard extends LinearClipboard implements Closeable return hasBiomes; } + @Override + public boolean setBiome(BlockVector3 position, BiomeType biome) { + return setBiome(position.getX(), position.getY(), position.getZ(), biome); + } + @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { setBiome(getIndex(x, y, z), biome); @@ -223,6 +228,11 @@ public class DiskOptimizedClipboard extends LinearClipboard implements Closeable return getBiome(getIndex(x, 0, z)); } + @Override + public BiomeType getBiome(BlockVector3 position) { + return getBiome(getIndex(position.getX(), 0, position.getZ())); + } + public BlockArrayClipboard toClipboard() { try { CuboidRegion region = new CuboidRegion(BlockVector3.at(0, 0, 0), BlockVector3.at(getWidth() - 1, getHeight() - 1, getLength() - 1)); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java index 72a34748d..35064a85a 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java @@ -11,6 +11,7 @@ import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard.ClipboardEntity; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.world.biome.BiomeType; @@ -69,6 +70,11 @@ public class MemoryOptimizedClipboard extends LinearClipboard { return biomes != null; } + @Override + public boolean setBiome(BlockVector3 position, BiomeType biome) { + return setBiome(position.getX(), position.getY(), position.getZ(), biome); + } + @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { setBiome(getIndex(x, 0, z), biome); @@ -112,6 +118,11 @@ public class MemoryOptimizedClipboard extends LinearClipboard { return getBiome(getIndex(x, 0, z)); } + @Override + public BiomeType getBiome(BlockVector3 position) { + return getBiome(getIndex(position.getX(), 0, position.getZ())); + } + public int getOrdinal(int index) { int i = index >> BLOCK_SHIFT; int li = (index & BLOCK_MASK) << 1; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/ReadOnlyClipboard.java b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/ReadOnlyClipboard.java index e7886a8f5..15695e4c7 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/ReadOnlyClipboard.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/ReadOnlyClipboard.java @@ -6,6 +6,7 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.session.request.Request; import com.sk89q.worldedit.util.Location; @@ -78,6 +79,11 @@ public abstract class ReadOnlyClipboard extends SimpleClipboard { throw new UnsupportedOperationException("Clipboard is immutable"); } + @Override + public boolean setBiome(BlockVector3 position, BiomeType biome) { + throw new UnsupportedOperationException("Clipboard is immutable"); + } + @Override public abstract List getEntities(); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/WorldCopyClipboard.java b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/WorldCopyClipboard.java index f56af90d6..e04b0a68c 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/WorldCopyClipboard.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/WorldCopyClipboard.java @@ -2,6 +2,7 @@ package com.boydti.fawe.object.clipboard; import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BaseBlock; @@ -53,6 +54,11 @@ public class WorldCopyClipboard extends ReadOnlyClipboard { return getExtent().getBiomeType(x, y, z); } + @Override + public BiomeType getBiome(BlockVector3 position) { + return getExtent().getBiomeType(position.getX(), position.getY(), position.getZ()); + } + @Override public List getEntities() { if (!hasEntities) return new ArrayList<>(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java index e78006693..f0771063a 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java @@ -40,6 +40,7 @@ import com.sk89q.worldedit.util.Direction; import com.sk89q.worldedit.util.SideEffect; import com.sk89q.worldedit.util.SideEffectSet; import com.sk89q.worldedit.util.TreeGenerator; +import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockType; @@ -346,4 +347,19 @@ public interface World extends Extent, Keyed, IChunkCache { * @param packet the chunk packet */ void sendFakeChunk(@Nullable Player player, ChunkPacket packet); + + @Override @Nullable + default BiomeType getBiome(BlockVector3 position) { + return null; + } + + @Override + default boolean setBiome(int x, int y, int z, BiomeType biome) { + return false; + } + + @Override + default boolean setBiome(BlockVector3 position, BiomeType biome) { + return false; + } }