Bukkit  1.4.7-R1.0
 All Classes Namespaces Files Functions Variables Enumerator Pages
Rails.java
Go to the documentation of this file.
1 package org.bukkit.material;
2 
3 import org.bukkit.Material;
4 import org.bukkit.block.BlockFace;
5 
9 public class Rails extends MaterialData {
10 
11  public Rails() {
12  super(Material.RAILS);
13  }
14 
15  public Rails(final int type) {
16  super(type);
17  }
18 
19  public Rails(final Material type) {
20  super(type);
21  }
22 
23  public Rails(final int type, final byte data) {
24  super(type, data);
25  }
26 
27  public Rails(final Material type, final byte data) {
28  super(type, data);
29  }
30 
34  public boolean isOnSlope() {
35  byte d = getConvertedData();
36 
37  return (d == 0x2 || d == 0x3 || d == 0x4 || d == 0x5);
38  }
39 
43  public boolean isCurve() {
44  byte d = getConvertedData();
45 
46  return (d == 0x6 || d == 0x7 || d == 0x8 || d == 0x9);
47  }
48 
57  byte d = getConvertedData();
58 
59  switch (d) {
60  case 0x0:
61  default:
62  return BlockFace.SOUTH;
63 
64  case 0x1:
65  return BlockFace.EAST;
66 
67  case 0x2:
68  return BlockFace.EAST;
69 
70  case 0x3:
71  return BlockFace.WEST;
72 
73  case 0x4:
74  return BlockFace.NORTH;
75 
76  case 0x5:
77  return BlockFace.SOUTH;
78 
79  case 0x6:
80  return BlockFace.NORTH_WEST;
81 
82  case 0x7:
83  return BlockFace.NORTH_EAST;
84 
85  case 0x8:
86  return BlockFace.SOUTH_EAST;
87 
88  case 0x9:
89  return BlockFace.SOUTH_WEST;
90  }
91  }
92 
93  @Override
94  public String toString() {
95  return super.toString() + " facing " + getDirection() + (isCurve() ? " on a curve" : (isOnSlope() ? " on a slope" : ""));
96  }
97 
103  protected byte getConvertedData() {
104  return getData();
105  }
106 
117  public void setDirection(BlockFace face, boolean isOnSlope) {
118  switch (face) {
119  case EAST:
120  setData((byte) (isOnSlope ? 0x2 : 0x1));
121  break;
122 
123  case WEST:
124  setData((byte) (isOnSlope ? 0x3 : 0x1));
125  break;
126 
127  case NORTH:
128  setData((byte) (isOnSlope ? 0x4 : 0x0));
129  break;
130 
131  case SOUTH:
132  setData((byte) (isOnSlope ? 0x5 : 0x0));
133  break;
134 
135  case NORTH_WEST:
136  setData((byte) 0x6);
137  break;
138 
139  case NORTH_EAST:
140  setData((byte) 0x7);
141  break;
142 
143  case SOUTH_EAST:
144  setData((byte) 0x8);
145  break;
146 
147  case SOUTH_WEST:
148  setData((byte) 0x9);
149  break;
150  }
151  }
152 
153  @Override
154  public Rails clone() {
155  return (Rails) super.clone();
156  }
157 }