001    package org.bukkit.material;
002    
003    import org.bukkit.Material;
004    import org.bukkit.block.BlockFace;
005    
006    public class Diode extends MaterialData implements Directional {
007        public Diode() {
008            super(Material.DIODE_BLOCK_ON);
009        }
010    
011        /**
012         *
013         * @deprecated Magic value
014         */
015        @Deprecated
016        public Diode(int type) {
017            super(type);
018        }
019    
020        public Diode(Material type) {
021            super(type);
022        }
023    
024        /**
025         *
026         * @deprecated Magic value
027         */
028        @Deprecated
029        public Diode(int type, byte data) {
030            super(type, data);
031        }
032    
033        /**
034         *
035         * @deprecated Magic value
036         */
037        @Deprecated
038        public Diode(Material type, byte data) {
039            super(type, data);
040        }
041    
042        /**
043         * Sets the delay of the repeater
044         *
045         * @param delay
046         *            The new delay (1-4)
047         */
048        public void setDelay(int delay) {
049            if (delay > 4) {
050                delay = 4;
051            }
052            if (delay < 1) {
053                delay = 1;
054            }
055            byte newData = (byte) (getData() & 0x3);
056    
057            setData((byte) (newData | ((delay - 1) << 2)));
058        }
059    
060        /**
061         * Gets the delay of the repeater in ticks
062         *
063         * @return The delay (1-4)
064         */
065        public int getDelay() {
066            return (getData() >> 2) + 1;
067        }
068    
069        public void setFacingDirection(BlockFace face) {
070            int delay = getDelay();
071            byte data;
072    
073            switch (face) {
074            case EAST:
075                data = 0x1;
076                break;
077    
078            case SOUTH:
079                data = 0x2;
080                break;
081    
082            case WEST:
083                data = 0x3;
084                break;
085    
086            case NORTH:
087            default:
088                data = 0x0;
089            }
090    
091            setData(data);
092            setDelay(delay);
093        }
094    
095        public BlockFace getFacing() {
096            byte data = (byte) (getData() & 0x3);
097    
098            switch (data) {
099            case 0x0:
100            default:
101                return BlockFace.NORTH;
102    
103            case 0x1:
104                return BlockFace.EAST;
105    
106            case 0x2:
107                return BlockFace.SOUTH;
108    
109            case 0x3:
110                return BlockFace.WEST;
111            }
112        }
113    
114        @Override
115        public String toString() {
116            return super.toString() + " facing " + getFacing() + " with " + getDelay() + " ticks delay";
117        }
118    
119        @Override
120        public Diode clone() {
121            return (Diode) super.clone();
122        }
123    }