001    package org.bukkit.event.enchantment;
002    
003    import org.bukkit.block.Block;
004    import org.bukkit.entity.Player;
005    import org.bukkit.event.Cancellable;
006    import org.bukkit.event.HandlerList;
007    import org.bukkit.event.inventory.InventoryEvent;
008    import org.bukkit.inventory.InventoryView;
009    import org.bukkit.inventory.ItemStack;
010    
011    /**
012     * Called when an ItemStack is inserted in an enchantment table - can be
013     * called multiple times
014     */
015    public class PrepareItemEnchantEvent extends InventoryEvent implements Cancellable {
016        private static final HandlerList handlers = new HandlerList();
017        private final Block table;
018        private final ItemStack item;
019        private final int[] levelsOffered;
020        private final int bonus;
021        private boolean cancelled;
022        private final Player enchanter;
023    
024        public PrepareItemEnchantEvent(final Player enchanter, InventoryView view, final Block table, final ItemStack item, final int[] levelsOffered, final int bonus) {
025            super(view);
026            this.enchanter = enchanter;
027            this.table = table;
028            this.item = item;
029            this.levelsOffered = levelsOffered;
030            this.bonus = bonus;
031            this.cancelled = false;
032        }
033    
034        /**
035         * Gets the player enchanting the item
036         *
037         * @return enchanting player
038         */
039        public Player getEnchanter() {
040            return enchanter;
041        }
042    
043        /**
044         * Gets the block being used to enchant the item
045         *
046         * @return the block used for enchanting
047         */
048        public Block getEnchantBlock() {
049            return table;
050        }
051    
052        /**
053         * Gets the item to be enchanted (can be modified)
054         *
055         * @return ItemStack of item
056         */
057        public ItemStack getItem() {
058            return item;
059        }
060    
061        /**
062         * Get list of offered exp level costs of the enchantment (modify values
063         * to change offer)
064         *
065         * @return experience level costs offered
066         */
067        public int[] getExpLevelCostsOffered() {
068            return levelsOffered;
069        }
070    
071        /**
072         * Get enchantment bonus in effect - corresponds to number of bookshelves
073         *
074         * @return enchantment bonus
075         */
076        public int getEnchantmentBonus() {
077            return bonus;
078        }
079    
080        public boolean isCancelled() {
081            return cancelled;
082        }
083    
084        public void setCancelled(boolean cancel) {
085            this.cancelled = cancel;
086        }
087    
088        @Override
089        public HandlerList getHandlers() {
090            return handlers;
091        }
092    
093        public static HandlerList getHandlerList() {
094            return handlers;
095        }
096    }