From 49f3c16a387d156d04a25bf55b49984c05102c05 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 25 Dec 2020 21:47:56 -0700 Subject: [PATCH] Implement BukkitOrientable --- .../dfsek/terra/bukkit/BukkitWorldHandle.java | 3 ++ .../world/block/data/BukkitEnumAdapter.java | 14 +++++++++ .../world/block/data/BukkitOrientable.java | 30 +++++++++++++++++++ .../world/block/data/TerraEnumAdapter.java | 14 +++++++++ 4 files changed, 61 insertions(+) create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitOrientable.java diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitWorldHandle.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitWorldHandle.java index 363d471c9..90f382204 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitWorldHandle.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitWorldHandle.java @@ -11,6 +11,7 @@ import com.dfsek.terra.bukkit.world.block.BukkitBlockData; import com.dfsek.terra.bukkit.world.block.BukkitMaterialData; import com.dfsek.terra.bukkit.world.block.data.BukkitDirectional; import com.dfsek.terra.bukkit.world.block.data.BukkitMultipleFacing; +import com.dfsek.terra.bukkit.world.block.data.BukkitOrientable; import com.dfsek.terra.bukkit.world.block.data.BukkitRotatable; import com.dfsek.terra.bukkit.world.block.data.BukkitSlab; import com.dfsek.terra.bukkit.world.block.data.BukkitStairs; @@ -19,6 +20,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.Directional; import org.bukkit.block.data.MultipleFacing; +import org.bukkit.block.data.Orientable; import org.bukkit.block.data.Rotatable; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Slab; @@ -57,6 +59,7 @@ public class BukkitWorldHandle implements WorldHandle { if(bukkitData instanceof Slab) return new BukkitSlab((Slab) 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 BukkitBlockData(Bukkit.createBlockData(data)); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitEnumAdapter.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitEnumAdapter.java index 25cfce14d..6d4a02445 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitEnumAdapter.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitEnumAdapter.java @@ -1,6 +1,7 @@ package com.dfsek.terra.bukkit.world.block.data; +import com.dfsek.terra.api.platform.block.Axis; import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.data.Bisected; import com.dfsek.terra.api.platform.block.data.Slab; @@ -27,6 +28,19 @@ public final class BukkitEnumAdapter { } } + public static Axis fromBukkitAxis(org.bukkit.Axis axis) { + switch(axis) { + case X: + return Axis.X; + case Y: + return Axis.Y; + case Z: + return Axis.Z; + default: + throw new IllegalStateException(); + } + } + public static Bisected.Half fromBukkitHalf(org.bukkit.block.data.Bisected.Half half) { switch(half) { case BOTTOM: diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitOrientable.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitOrientable.java new file mode 100644 index 000000000..b0793ce41 --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/BukkitOrientable.java @@ -0,0 +1,30 @@ +package com.dfsek.terra.bukkit.world.block.data; + +import com.dfsek.terra.api.platform.block.Axis; +import com.dfsek.terra.api.platform.block.data.Orientable; +import com.dfsek.terra.bukkit.world.block.BukkitBlockData; + +import java.util.Set; +import java.util.stream.Collectors; + +public class BukkitOrientable extends BukkitBlockData implements Orientable { + + public BukkitOrientable(org.bukkit.block.data.Orientable delegate) { + super(delegate); + } + + @Override + public Set getAxes() { + return ((org.bukkit.block.data.Orientable) getHandle()).getAxes().stream().map(BukkitEnumAdapter::fromBukkitAxis).collect(Collectors.toSet()); + } + + @Override + public Axis getAxis() { + return BukkitEnumAdapter.fromBukkitAxis(((org.bukkit.block.data.Orientable) getHandle()).getAxis()); + } + + @Override + public void setAxis(Axis axis) { + ((org.bukkit.block.data.Orientable) getHandle()).setAxis(TerraEnumAdapter.fromTerraAxis(axis)); + } +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/TerraEnumAdapter.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/TerraEnumAdapter.java index 16094077b..426a8eeea 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/TerraEnumAdapter.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/data/TerraEnumAdapter.java @@ -2,6 +2,7 @@ package com.dfsek.terra.bukkit.world.block.data; import com.dfsek.terra.api.platform.block.BlockFace; +import org.bukkit.Axis; import org.bukkit.block.data.Bisected; import org.bukkit.block.data.type.Slab; import org.bukkit.block.data.type.Stairs; @@ -38,6 +39,19 @@ public final class TerraEnumAdapter { } } + public static Axis fromTerraAxis(com.dfsek.terra.api.platform.block.Axis axis) { + switch(axis) { + case Z: + return Axis.Z; + case Y: + return Axis.Y; + case X: + return Axis.X; + default: + throw new IllegalStateException(); + } + } + public static org.bukkit.block.BlockFace fromTerraBlockFace(BlockFace face) { switch(face) { case DOWN: