Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 114 lines 3.2 kB view raw
1package org.bukkit.block; 2 3/** 4 * Represents the face of a block 5 */ 6public enum BlockFace { 7 NORTH(-1, 0, 0), EAST(0, 0, -1), SOUTH(1, 0, 0), WEST(0, 0, 1), UP(0, 1, 0), DOWN(0, -1, 0), NORTH_EAST(NORTH, EAST), NORTH_WEST(NORTH, WEST), SOUTH_EAST(SOUTH, EAST), SOUTH_WEST(SOUTH, WEST), WEST_NORTH_WEST(WEST, NORTH_WEST), NORTH_NORTH_WEST(NORTH, NORTH_WEST), NORTH_NORTH_EAST(NORTH, NORTH_EAST), EAST_NORTH_EAST(EAST, NORTH_EAST), EAST_SOUTH_EAST(EAST, SOUTH_EAST), SOUTH_SOUTH_EAST(SOUTH, SOUTH_EAST), SOUTH_SOUTH_WEST(SOUTH, SOUTH_WEST), WEST_SOUTH_WEST(WEST, SOUTH_WEST), SELF(0, 0, 0); 8 9 private final int modX; 10 private final int modY; 11 private final int modZ; 12 13 private BlockFace(final int modX, final int modY, final int modZ) { 14 this.modX = modX; 15 this.modY = modY; 16 this.modZ = modZ; 17 } 18 19 private BlockFace(final BlockFace face1, final BlockFace face2) { 20 this.modX = face1.getModX() + face2.getModX(); 21 this.modY = face1.getModY() + face2.getModY(); 22 this.modZ = face1.getModZ() + face2.getModZ(); 23 } 24 25 /** 26 * Get the amount of X-coordinates to modify to get the represented block 27 * 28 * @return Amount of X-coordinates to modify 29 */ 30 public int getModX() { 31 return modX; 32 } 33 34 /** 35 * Get the amount of Y-coordinates to modify to get the represented block 36 * 37 * @return Amount of Y-coordinates to modify 38 */ 39 public int getModY() { 40 return modY; 41 } 42 43 /** 44 * Get the amount of Z-coordinates to modify to get the represented block 45 * 46 * @return Amount of Z-coordinates to modify 47 */ 48 public int getModZ() { 49 return modZ; 50 } 51 52 public BlockFace getOppositeFace() { 53 switch (this) { 54 case NORTH: 55 return BlockFace.SOUTH; 56 57 case SOUTH: 58 return BlockFace.NORTH; 59 60 case EAST: 61 return BlockFace.WEST; 62 63 case WEST: 64 return BlockFace.EAST; 65 66 case UP: 67 return BlockFace.DOWN; 68 69 case DOWN: 70 return BlockFace.UP; 71 72 case NORTH_EAST: 73 return BlockFace.SOUTH_WEST; 74 75 case NORTH_WEST: 76 return BlockFace.SOUTH_EAST; 77 78 case SOUTH_EAST: 79 return BlockFace.NORTH_WEST; 80 81 case SOUTH_WEST: 82 return BlockFace.NORTH_EAST; 83 84 case WEST_NORTH_WEST: 85 return BlockFace.EAST_SOUTH_EAST; 86 87 case NORTH_NORTH_WEST: 88 return BlockFace.SOUTH_SOUTH_EAST; 89 90 case NORTH_NORTH_EAST: 91 return BlockFace.SOUTH_SOUTH_WEST; 92 93 case EAST_NORTH_EAST: 94 return BlockFace.WEST_SOUTH_WEST; 95 96 case EAST_SOUTH_EAST: 97 return BlockFace.WEST_NORTH_WEST; 98 99 case SOUTH_SOUTH_EAST: 100 return BlockFace.NORTH_NORTH_WEST; 101 102 case SOUTH_SOUTH_WEST: 103 return BlockFace.NORTH_NORTH_EAST; 104 105 case WEST_SOUTH_WEST: 106 return BlockFace.EAST_NORTH_EAST; 107 108 case SELF: 109 return BlockFace.SELF; 110 } 111 112 return BlockFace.SELF; 113 } 114}