001    package org.bukkit.material;
002    
003    import org.bukkit.Material;
004    import org.bukkit.block.BlockFace;
005    
006    /**
007     * Represents a skull.
008     */
009    public class Skull extends MaterialData implements Directional {
010        public Skull() {
011            super(Material.SKULL);
012        }
013    
014        /**
015         * Instantiate a skull facing in a particular direction.
016         *
017         * @param direction the direction the skull's face is facing
018         */
019        public Skull(BlockFace direction) {
020            this();
021            setFacingDirection(direction);
022        }
023    
024        /**
025         *
026         * @deprecated Magic value
027         */
028        @Deprecated
029        public Skull(final int type) {
030            super(type);
031        }
032    
033        public Skull(final Material type) {
034            super(type);
035        }
036    
037        /**
038         *
039         * @deprecated Magic value
040         */
041        @Deprecated
042        public Skull(final int type, final byte data) {
043            super(type, data);
044        }
045    
046        /**
047         *
048         * @deprecated Magic value
049         */
050        @Deprecated
051        public Skull(final Material type, final byte data) {
052            super(type, data);
053        }
054    
055        public void setFacingDirection(BlockFace face) {
056            int data;
057    
058            switch (face) {
059                case SELF:
060                default:
061                    data = 0x1;
062                    break;
063    
064                case NORTH:
065                    data = 0x2;
066                    break;
067    
068                case EAST:
069                    data = 0x4;
070                    break;
071    
072                case SOUTH:
073                    data = 0x3;
074                    break;
075    
076                case WEST:
077                    data = 0x5;
078            }
079    
080            setData((byte) data);
081        }
082    
083        public BlockFace getFacing() {
084            int data = getData();
085    
086            switch (data) {
087                case 0x1:
088                default:
089                    return BlockFace.SELF;
090    
091                case 0x2:
092                    return BlockFace.NORTH;
093    
094                case 0x3:
095                    return BlockFace.SOUTH;
096    
097                case 0x4:
098                    return BlockFace.EAST;
099    
100                case 0x5:
101                    return BlockFace.WEST;
102            }
103        }
104    
105        @Override
106        public String toString() {
107            return super.toString() + " facing " + getFacing();
108        }
109    
110        @Override
111        public Skull clone() {
112            return (Skull) super.clone();
113        }
114    }