001    package org.bukkit.event.enchantment;
002    
003    import java.util.HashMap;
004    import java.util.Map;
005    
006    import org.bukkit.block.Block;
007    import org.bukkit.enchantments.Enchantment;
008    import org.bukkit.entity.Player;
009    import org.bukkit.event.Cancellable;
010    import org.bukkit.event.HandlerList;
011    import org.bukkit.event.inventory.InventoryEvent;
012    import org.bukkit.inventory.InventoryView;
013    import org.bukkit.inventory.ItemStack;
014    
015    /**
016     * Called when an ItemStack is successfully enchanted (currently at
017     * enchantment table)
018     */
019    public class EnchantItemEvent extends InventoryEvent implements Cancellable {
020        private static final HandlerList handlers = new HandlerList();
021        private final Block table;
022        private final ItemStack item;
023        private int level;
024        private boolean cancelled;
025        private final Map<Enchantment,Integer> enchants;
026        private final Player enchanter;
027        private int button;
028    
029        public EnchantItemEvent(final Player enchanter, final InventoryView view, final Block table, final ItemStack item, final int level, final Map<Enchantment, Integer> enchants, final int i) {
030            super(view);
031            this.enchanter = enchanter;
032            this.table = table;
033            this.item = item;
034            this.level = level;
035            this.enchants = new HashMap<Enchantment, Integer>(enchants);
036            this.cancelled = false;
037            this.button = i;
038        }
039    
040        /**
041         * Gets the player enchanting the item
042         *
043         * @return enchanting player
044         */
045        public Player getEnchanter() {
046            return enchanter;
047        }
048    
049        /**
050         * Gets the block being used to enchant the item
051         *
052         * @return the block used for enchanting
053         */
054        public Block getEnchantBlock() {
055            return table;
056        }
057    
058        /**
059         * Gets the item to be enchanted (can be modified)
060         *
061         * @return ItemStack of item
062         */
063        public ItemStack getItem() {
064            return item;
065        }
066    
067        /**
068         * Get cost in exp levels of the enchantment
069         *
070         * @return experience level cost
071         */
072        public int getExpLevelCost() {
073            return level;
074        }
075    
076        /**
077         * Set cost in exp levels of the enchantment
078         *
079         * @param level - cost in levels
080         */
081        public void setExpLevelCost(int level) {
082            this.level = level;
083        }
084    
085        /**
086         * Get map of enchantment (levels, keyed by type) to be added to item
087         * (modify map returned to change values). Note: Any enchantments not
088         * allowed for the item will be ignored
089         *
090         * @return map of enchantment levels, keyed by enchantment
091         */
092        public Map<Enchantment, Integer> getEnchantsToAdd() {
093            return enchants;
094        }
095    
096        /**
097         * Which button was pressed to initiate the enchanting.
098         *
099         * @return The button index (0, 1, or 2).
100         */
101        public int whichButton() {
102            return button;
103        }
104    
105        public boolean isCancelled() {
106            return cancelled;
107        }
108    
109        public void setCancelled(boolean cancel) {
110            this.cancelled = cancel;
111        }
112    
113        @Override
114        public HandlerList getHandlers() {
115            return handlers;
116        }
117    
118        public static HandlerList getHandlerList() {
119            return handlers;
120        }
121    }