namespace Minecraft.Server.FourKit.Block; /// /// Represents the face of a block. /// public enum BlockFace { DOWN = 0, UP = 1, NORTH = 2, SOUTH = 3, WEST = 4, EAST = 5, SELF = 6, NORTH_EAST, NORTH_WEST, SOUTH_EAST, SOUTH_WEST, WEST_NORTH_WEST, NORTH_NORTH_WEST, NORTH_NORTH_EAST, EAST_NORTH_EAST, EAST_SOUTH_EAST, SOUTH_SOUTH_EAST, SOUTH_SOUTH_WEST, WEST_SOUTH_WEST } public static class BlockFaceExtensions { /// /// Get the amount of X-coordinates to modify to get the represented block. /// /// The block face. /// Amount of X-coordinates to modify. public static int getModX(this BlockFace face) => face switch { BlockFace.EAST => 1, BlockFace.WEST => -1, BlockFace.NORTH_EAST => 1, BlockFace.NORTH_WEST => -1, BlockFace.SOUTH_EAST => 1, BlockFace.SOUTH_WEST => -1, BlockFace.EAST_NORTH_EAST => 1, BlockFace.EAST_SOUTH_EAST => 1, BlockFace.NORTH_NORTH_EAST => 1, BlockFace.SOUTH_SOUTH_EAST => 1, BlockFace.WEST_NORTH_WEST => -1, BlockFace.WEST_SOUTH_WEST => -1, BlockFace.NORTH_NORTH_WEST => -1, BlockFace.SOUTH_SOUTH_WEST => -1, _ => 0 }; /// /// Get the amount of Y-coordinates to modify to get the represented block. /// /// The block face. /// Amount of Y-coordinates to modify. public static int getModY(this BlockFace face) => face switch { BlockFace.UP => 1, BlockFace.DOWN => -1, _ => 0 }; /// /// Get the amount of Z-coordinates to modify to get the represented block. /// /// The block face. /// Amount of Z-coordinates to modify. public static int getModZ(this BlockFace face) => face switch { BlockFace.NORTH => -1, BlockFace.SOUTH => 1, BlockFace.NORTH_EAST => -1, BlockFace.NORTH_WEST => -1, BlockFace.SOUTH_EAST => 1, BlockFace.SOUTH_WEST => 1, BlockFace.NORTH_NORTH_EAST => -1, BlockFace.NORTH_NORTH_WEST => -1, BlockFace.EAST_NORTH_EAST => -1, BlockFace.WEST_NORTH_WEST => -1, BlockFace.EAST_SOUTH_EAST => 1, BlockFace.WEST_SOUTH_WEST => 1, BlockFace.SOUTH_SOUTH_EAST => 1, BlockFace.SOUTH_SOUTH_WEST => 1, _ => 0 }; /// /// Gets the opposite face of this block face. /// /// The block face. /// The opposite block face. public static BlockFace getOppositeFace(this BlockFace face) => face switch { BlockFace.NORTH => BlockFace.SOUTH, BlockFace.SOUTH => BlockFace.NORTH, BlockFace.EAST => BlockFace.WEST, BlockFace.WEST => BlockFace.EAST, BlockFace.UP => BlockFace.DOWN, BlockFace.DOWN => BlockFace.UP, BlockFace.NORTH_EAST => BlockFace.SOUTH_WEST, BlockFace.NORTH_WEST => BlockFace.SOUTH_EAST, BlockFace.SOUTH_EAST => BlockFace.NORTH_WEST, BlockFace.SOUTH_WEST => BlockFace.NORTH_EAST, BlockFace.WEST_NORTH_WEST => BlockFace.EAST_SOUTH_EAST, BlockFace.NORTH_NORTH_WEST => BlockFace.SOUTH_SOUTH_EAST, BlockFace.NORTH_NORTH_EAST => BlockFace.SOUTH_SOUTH_WEST, BlockFace.EAST_NORTH_EAST => BlockFace.WEST_SOUTH_WEST, BlockFace.EAST_SOUTH_EAST => BlockFace.WEST_NORTH_WEST, BlockFace.SOUTH_SOUTH_EAST => BlockFace.NORTH_NORTH_WEST, BlockFace.SOUTH_SOUTH_WEST => BlockFace.NORTH_NORTH_EAST, BlockFace.WEST_SOUTH_WEST => BlockFace.EAST_NORTH_EAST, _ => BlockFace.SELF }; }