001 package org.bukkit.material;
002
003 import org.bukkit.Material;
004 import org.bukkit.block.BlockFace;
005
006 /**
007 * Material data for the piston base block
008 */
009 public class PistonBaseMaterial extends MaterialData implements Directional, Redstone {
010 /**
011 *
012 * @deprecated Magic value
013 */
014 @Deprecated
015 public PistonBaseMaterial(final int type) {
016 super(type);
017 }
018
019 public PistonBaseMaterial(final Material type) {
020 super(type);
021 }
022
023 /**
024 *
025 * @deprecated Magic value
026 */
027 @Deprecated
028 public PistonBaseMaterial(final int type, final byte data) {
029 super(type, data);
030 }
031
032 /**
033 *
034 * @deprecated Magic value
035 */
036 @Deprecated
037 public PistonBaseMaterial(final Material type, final byte data) {
038 super(type, data);
039 }
040
041 public void setFacingDirection(BlockFace face) {
042 byte data = (byte) (getData() & 0x8);
043
044 switch (face) {
045 case UP:
046 data |= 1;
047 break;
048 case NORTH:
049 data |= 2;
050 break;
051 case SOUTH:
052 data |= 3;
053 break;
054 case WEST:
055 data |= 4;
056 break;
057 case EAST:
058 data |= 5;
059 break;
060 }
061 setData(data);
062 }
063
064 public BlockFace getFacing() {
065 byte dir = (byte) (getData() & 7);
066
067 switch (dir) {
068 case 0:
069 return BlockFace.DOWN;
070 case 1:
071 return BlockFace.UP;
072 case 2:
073 return BlockFace.NORTH;
074 case 3:
075 return BlockFace.SOUTH;
076 case 4:
077 return BlockFace.WEST;
078 case 5:
079 return BlockFace.EAST;
080 default:
081 return BlockFace.SELF;
082 }
083 }
084
085 public boolean isPowered() {
086 return (getData() & 0x8) == 0x8;
087 }
088
089 /**
090 * Sets the current state of this piston
091 *
092 * @param powered true if the piston is extended & powered, or false
093 */
094 public void setPowered(boolean powered) {
095 setData((byte) (powered ? (getData() | 0x8) : (getData() & ~0x8)));
096 }
097
098 /**
099 * Checks if this piston base is sticky, and returns true if so
100 *
101 * @return true if this piston is "sticky", or false
102 */
103 public boolean isSticky() {
104 return this.getItemType() == Material.PISTON_STICKY_BASE;
105 }
106
107 @Override
108 public PistonBaseMaterial clone() {
109 return (PistonBaseMaterial) super.clone();
110 }
111 }