Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}