Bukkit  1.4.7-R1.0
 All Classes Namespaces Files Functions Variables Enumerator Pages
Sign.java
Go to the documentation of this file.
1 package org.bukkit.material;
2 
3 import org.bukkit.block.BlockFace;
4 import org.bukkit.Material;
5 
9 public class Sign extends MaterialData implements Attachable {
10  public Sign() {
11  super(Material.SIGN_POST);
12  }
13 
14  public Sign(final int type) {
15  super(type);
16  }
17 
18  public Sign(final Material type) {
19  super(type);
20  }
21 
22  public Sign(final int type, final byte data) {
23  super(type, data);
24  }
25 
26  public Sign(final Material type, final byte data) {
27  super(type, data);
28  }
29 
36  public boolean isWallSign() {
37  return getItemType() == Material.WALL_SIGN;
38  }
39 
46  if (isWallSign()) {
47  byte data = getData();
48 
49  switch (data) {
50  case 0x2:
51  return BlockFace.SOUTH;
52 
53  case 0x3:
54  return BlockFace.NORTH;
55 
56  case 0x4:
57  return BlockFace.EAST;
58 
59  case 0x5:
60  return BlockFace.WEST;
61  }
62 
63  return null;
64  } else {
65  return BlockFace.DOWN;
66  }
67  }
68 
74  public BlockFace getFacing() {
75  byte data = getData();
76 
77  if (!isWallSign()) {
78  switch (data) {
79  case 0x0:
80  return BlockFace.SOUTH;
81 
82  case 0x1:
84 
85  case 0x2:
86  return BlockFace.SOUTH_WEST;
87 
88  case 0x3:
90 
91  case 0x4:
92  return BlockFace.WEST;
93 
94  case 0x5:
96 
97  case 0x6:
98  return BlockFace.NORTH_WEST;
99 
100  case 0x7:
102 
103  case 0x8:
104  return BlockFace.NORTH;
105 
106  case 0x9:
108 
109  case 0xA:
110  return BlockFace.NORTH_EAST;
111 
112  case 0xB:
113  return BlockFace.EAST_NORTH_EAST;
114 
115  case 0xC:
116  return BlockFace.EAST;
117 
118  case 0xD:
119  return BlockFace.EAST_SOUTH_EAST;
120 
121  case 0xE:
122  return BlockFace.SOUTH_EAST;
123 
124  case 0xF:
126  }
127 
128  return null;
129  } else {
130  return getAttachedFace().getOppositeFace();
131  }
132  }
133 
134  public void setFacingDirection(BlockFace face) {
135  byte data;
136 
137  if (isWallSign()) {
138  switch (face) {
139  case NORTH:
140  data = 0x2;
141  break;
142 
143  case SOUTH:
144  data = 0x3;
145  break;
146 
147  case WEST:
148  data = 0x4;
149  break;
150 
151  case EAST:
152  default:
153  data = 0x5;
154  }
155  } else {
156  switch (face) {
157  case SOUTH:
158  data = 0x0;
159  break;
160 
161  case SOUTH_SOUTH_WEST:
162  data = 0x1;
163  break;
164 
165  case SOUTH_WEST:
166  data = 0x2;
167  break;
168 
169  case WEST_SOUTH_WEST:
170  data = 0x3;
171  break;
172 
173  case WEST:
174  data = 0x4;
175  break;
176 
177  case WEST_NORTH_WEST:
178  data = 0x5;
179  break;
180 
181  case NORTH_WEST:
182  data = 0x6;
183  break;
184 
185  case NORTH_NORTH_WEST:
186  data = 0x7;
187  break;
188 
189  case NORTH:
190  data = 0x8;
191  break;
192 
193  case NORTH_NORTH_EAST:
194  data = 0x9;
195  break;
196 
197  case NORTH_EAST:
198  data = 0xA;
199  break;
200 
201  case EAST_NORTH_EAST:
202  data = 0xB;
203  break;
204 
205  case EAST:
206  data = 0xC;
207  break;
208 
209  case EAST_SOUTH_EAST:
210  data = 0xD;
211  break;
212 
213  case SOUTH_SOUTH_EAST:
214  data = 0xF;
215  break;
216 
217  case SOUTH_EAST:
218  default:
219  data = 0xE;
220  }
221  }
222 
223  setData(data);
224  }
225 
226  @Override
227  public String toString() {
228  return super.toString() + " facing " + getFacing();
229  }
230 
231  @Override
232  public Sign clone() {
233  return (Sign) super.clone();
234  }
235 }