summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/Material.java6
-rw-r--r--src/main/java/org/bukkit/material/Sign.java105
2 files changed, 108 insertions, 3 deletions
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index 83d096e4..b2beb308 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -65,12 +65,12 @@ public enum Material {
SOIL(60),
FURNACE(61),
BURNING_FURNACE(62),
- SIGN_POST(63),
+ SIGN_POST(63, Sign.class),
WOODEN_DOOR(64),
LADDER(65, Ladder.class),
RAILS(66),
COBBLESTONE_STAIRS(67),
- WALL_SIGN(68),
+ WALL_SIGN(68, Sign.class),
LEVER(69, Lever.class),
STONE_PLATE(70),
IRON_DOOR_BLOCK(71),
@@ -162,7 +162,7 @@ public enum Material {
GRILLED_PORK(320),
PAINTING(321),
GOLDEN_APPLE(322),
- SIGN(323),
+ SIGN(323, Sign.class),
WOOD_DOOR(324),
BUCKET(325),
WATER_BUCKET(326),
diff --git a/src/main/java/org/bukkit/material/Sign.java b/src/main/java/org/bukkit/material/Sign.java
new file mode 100644
index 00000000..1e4cc94c
--- /dev/null
+++ b/src/main/java/org/bukkit/material/Sign.java
@@ -0,0 +1,105 @@
+
+package org.bukkit.material;
+
+import org.bukkit.BlockFace;
+import org.bukkit.Material;
+
+/**
+ * MaterialData for signs
+ */
+public class Sign extends MaterialData implements Attachable {
+ public Sign(final int type) {
+ super(type);
+ }
+
+ public Sign(final Material type) {
+ super(type);
+ }
+
+ public Sign(final int type, final byte data) {
+ super(type, data);
+ }
+
+ public Sign(final Material type, final byte data) {
+ super(type, data);
+ }
+
+ /**
+ * Gets the face that this block is attached on
+ *
+ * @return BlockFace attached to
+ */
+ public BlockFace getAttachedFace() {
+ if (getItemType() == Material.WALL_SIGN) {
+ byte data = getData();
+
+ switch (data) {
+ case 0x2:
+ return BlockFace.WEST;
+ case 0x3:
+ return BlockFace.EAST;
+ case 0x4:
+ return BlockFace.SOUTH;
+ case 0x5:
+ return BlockFace.NORTH;
+ }
+
+ return null;
+ } else {
+ return BlockFace.DOWN;
+ }
+ }
+
+ /**
+ * Gets the direction that this sign is currently facing
+ *
+ * @return BlockFace indicating where this sign is facing
+ */
+ public BlockFace getFacing() {
+ byte data = getData();
+
+ if (getAttachedFace() == BlockFace.DOWN) {
+ switch (data) {
+ case 0x0:
+ case 0x1:
+ return BlockFace.WEST;
+ case 0x2:
+ case 0x3:
+ return BlockFace.NORTH_WEST;
+ case 0x4:
+ case 0x5:
+ return BlockFace.NORTH;
+ case 0x6:
+ case 0x7:
+ return BlockFace.NORTH_EAST;
+ case 0x8:
+ case 0x9:
+ return BlockFace.EAST;
+ case 0xA:
+ case 0xB:
+ return BlockFace.SOUTH_EAST;
+ case 0xC:
+ case 0xD:
+ return BlockFace.SOUTH;
+ case 0xE:
+ case 0xF:
+ return BlockFace.SOUTH_WEST;
+ }
+
+ return null;
+ } else {
+ switch (data) {
+ case 0x2:
+ return BlockFace.EAST;
+ case 0x3:
+ return BlockFace.WEST;
+ case 0x4:
+ return BlockFace.NORTH;
+ case 0x5:
+ return BlockFace.SOUTH;
+ }
+ }
+
+ return null;
+ }
+}