Implement some BlockData stuff on Fabric, make stuff less jank

This commit is contained in:
dfsek
2020-12-14 15:38:40 -07:00
parent 875e1feafe
commit 49c445d0f7
25 changed files with 363 additions and 141 deletions

View File

@@ -4,7 +4,7 @@ import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
public class BukkitBlockData implements BlockData {
private final org.bukkit.block.data.BlockData delegate;
private org.bukkit.block.data.BlockData delegate;
public BukkitBlockData(org.bukkit.block.data.BlockData delegate) {
this.delegate = delegate;
@@ -29,7 +29,9 @@ public class BukkitBlockData implements BlockData {
@Override
public BukkitBlockData clone() {
try {
return (BukkitBlockData) super.clone();
BukkitBlockData n = (BukkitBlockData) super.clone();
n.delegate = delegate.clone();
return n;
} catch(CloneNotSupportedException e) {
throw new Error(e);
}

View File

@@ -3,6 +3,7 @@ package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.generic.world.block.BlockFace;
import com.dfsek.terra.api.generic.world.block.data.Bisected;
import com.dfsek.terra.api.generic.world.block.data.Slab;
import com.dfsek.terra.api.generic.world.block.data.Stairs;
/**
@@ -82,4 +83,17 @@ public final class BukkitEnumAdapter {
}
}
public static Slab.Type fromBukkitSlabType(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();
}
}
}

View File

@@ -8,30 +8,28 @@ import java.util.Set;
import java.util.stream.Collectors;
public class BukkitMultipleFacing extends BukkitBlockData implements MultipleFacing {
private final org.bukkit.block.data.MultipleFacing delegate;
public BukkitMultipleFacing(org.bukkit.block.data.MultipleFacing delegate) {
super(delegate);
this.delegate = delegate;
}
@Override
public Set<BlockFace> getFaces() {
return delegate.getFaces().stream().map(BukkitEnumAdapter::fromBukkitBlockFace).collect(Collectors.toSet());
return ((org.bukkit.block.data.MultipleFacing) super.getHandle()).getFaces().stream().map(BukkitEnumAdapter::fromBukkitBlockFace).collect(Collectors.toSet());
}
@Override
public void setFace(BlockFace face, boolean facing) {
delegate.setFace(TerraEnumAdapter.fromTerraBlockFace(face), facing);
((org.bukkit.block.data.MultipleFacing) super.getHandle()).setFace(TerraEnumAdapter.fromTerraBlockFace(face), facing);
}
@Override
public Set<BlockFace> getAllowedFaces() {
return delegate.getAllowedFaces().stream().map(BukkitEnumAdapter::fromBukkitBlockFace).collect(Collectors.toSet());
return ((org.bukkit.block.data.MultipleFacing) super.getHandle()).getAllowedFaces().stream().map(BukkitEnumAdapter::fromBukkitBlockFace).collect(Collectors.toSet());
}
@Override
public boolean hasFace(BlockFace f) {
return delegate.hasFace(TerraEnumAdapter.fromTerraBlockFace(f));
return ((org.bukkit.block.data.MultipleFacing) super.getHandle()).hasFace(TerraEnumAdapter.fromTerraBlockFace(f));
}
}

View File

@@ -0,0 +1,32 @@
package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.generic.world.block.data.Slab;
import com.dfsek.terra.api.generic.world.block.data.Waterlogged;
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
import org.bukkit.block.data.BlockData;
public class BukkitSlab extends BukkitBlockData implements Slab {
public BukkitSlab(BlockData delegate) {
super(delegate);
}
@Override
public boolean isWaterlogged() {
return ((Waterlogged) getHandle()).isWaterlogged();
}
@Override
public void setWaterlogged(boolean waterlogged) {
((Waterlogged) getHandle()).setWaterlogged(waterlogged);
}
@Override
public Type getType() {
return BukkitEnumAdapter.fromBukkitSlabType(((org.bukkit.block.data.type.Slab) getHandle()).getType());
}
@Override
public void setType(Type type) {
((org.bukkit.block.data.type.Slab) getHandle()).setType(TerraEnumAdapter.fromTerraSlabType(type));
}
}

View File

@@ -5,50 +5,48 @@ import com.dfsek.terra.api.generic.world.block.data.Stairs;
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
public class BukkitStairs extends BukkitBlockData implements Stairs {
private final org.bukkit.block.data.type.Stairs stairs;
public BukkitStairs(org.bukkit.block.data.type.Stairs delegate) {
super(delegate);
this.stairs = delegate;
}
@Override
public Shape getShape() {
return BukkitEnumAdapter.fromBukkitStair(stairs.getShape());
return BukkitEnumAdapter.fromBukkitStair(((org.bukkit.block.data.type.Stairs) super.getHandle()).getShape());
}
@Override
public void setShape(Shape shape) {
stairs.setShape(TerraEnumAdapter.fromTerraStair(shape));
((org.bukkit.block.data.type.Stairs) super.getHandle()).setShape(TerraEnumAdapter.fromTerraStair(shape));
}
@Override
public Half getHalf() {
return BukkitEnumAdapter.fromBukkitHalf(stairs.getHalf());
return BukkitEnumAdapter.fromBukkitHalf(((org.bukkit.block.data.type.Stairs) super.getHandle()).getHalf());
}
@Override
public void setHalf(Half half) {
stairs.setHalf(TerraEnumAdapter.fromTerraHalf(half));
((org.bukkit.block.data.type.Stairs) super.getHandle()).setHalf(TerraEnumAdapter.fromTerraHalf(half));
}
@Override
public BlockFace getFacing() {
return BukkitEnumAdapter.fromBukkitBlockFace(stairs.getFacing());
return BukkitEnumAdapter.fromBukkitBlockFace(((org.bukkit.block.data.type.Stairs) super.getHandle()).getFacing());
}
@Override
public void setFacing(BlockFace facing) {
stairs.setFacing(TerraEnumAdapter.fromTerraBlockFace(facing));
((org.bukkit.block.data.type.Stairs) super.getHandle()).setFacing(TerraEnumAdapter.fromTerraBlockFace(facing));
}
@Override
public boolean isWaterlogged() {
return stairs.isWaterlogged();
return ((org.bukkit.block.data.type.Stairs) super.getHandle()).isWaterlogged();
}
@Override
public void setWaterlogged(boolean waterlogged) {
stairs.setWaterlogged(waterlogged);
((org.bukkit.block.data.type.Stairs) super.getHandle()).setWaterlogged(waterlogged);
}
}

View File

@@ -4,19 +4,17 @@ import com.dfsek.terra.api.generic.world.block.data.Waterlogged;
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
public class BukkitWaterlogged extends BukkitBlockData implements Waterlogged {
private boolean waterlogged;
public BukkitWaterlogged(org.bukkit.block.data.Waterlogged delegate) {
super(delegate);
}
@Override
public boolean isWaterlogged() {
return waterlogged;
return ((org.bukkit.block.data.Waterlogged) super.getHandle()).isWaterlogged();
}
@Override
public void setWaterlogged(boolean waterlogged) {
this.waterlogged = waterlogged;
((org.bukkit.block.data.Waterlogged) super.getHandle()).setWaterlogged(waterlogged);
}
}

View File

@@ -3,6 +3,7 @@ package com.dfsek.terra.bukkit.world.block.data;
import com.dfsek.terra.api.generic.world.block.BlockFace;
import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.type.Slab;
import org.bukkit.block.data.type.Stairs;
/**
@@ -81,4 +82,17 @@ public final class TerraEnumAdapter {
throw new IllegalStateException();
}
}
public static Slab.Type fromTerraSlabType(com.dfsek.terra.api.generic.world.block.data.Slab.Type type) {
switch(type) {
case TOP:
return Slab.Type.TOP;
case DOUBLE:
return Slab.Type.DOUBLE;
case BOTTOM:
return Slab.Type.BOTTOM;
default:
throw new IllegalStateException();
}
}
}