001    package org.bukkit.event.block;
002    
003    import org.bukkit.block.Block;
004    import org.bukkit.Material;
005    import org.bukkit.event.HandlerList;
006    
007    /**
008     * Called when we try to place a block, to see if we can build it here or not.
009     * <p>
010     * Note:
011     * <ul>
012     * <li>The Block returned by getBlock() is the block we are trying to place
013     *     on, not the block we are trying to place.
014     * <li>If you want to figure out what is being placed, use {@link
015     *     #getMaterial()} or {@link #getMaterialId()} instead.
016     * </ul>
017     */
018    public class BlockCanBuildEvent extends BlockEvent {
019        private static final HandlerList handlers = new HandlerList();
020        protected boolean buildable;
021    
022        /**
023         *
024         * @deprecated Magic value
025         */
026        @Deprecated
027        protected int material;
028    
029        /**
030         *
031         * @deprecated Magic value
032         */
033        @Deprecated
034        public BlockCanBuildEvent(final Block block, final int id, final boolean canBuild) {
035            super(block);
036            buildable = canBuild;
037            material = id;
038        }
039    
040        /**
041         * Gets whether or not the block can be built here.
042         * <p>
043         * By default, returns Minecraft's answer on whether the block can be
044         * built here or not.
045         *
046         * @return boolean whether or not the block can be built
047         */
048        public boolean isBuildable() {
049            return buildable;
050        }
051    
052        /**
053         * Sets whether the block can be built here or not.
054         *
055         * @param cancel true if you want to allow the block to be built here
056         *     despite Minecraft's default behaviour
057         */
058        public void setBuildable(boolean cancel) {
059            this.buildable = cancel;
060        }
061    
062        /**
063         * Gets the Material that we are trying to place.
064         *
065         * @return The Material that we are trying to place
066         */
067        public Material getMaterial() {
068            return Material.getMaterial(material);
069        }
070    
071        /**
072         * Gets the Material ID for the Material that we are trying to place.
073         *
074         * @return The Material ID for the Material that we are trying to place
075         * @deprecated Magic value
076         */
077        @Deprecated
078        public int getMaterialId() {
079            return material;
080        }
081    
082        @Override
083        public HandlerList getHandlers() {
084            return handlers;
085        }
086    
087        public static HandlerList getHandlerList() {
088            return handlers;
089        }
090    }