fix bukkit impl

This commit is contained in:
dfsek
2021-06-25 06:30:29 -07:00
parent da0fb7dd15
commit cbb746c752
7 changed files with 40 additions and 112 deletions

View File

@@ -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<Vector3> 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());
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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