001 package org.bukkit.material;
002
003 import org.bukkit.Material;
004 import org.bukkit.block.BlockFace;
005
006 /**
007 * Represents the cocoa plant
008 */
009 public class CocoaPlant extends MaterialData implements Directional, Attachable {
010
011 public enum CocoaPlantSize {
012 SMALL,
013 MEDIUM,
014 LARGE
015 }
016
017 public CocoaPlant() {
018 super(Material.COCOA);
019 }
020
021 /**
022 *
023 * @deprecated Magic value
024 */
025 @Deprecated
026 public CocoaPlant(final int type) {
027 super(type);
028 }
029
030 /**
031 *
032 * @deprecated Magic value
033 */
034 @Deprecated
035 public CocoaPlant(final int type, final byte data) {
036 super(type, data);
037 }
038
039 public CocoaPlant(CocoaPlantSize sz) {
040 this();
041 setSize(sz);
042 }
043
044 public CocoaPlant(CocoaPlantSize sz, BlockFace dir) {
045 this();
046 setSize(sz);
047 setFacingDirection(dir);
048 }
049
050 /**
051 * Get size of plant
052 *
053 * @return size
054 */
055 public CocoaPlantSize getSize() {
056 switch (getData() & 0xC) {
057 case 0:
058 return CocoaPlantSize.SMALL;
059 case 4:
060 return CocoaPlantSize.MEDIUM;
061 default:
062 return CocoaPlantSize.LARGE;
063 }
064 }
065
066 /**
067 * Set size of plant
068 *
069 * @param sz - size of plant
070 */
071 public void setSize(CocoaPlantSize sz) {
072 int dat = getData() & 0x3;
073 switch (sz) {
074 case SMALL:
075 break;
076 case MEDIUM:
077 dat |= 0x4;
078 break;
079 case LARGE:
080 dat |= 0x8;
081 break;
082 }
083 setData((byte) dat);
084 }
085
086 public BlockFace getAttachedFace() {
087 return getFacing().getOppositeFace();
088 }
089
090 public void setFacingDirection(BlockFace face) {
091 int dat = getData() & 0xC;
092 switch (face) {
093 default:
094 case SOUTH:
095 break;
096 case WEST:
097 dat |= 0x1;
098 break;
099 case NORTH:
100 dat |= 0x2;
101 break;
102 case EAST:
103 dat |= 0x3;
104 break;
105 }
106 setData((byte) dat);
107 }
108
109 public BlockFace getFacing() {
110 switch (getData() & 0x3) {
111 case 0:
112 return BlockFace.SOUTH;
113 case 1:
114 return BlockFace.WEST;
115 case 2:
116 return BlockFace.NORTH;
117 case 3:
118 return BlockFace.EAST;
119 }
120 return null;
121 }
122
123 @Override
124 public CocoaPlant clone() {
125 return (CocoaPlant) super.clone();
126 }
127
128 @Override
129 public String toString() {
130 return super.toString() + " facing " + getFacing() + " " + getSize();
131 }
132 }