package tc.oc.commons.bukkit.util;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.util.BlockVector;
public class BlockFaces {
private BlockFaces() {}
public static final BlockFace[] NEIGHBORS = { BlockFace.EAST,
BlockFace.WEST,
BlockFace.NORTH,
BlockFace.SOUTH,
BlockFace.UP,
BlockFace.DOWN };
private static final BlockFace[] clockwise = new BlockFace[] {
BlockFace.SOUTH,
BlockFace.SOUTH_SOUTH_WEST,
BlockFace.SOUTH_WEST,
BlockFace.WEST_SOUTH_WEST,
BlockFace.WEST,
BlockFace.WEST_NORTH_WEST,
BlockFace.NORTH_WEST,
BlockFace.NORTH_NORTH_WEST,
BlockFace.NORTH,
BlockFace.NORTH_NORTH_EAST,
BlockFace.NORTH_EAST,
BlockFace.EAST_NORTH_EAST,
BlockFace.EAST,
BlockFace.EAST_SOUTH_EAST,
BlockFace.SOUTH_EAST,
BlockFace.SOUTH_SOUTH_EAST,
};
public static BlockVector getRelative(BlockVector pos, BlockFace face) {
return new BlockVector(pos.getBlockX() + face.getModX(),
pos.getBlockY() + face.getModY(),
pos.getBlockZ() + face.getModZ());
}
public static BlockState getRelative(BlockState block, BlockFace face) {
return block.getWorld().getBlockAt(
block.getX() + face.getModX(),
block.getY() + face.getModY(),
block.getZ() + face.getModZ()
).getState();
}
public static BlockFace yawToFace(float yaw) {
return clockwise[Math.round(yaw / 22.5f) & 0xf];
}
public static float faceToYaw(BlockFace face) {
switch(face) {
case SOUTH: return 0f;
case SOUTH_SOUTH_WEST: return 22.5f;
case SOUTH_WEST: return 45f;
case WEST_SOUTH_WEST: return 67.5f;
case WEST: return 90f;
case WEST_NORTH_WEST: return 112.5f;
case NORTH_WEST: return 135f;
case NORTH_NORTH_WEST: return 157.5f;
case NORTH: return -180f;
case NORTH_NORTH_EAST: return -157.5f;
case NORTH_EAST: return -135f;
case EAST_NORTH_EAST: return -112.5f;
case EAST: return -90f;
case EAST_SOUTH_EAST: return -67.5f;
case SOUTH_EAST: return -45f;
case SOUTH_SOUTH_EAST: return -22.5f;
default: return 0f;
}
}
}