property based block data implementation

This commit is contained in:
dfsek
2021-06-26 02:17:31 -07:00
parent 43307b737c
commit bce7a181bd
45 changed files with 288 additions and 1542 deletions

View File

@@ -1,15 +1,12 @@
package com.dfsek.terra.bukkit.world;
import com.dfsek.terra.api.block.state.properties.enums.Half;
import com.dfsek.terra.api.block.state.properties.enums.RailShape;
import com.dfsek.terra.api.block.state.properties.enums.Axis;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.data.Bisected;
import com.dfsek.terra.api.block.data.RedstoneWire;
import com.dfsek.terra.api.block.data.Slab;
import com.dfsek.terra.api.block.data.Stairs;
import com.dfsek.terra.api.block.state.properties.enums.RedstoneConnection;
import com.dfsek.terra.api.entity.CommandSender;
import com.dfsek.terra.api.inventory.ItemStack;
import com.dfsek.terra.api.inventory.item.Enchantment;
@@ -50,23 +47,6 @@ public final class BukkitAdapter {
.build();
public static Stairs.Shape adapt(org.bukkit.block.data.type.Stairs.Shape shape) {
switch(shape) {
case STRAIGHT:
return Stairs.Shape.STRAIGHT;
case INNER_LEFT:
return Stairs.Shape.INNER_LEFT;
case OUTER_LEFT:
return Stairs.Shape.OUTER_LEFT;
case INNER_RIGHT:
return Stairs.Shape.INNER_RIGHT;
case OUTER_RIGHT:
return Stairs.Shape.OUTER_RIGHT;
default:
throw new IllegalStateException();
}
}
public static BlockState adapt(org.bukkit.block.data.BlockData data) {
return BukkitBlockState.newInstance(data);
}
@@ -88,89 +68,31 @@ public final class BukkitAdapter {
}
}
public static Bisected.Half adapt(org.bukkit.block.data.Bisected.Half half) {
public static Half adapt(org.bukkit.block.data.Bisected.Half half) {
switch(half) {
case BOTTOM:
return Bisected.Half.BOTTOM;
return Half.BOTTOM;
case TOP:
return Bisected.Half.TOP;
return Half.TOP;
default:
throw new IllegalStateException();
}
}
public static BlockFace adapt(org.bukkit.block.BlockFace face) {
switch(face) {
case DOWN:
return BlockFace.DOWN;
case UP:
return BlockFace.UP;
case NORTH_WEST:
return BlockFace.NORTH_WEST;
case NORTH_EAST:
return BlockFace.NORTH_EAST;
case SOUTH_EAST:
return BlockFace.SOUTH_EAST;
case SOUTH_WEST:
return BlockFace.SOUTH_WEST;
case NORTH_NORTH_WEST:
return BlockFace.NORTH_NORTH_WEST;
case WEST_NORTH_WEST:
return BlockFace.WEST_NORTH_WEST;
case WEST_SOUTH_WEST:
return BlockFace.WEST_SOUTH_WEST;
case SOUTH_SOUTH_WEST:
return BlockFace.SOUTH_SOUTH_WEST;
case EAST_NORTH_EAST:
return BlockFace.EAST_NORTH_EAST;
case WEST:
return BlockFace.WEST;
case SOUTH:
return BlockFace.SOUTH;
case EAST:
return BlockFace.EAST;
case NORTH:
return BlockFace.NORTH;
case SELF:
return BlockFace.SELF;
case EAST_SOUTH_EAST:
return BlockFace.EAST_SOUTH_EAST;
case NORTH_NORTH_EAST:
return BlockFace.NORTH_NORTH_EAST;
case SOUTH_SOUTH_EAST:
return BlockFace.SOUTH_SOUTH_EAST;
default:
throw new IllegalStateException();
}
}
public static Slab.Type adapt(org.bukkit.block.data.type.Slab.Type type) {
switch(type) {
case BOTTOM:
return Slab.Type.BOTTOM;
case TOP:
return Slab.Type.TOP;
case DOUBLE:
return Slab.Type.DOUBLE;
default:
throw new IllegalStateException();
}
}
public static RedstoneWire.Connection adapt(org.bukkit.block.data.type.RedstoneWire.Connection connection) {
public static RedstoneConnection adapt(org.bukkit.block.data.type.RedstoneWire.Connection connection) {
switch(connection) {
case NONE:
return RedstoneWire.Connection.NONE;
return RedstoneConnection.NONE;
case UP:
return RedstoneWire.Connection.UP;
return RedstoneConnection.UP;
case SIDE:
return RedstoneWire.Connection.SIDE;
return RedstoneConnection.SIDE;
default:
throw new IllegalStateException();
}
}
public static org.bukkit.block.data.type.RedstoneWire.Connection adapt(RedstoneWire.Connection connection) {
public static org.bukkit.block.data.type.RedstoneWire.Connection adapt(RedstoneConnection connection) {
switch(connection) {
case SIDE:
return org.bukkit.block.data.type.RedstoneWire.Connection.SIDE;
@@ -183,23 +105,6 @@ public final class BukkitAdapter {
}
}
public static org.bukkit.block.data.type.Stairs.Shape adapt(Stairs.Shape shape) {
switch(shape) {
case STRAIGHT:
return org.bukkit.block.data.type.Stairs.Shape.STRAIGHT;
case INNER_LEFT:
return org.bukkit.block.data.type.Stairs.Shape.INNER_LEFT;
case OUTER_LEFT:
return org.bukkit.block.data.type.Stairs.Shape.OUTER_LEFT;
case INNER_RIGHT:
return org.bukkit.block.data.type.Stairs.Shape.INNER_RIGHT;
case OUTER_RIGHT:
return org.bukkit.block.data.type.Stairs.Shape.OUTER_RIGHT;
default:
throw new IllegalStateException();
}
}
public static RailShape adapt(org.bukkit.block.data.Rail.Shape shape) {
switch(shape) {
case SOUTH_WEST:
@@ -255,7 +160,7 @@ public final class BukkitAdapter {
}
public static org.bukkit.block.data.Bisected.Half adapt(Bisected.Half half) {
public static org.bukkit.block.data.Bisected.Half adapt(Half half) {
switch(half) {
case TOP:
return org.bukkit.block.data.Bisected.Half.TOP;
@@ -279,64 +184,6 @@ public final class BukkitAdapter {
}
}
public static org.bukkit.block.BlockFace adapt(BlockFace face) {
switch(face) {
case DOWN:
return org.bukkit.block.BlockFace.DOWN;
case UP:
return org.bukkit.block.BlockFace.UP;
case NORTH_WEST:
return org.bukkit.block.BlockFace.NORTH_WEST;
case NORTH_EAST:
return org.bukkit.block.BlockFace.NORTH_EAST;
case SOUTH_EAST:
return org.bukkit.block.BlockFace.SOUTH_EAST;
case SOUTH_WEST:
return org.bukkit.block.BlockFace.SOUTH_WEST;
case NORTH_NORTH_WEST:
return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
case WEST_NORTH_WEST:
return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
case WEST_SOUTH_WEST:
return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
case SOUTH_SOUTH_WEST:
return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
case EAST_NORTH_EAST:
return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
case WEST:
return org.bukkit.block.BlockFace.WEST;
case SOUTH:
return org.bukkit.block.BlockFace.SOUTH;
case EAST:
return org.bukkit.block.BlockFace.EAST;
case NORTH:
return org.bukkit.block.BlockFace.NORTH;
case SELF:
return org.bukkit.block.BlockFace.SELF;
case EAST_SOUTH_EAST:
return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
case NORTH_NORTH_EAST:
return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
case SOUTH_SOUTH_EAST:
return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
default:
throw new IllegalStateException();
}
}
public static org.bukkit.block.data.type.Slab.Type adapt(Slab.Type type) {
switch(type) {
case TOP:
return org.bukkit.block.data.type.Slab.Type.TOP;
case DOUBLE:
return org.bukkit.block.data.type.Slab.Type.DOUBLE;
case BOTTOM:
return org.bukkit.block.data.type.Slab.Type.BOTTOM;
default:
throw new IllegalStateException();
}
}
public static Vector3 adapt(Location location) {
return new Vector3Impl(location.getX(), location.getY(), location.getZ());
}

View File

@@ -1,24 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.data.AnaloguePowerable;
public class BukkitAnaloguePowerable extends BukkitBlockState implements AnaloguePowerable {
public BukkitAnaloguePowerable(org.bukkit.block.data.AnaloguePowerable delegate) {
super(delegate);
}
@Override
public int getMaximumPower() {
return ((org.bukkit.block.data.AnaloguePowerable) getHandle()).getMaximumPower();
}
@Override
public int getPower() {
return ((org.bukkit.block.data.AnaloguePowerable) getHandle()).getPower();
}
@Override
public void setPower(int power) {
((org.bukkit.block.data.AnaloguePowerable) getHandle()).setPower(power);
}
}

View File

@@ -25,24 +25,6 @@ public class BukkitBlockState implements BlockState {
}
public static BukkitBlockState newInstance(org.bukkit.block.data.BlockData bukkitData) {
if(bukkitData instanceof Rail) return new BukkitRail((Rail) bukkitData);
if(bukkitData instanceof Stairs) return new BukkitStairs((Stairs) bukkitData);
if(bukkitData instanceof Slab) return new BukkitSlab((Slab) bukkitData);
if(TerraBukkitPlugin.BUKKIT_VERSION.above(TerraBukkitPlugin.BukkitVersion.V1_16) && bukkitData instanceof Wall) { // Wall only exists on 1.16 and up.
return new BukkitWall((Wall) bukkitData);
}
if(bukkitData instanceof RedstoneWire) return new BukkitRedstoneWire((RedstoneWire) bukkitData);
if(bukkitData instanceof AnaloguePowerable) return new BukkitAnaloguePowerable((AnaloguePowerable) bukkitData);
if(bukkitData instanceof MultipleFacing) return new BukkitMultipleFacing((MultipleFacing) bukkitData);
if(bukkitData instanceof Rotatable) return new BukkitRotatable((Rotatable) bukkitData);
if(bukkitData instanceof Directional) return new BukkitDirectional((Directional) bukkitData);
if(bukkitData instanceof Orientable) return new BukkitOrientable((Orientable) bukkitData);
if(bukkitData instanceof Waterlogged) return new BukkitWaterlogged((Waterlogged) bukkitData);
return new BukkitBlockState(bukkitData);
}

View File

@@ -1,21 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.data.Directional;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitDirectional extends BukkitBlockState implements Directional {
public BukkitDirectional(org.bukkit.block.data.Directional delegate) {
super(delegate);
}
@Override
public BlockFace getFacing() {
return BukkitAdapter.adapt(((org.bukkit.block.data.Directional) getHandle()).getFacing());
}
@Override
public void setFacing(BlockFace facing) {
((org.bukkit.block.data.Directional) getHandle()).setFacing(BukkitAdapter.adapt(facing));
}
}

View File

@@ -1,35 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.data.MultipleFacing;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import java.util.Set;
import java.util.stream.Collectors;
public class BukkitMultipleFacing extends BukkitBlockState implements MultipleFacing {
public BukkitMultipleFacing(org.bukkit.block.data.MultipleFacing delegate) {
super(delegate);
}
@Override
public Set<BlockFace> getFaces() {
return ((org.bukkit.block.data.MultipleFacing) super.getHandle()).getFaces().stream().map(BukkitAdapter::adapt).collect(Collectors.toSet());
}
@Override
public void setFace(BlockFace face, boolean facing) {
((org.bukkit.block.data.MultipleFacing) super.getHandle()).setFace(BukkitAdapter.adapt(face), facing);
}
@Override
public Set<BlockFace> getAllowedFaces() {
return ((org.bukkit.block.data.MultipleFacing) super.getHandle()).getAllowedFaces().stream().map(BukkitAdapter::adapt).collect(Collectors.toSet());
}
@Override
public boolean hasFace(BlockFace f) {
return ((org.bukkit.block.data.MultipleFacing) super.getHandle()).hasFace(BukkitAdapter.adapt(f));
}
}

View File

@@ -1,30 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.state.properties.enums.Axis;
import com.dfsek.terra.api.block.data.Orientable;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import java.util.Set;
import java.util.stream.Collectors;
public class BukkitOrientable extends BukkitBlockState implements Orientable {
public BukkitOrientable(org.bukkit.block.data.Orientable delegate) {
super(delegate);
}
@Override
public Set<Axis> getAxes() {
return ((org.bukkit.block.data.Orientable) getHandle()).getAxes().stream().map(BukkitAdapter::adapt).collect(Collectors.toSet());
}
@Override
public Axis getAxis() {
return BukkitAdapter.adapt(((org.bukkit.block.data.Orientable) getHandle()).getAxis());
}
@Override
public void setAxis(Axis axis) {
((org.bukkit.block.data.Orientable) getHandle()).setAxis(BukkitAdapter.adapt(axis));
}
}

View File

@@ -1,21 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.data.Rail;
import com.dfsek.terra.api.block.state.properties.enums.RailShape;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitRail extends BukkitBlockState implements Rail {
public BukkitRail(org.bukkit.block.data.Rail delegate) {
super(delegate);
}
@Override
public RailShape getShape() {
return BukkitAdapter.adapt(((org.bukkit.block.data.Rail) getHandle()).getShape());
}
@Override
public void setShape(RailShape newShape) {
((org.bukkit.block.data.Rail) getHandle()).setShape(BukkitAdapter.adapt(newShape));
}
}

View File

@@ -1,29 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.data.RedstoneWire;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import java.util.Set;
import java.util.stream.Collectors;
public class BukkitRedstoneWire extends BukkitAnaloguePowerable implements RedstoneWire {
public BukkitRedstoneWire(org.bukkit.block.data.type.RedstoneWire delegate) {
super(delegate);
}
@Override
public Set<BlockFace> getAllowedFaces() {
return ((org.bukkit.block.data.type.RedstoneWire) getHandle()).getAllowedFaces().stream().map(BukkitAdapter::adapt).collect(Collectors.toSet());
}
@Override
public Connection getFace(BlockFace face) {
return BukkitAdapter.adapt(((org.bukkit.block.data.type.RedstoneWire) getHandle()).getFace(BukkitAdapter.adapt(face)));
}
@Override
public void setFace(BlockFace face, Connection connection) {
((org.bukkit.block.data.type.RedstoneWire) getHandle()).setFace(BukkitAdapter.adapt(face), BukkitAdapter.adapt(connection));
}
}

View File

@@ -1,21 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.data.Rotatable;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitRotatable extends BukkitBlockState implements Rotatable {
public BukkitRotatable(org.bukkit.block.data.Rotatable delegate) {
super(delegate);
}
@Override
public BlockFace getRotation() {
return BukkitAdapter.adapt(((org.bukkit.block.data.Rotatable) getHandle()).getRotation());
}
@Override
public void setRotation(BlockFace face) {
((org.bukkit.block.data.Rotatable) getHandle()).setRotation(BukkitAdapter.adapt(face));
}
}

View File

@@ -1,20 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.data.Slab;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitSlab extends BukkitWaterlogged implements Slab {
public BukkitSlab(org.bukkit.block.data.type.Slab delegate) {
super(delegate);
}
@Override
public Type getType() {
return BukkitAdapter.adapt(((org.bukkit.block.data.type.Slab) getHandle()).getType());
}
@Override
public void setType(Type type) {
((org.bukkit.block.data.type.Slab) getHandle()).setType(BukkitAdapter.adapt(type));
}
}

View File

@@ -1,52 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.data.Stairs;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitStairs extends BukkitBlockState implements Stairs {
public BukkitStairs(org.bukkit.block.data.type.Stairs delegate) {
super(delegate);
}
@Override
public Shape getShape() {
return BukkitAdapter.adapt(((org.bukkit.block.data.type.Stairs) super.getHandle()).getShape());
}
@Override
public void setShape(Shape shape) {
((org.bukkit.block.data.type.Stairs) super.getHandle()).setShape(BukkitAdapter.adapt(shape));
}
@Override
public Half getHalf() {
return BukkitAdapter.adapt(((org.bukkit.block.data.type.Stairs) super.getHandle()).getHalf());
}
@Override
public void setHalf(Half half) {
((org.bukkit.block.data.type.Stairs) super.getHandle()).setHalf(BukkitAdapter.adapt(half));
}
@Override
public BlockFace getFacing() {
return BukkitAdapter.adapt(((org.bukkit.block.data.type.Stairs) super.getHandle()).getFacing());
}
@Override
public void setFacing(BlockFace facing) {
((org.bukkit.block.data.type.Stairs) super.getHandle()).setFacing(BukkitAdapter.adapt(facing));
}
@Override
public boolean isWaterlogged() {
return ((org.bukkit.block.data.type.Stairs) super.getHandle()).isWaterlogged();
}
@Override
public void setWaterlogged(boolean waterlogged) {
((org.bukkit.block.data.type.Stairs) super.getHandle()).setWaterlogged(waterlogged);
}
}

View File

@@ -1,57 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.BlockFace;
import com.dfsek.terra.api.block.data.Wall;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class BukkitWall extends BukkitWaterlogged implements Wall {
public BukkitWall(org.bukkit.block.data.type.Wall delegate) {
super(delegate);
}
@Override
public boolean isUp() {
return ((org.bukkit.block.data.type.Wall) getHandle()).isUp();
}
@Override
public void setUp(boolean up) {
((org.bukkit.block.data.type.Wall) getHandle()).setUp(up);
}
public static org.bukkit.block.data.type.Wall.Height adapt(com.dfsek.terra.api.block.data.Wall.Height height) {
switch(height) {
case NONE:
return org.bukkit.block.data.type.Wall.Height.NONE;
case LOW:
return org.bukkit.block.data.type.Wall.Height.LOW;
case TALL:
return org.bukkit.block.data.type.Wall.Height.TALL;
default:
throw new IllegalStateException();
}
}
public static com.dfsek.terra.api.block.data.Wall.Height adapt(org.bukkit.block.data.type.Wall.Height height) {
switch(height) {
case TALL:
return com.dfsek.terra.api.block.data.Wall.Height.TALL;
case LOW:
return com.dfsek.terra.api.block.data.Wall.Height.LOW;
case NONE:
return com.dfsek.terra.api.block.data.Wall.Height.NONE;
default:
throw new IllegalStateException();
}
}
@Override
public void setHeight(BlockFace face, Height height) {
((org.bukkit.block.data.type.Wall) getHandle()).setHeight(BukkitAdapter.adapt(face), adapt(height));
}
@Override
public Height getHeight(BlockFace face) {
return adapt(((org.bukkit.block.data.type.Wall) getHandle()).getHeight(BukkitAdapter.adapt(face)));
}
}

View File

@@ -1,19 +0,0 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.block.data.Waterlogged;
public class BukkitWaterlogged extends BukkitBlockState implements Waterlogged {
public BukkitWaterlogged(org.bukkit.block.data.Waterlogged delegate) {
super(delegate);
}
@Override
public boolean isWaterlogged() {
return ((org.bukkit.block.data.Waterlogged) super.getHandle()).isWaterlogged();
}
@Override
public void setWaterlogged(boolean waterlogged) {
((org.bukkit.block.data.Waterlogged) super.getHandle()).setWaterlogged(waterlogged);
}
}