From cbb746c752c95c39d83ffc08c8b0c74431c8225b Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 25 Jun 2021 06:30:29 -0700 Subject: [PATCH] fix bukkit impl --- .../population/items/flora/TerraFlora.java | 18 ++-- .../bukkit/listeners/CommonListener.java | 3 +- .../dfsek/terra/bukkit/world/BukkitChunk.java | 14 ++-- .../dfsek/terra/bukkit/world/BukkitTree.java | 2 +- .../dfsek/terra/bukkit/world/BukkitWorld.java | 23 +++-- .../terra/bukkit/world/block/BukkitBlock.java | 84 ------------------- .../world/block/state/BukkitBlockState.java | 8 +- 7 files changed, 40 insertions(+), 112 deletions(-) delete mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java diff --git a/common/implementation/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java b/common/implementation/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java index 9692c12d4..fe240ee82 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java +++ b/common/implementation/src/main/java/com/dfsek/terra/world/population/items/flora/TerraFlora.java @@ -64,10 +64,12 @@ public class TerraFlora implements Flora { int size = floraPalette.getSize(); Vector3 current = new Vector3Impl(x, search.equals(Search.UP) ? range.getMin() : range.getMax(), z); List blocks = new ArrayList<>(); + int cx = chunk.getX() << 4; + int cz = chunk.getZ() << 4; for(int y : range) { if(y > 255 || y < 0) continue; current = current.add(0, search.equals(Search.UP) ? 1 : -1, 0); - if((spawnBlacklist != spawnable.contains(chunk.getBlock(current.getBlockX(), current.getBlockY(), current.getBlockZ()).getBlockType())) && isIrrigated(current.add(0, irrigableOffset, 0), chunk) && valid(size, current.clone(), chunk)) { + if((spawnBlacklist != spawnable.contains(chunk.getBlock(current.getBlockX(), current.getBlockY(), current.getBlockZ()).getBlockType())) && isIrrigated(current.add(0, irrigableOffset, 0), chunk.getWorld()) && valid(size, current.clone().add(cx, 0, cz), chunk.getWorld())) { blocks.add(current.clone()); if(maxPlacements > 0 && blocks.size() >= maxPlacements) break; } @@ -75,21 +77,21 @@ public class TerraFlora implements Flora { return blocks; } - private boolean valid(int size, Vector3 block, Chunk chunk) { + private boolean valid(int size, Vector3 block, World world) { for(int i = 0; i < size; i++) { // Down if ceiling, up if floor if(block.getY() + 1 > 255 || block.getY() < 0) return false; block.add(0, ceiling ? -1 : 1, 0); - if(!replaceable.contains(chunk.getBlock(block.getBlockX(), block.getBlockY(), block.getBlockZ()).getBlockType())) return false; + if(!replaceable.contains(world.getBlockData(block).getBlockType())) return false; } return true; } - private boolean isIrrigated(Vector3 b, Chunk chunk) { + private boolean isIrrigated(Vector3 b, World world) { if(irrigable == null) return true; - return irrigable.contains(chunk.getBlock(b.getBlockX()+1, b.getBlockY(), b.getBlockZ()).getBlockType()) - || irrigable.contains(chunk.getBlock(b.getBlockX()-1, b.getBlockY(), b.getBlockZ()).getBlockType()) - || irrigable.contains(chunk.getBlock(b.getBlockX(), b.getBlockY(), b.getBlockZ()+1).getBlockType()) - || irrigable.contains(chunk.getBlock(b.getBlockX(), b.getBlockY(), b.getBlockZ()-1).getBlockType()); + return irrigable.contains(world.getBlockData(b.getBlockX()+1, b.getBlockY(), b.getBlockZ()).getBlockType()) + || irrigable.contains(world.getBlockData(b.getBlockX()-1, b.getBlockY(), b.getBlockZ()).getBlockType()) + || irrigable.contains(world.getBlockData(b.getBlockX(), b.getBlockY(), b.getBlockZ()+1).getBlockType()) + || irrigable.contains(world.getBlockData(b.getBlockX(), b.getBlockY(), b.getBlockZ()-1).getBlockType()); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java index 87cc695ec..b165e5e1c 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java @@ -10,6 +10,7 @@ import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.api.world.World; import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.vector.LocationImpl; +import com.dfsek.terra.vector.Vector3Impl; import org.bukkit.Material; import org.bukkit.TreeType; import org.bukkit.block.Block; @@ -54,7 +55,7 @@ public class CommonListener implements Listener { block.setType(Material.AIR); Tree tree = c.getRegistry(Tree.class).get(TREE_TYPE_STRING_TRANSFORMER.translate(e.getSpecies())); org.bukkit.Location location = e.getLocation(); - if(!tree.plant(new LocationImpl(bukkit, location.getX(), location.getY(), location.getZ()), , new FastRandom())) + if(!tree.plant(new Vector3Impl(location.getX(), location.getY(), location.getZ()), BukkitAdapter.adapt(e.getWorld()), new FastRandom())) block.setBlockData(data); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitChunk.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitChunk.java index 77e0eda37..63c780e7c 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitChunk.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitChunk.java @@ -1,10 +1,8 @@ package com.dfsek.terra.bukkit.world; -import com.dfsek.terra.api.block.Block; import com.dfsek.terra.api.block.BlockData; import com.dfsek.terra.api.world.Chunk; import com.dfsek.terra.api.world.World; -import com.dfsek.terra.bukkit.world.block.BukkitBlock; import org.jetbrains.annotations.NotNull; public class BukkitChunk implements Chunk { @@ -29,11 +27,6 @@ public class BukkitChunk implements Chunk { return BukkitAdapter.adapt(delegate.getWorld()); } - @Override - public Block getBlock(int x, int y, int z) { - return new BukkitBlock(delegate.getBlock(x, y, z)); - } - @Override public org.bukkit.Chunk getHandle() { return delegate; @@ -46,6 +39,11 @@ public class BukkitChunk implements Chunk { @Override public @NotNull BlockData getBlock(int x, int y, int z) { - return getBlock(x, y, z).getBlockData(); + return BukkitAdapter.adapt(delegate.getBlock(x, y, z).getBlockData()); + } + + @Override + public void setBlock(int x, int y, int z, BlockData data, boolean physics) { + delegate.getBlock(x, y, z).setBlockData(BukkitAdapter.adapt(data), physics); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitTree.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitTree.java index 07d7af97e..1ecb29409 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitTree.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitTree.java @@ -46,7 +46,7 @@ public class BukkitTree implements Tree { @SuppressWarnings("try") public boolean plant(Vector3 l, World world, Random r) { try(ProfileFrame ignore = main.getProfiler().profile("bukkit_tree:" + delegate.toString().toLowerCase(Locale.ROOT))) { - return ((BukkitWorld) l.getWorld()).getHandle().generateTree(BukkitAdapter.adapt(l), delegate); + return BukkitAdapter.adapt(world).generateTree(BukkitAdapter.adapt(l).toLocation(BukkitAdapter.adapt(world)), delegate); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitWorld.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitWorld.java index f3c4746eb..4982cc345 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitWorld.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitWorld.java @@ -1,6 +1,7 @@ package com.dfsek.terra.bukkit.world; -import com.dfsek.terra.api.block.Block; +import com.dfsek.terra.api.block.BlockData; +import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.entity.Entity; import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.vector.Location; @@ -9,7 +10,7 @@ import com.dfsek.terra.api.world.World; import com.dfsek.terra.api.world.generator.ChunkGenerator; import com.dfsek.terra.bukkit.BukkitEntity; import com.dfsek.terra.bukkit.generator.BukkitChunkGenerator; -import com.dfsek.terra.bukkit.world.block.BukkitBlock; +import com.dfsek.terra.bukkit.world.block.state.BukkitBlockState; import com.dfsek.terra.bukkit.world.entity.BukkitEntityType; import java.io.File; @@ -54,13 +55,23 @@ public class BukkitWorld implements World { return BukkitAdapter.adapt(delegate.getChunkAt(x, z)); } - public File getWorldFolder() { - return delegate.getWorldFolder(); + @Override + public BlockData getBlockData(int x, int y, int z) { + return BukkitAdapter.adapt(delegate.getBlockAt(x, y, z).getBlockData()); } @Override - public Block getBlockAt(int x, int y, int z) { - return new BukkitBlock(delegate.getBlockAt(x, y, z)); + public void setBlockData(int x, int y, int z, BlockData data, boolean physics) { + delegate.getBlockAt(x, y, z).setBlockData(BukkitAdapter.adapt(data), physics); + } + + @Override + public BlockState getBlockState(int x, int y, int z) { + return BukkitBlockState.newInstance(delegate.getBlockAt(x, y, z).getState()); + } + + public File getWorldFolder() { + return delegate.getWorldFolder(); } @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java deleted file mode 100644 index 2d9c29b41..000000000 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.dfsek.terra.bukkit.world.block; - -import com.dfsek.terra.api.block.Block; -import com.dfsek.terra.api.block.BlockData; -import com.dfsek.terra.api.block.BlockFace; -import com.dfsek.terra.api.block.BlockType; -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.bukkit.world.BukkitAdapter; -import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData; -import com.dfsek.terra.bukkit.world.block.state.BukkitBlockState; -import com.dfsek.terra.vector.LocationImpl; - -public class BukkitBlock implements Block { - private final org.bukkit.block.Block delegate; - - public BukkitBlock(org.bukkit.block.Block delegate) { - this.delegate = delegate; - } - - @Override - public void setBlockData(BlockData data, boolean physics) { - delegate.setBlockData(((BukkitBlockData) data).getHandle(), physics); - } - - @Override - public BlockData getBlockData() { - return BukkitBlockData.newInstance(delegate.getBlockData()); - } - - @Override - public BlockState getState() { - return BukkitBlockState.newInstance(delegate.getState()); - } - - @Override - public Block getRelative(BlockFace face) { - return new BukkitBlock(delegate.getRelative(BukkitAdapter.adapt(face))); - } - - @Override - public Block getRelative(BlockFace face, int len) { - return new BukkitBlock(delegate.getRelative(BukkitAdapter.adapt(face), len)); - } - - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - @Override - public LocationImpl getLocation() { - return BukkitAdapter.adapt(delegate.getLocation()); - } - - @Override - public BlockType getType() { - return BukkitAdapter.adapt(delegate.getType()); - } - - @Override - public int getX() { - return delegate.getX(); - } - - @Override - public int getZ() { - return delegate.getZ(); - } - - @Override - public int getY() { - return delegate.getY(); - } - - @Override - public boolean isPassable() { - return delegate.isPassable(); - } - - @Override - public org.bukkit.block.Block getHandle() { - return delegate; - } -} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java index cd8127c09..9351057f8 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java @@ -1,9 +1,9 @@ package com.dfsek.terra.bukkit.world.block.state; -import com.dfsek.terra.api.block.Block; import com.dfsek.terra.api.block.BlockData; import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.bukkit.world.block.BukkitBlock; +import com.dfsek.terra.api.vector.Vector3; +import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData; import org.bukkit.block.Container; import org.bukkit.block.CreatureSpawner; @@ -29,8 +29,8 @@ public class BukkitBlockState implements BlockState { } @Override - public Block getBlock() { - return new BukkitBlock(delegate.getBlock()); + public Vector3 getPosition() { + return BukkitAdapter.adapt(delegate.getBlock().getLocation().toVector()); } @Override