001 package org.bukkit.enchantments;
002
003 import org.bukkit.Material;
004 import org.bukkit.inventory.ItemStack;
005
006 /**
007 * Represents the applicable target for a {@link Enchantment}
008 */
009 public enum EnchantmentTarget {
010 /**
011 * Allows the Enchantment to be placed on all items
012 */
013 ALL {
014 @Override
015 public boolean includes(Material item) {
016 return true;
017 }
018 },
019
020 /**
021 * Allows the Enchantment to be placed on armor
022 */
023 ARMOR {
024 @Override
025 public boolean includes(Material item) {
026 return ARMOR_FEET.includes(item)
027 || ARMOR_LEGS.includes(item)
028 || ARMOR_HEAD.includes(item)
029 || ARMOR_TORSO.includes(item);
030 }
031 },
032
033 /**
034 * Allows the Enchantment to be placed on feet slot armor
035 */
036 ARMOR_FEET {
037 @Override
038 public boolean includes(Material item) {
039 return item.equals(Material.LEATHER_BOOTS)
040 || item.equals(Material.CHAINMAIL_BOOTS)
041 || item.equals(Material.IRON_BOOTS)
042 || item.equals(Material.DIAMOND_BOOTS)
043 || item.equals(Material.GOLD_BOOTS);
044 }
045 },
046
047 /**
048 * Allows the Enchantment to be placed on leg slot armor
049 */
050 ARMOR_LEGS {
051 @Override
052 public boolean includes(Material item) {
053 return item.equals(Material.LEATHER_LEGGINGS)
054 || item.equals(Material.CHAINMAIL_LEGGINGS)
055 || item.equals(Material.IRON_LEGGINGS)
056 || item.equals(Material.DIAMOND_LEGGINGS)
057 || item.equals(Material.GOLD_LEGGINGS);
058 }
059 },
060
061 /**
062 * Allows the Enchantment to be placed on torso slot armor
063 */
064 ARMOR_TORSO {
065 @Override
066 public boolean includes(Material item) {
067 return item.equals(Material.LEATHER_CHESTPLATE)
068 || item.equals(Material.CHAINMAIL_CHESTPLATE)
069 || item.equals(Material.IRON_CHESTPLATE)
070 || item.equals(Material.DIAMOND_CHESTPLATE)
071 || item.equals(Material.GOLD_CHESTPLATE);
072 }
073 },
074
075 /**
076 * Allows the Enchantment to be placed on head slot armor
077 */
078 ARMOR_HEAD {
079 @Override
080 public boolean includes(Material item) {
081 return item.equals(Material.LEATHER_HELMET)
082 || item.equals(Material.CHAINMAIL_HELMET)
083 || item.equals(Material.DIAMOND_HELMET)
084 || item.equals(Material.IRON_HELMET)
085 || item.equals(Material.GOLD_HELMET);
086 }
087 },
088
089 /**
090 * Allows the Enchantment to be placed on weapons (swords)
091 */
092 WEAPON {
093 @Override
094 public boolean includes(Material item) {
095 return item.equals(Material.WOOD_SWORD)
096 || item.equals(Material.STONE_SWORD)
097 || item.equals(Material.IRON_SWORD)
098 || item.equals(Material.DIAMOND_SWORD)
099 || item.equals(Material.GOLD_SWORD);
100 }
101 },
102
103 /**
104 * Allows the Enchantment to be placed on tools (spades, pickaxe, hoes,
105 * axes)
106 */
107 TOOL {
108 @Override
109 public boolean includes(Material item) {
110 return item.equals(Material.WOOD_SPADE)
111 || item.equals(Material.STONE_SPADE)
112 || item.equals(Material.IRON_SPADE)
113 || item.equals(Material.DIAMOND_SPADE)
114 || item.equals(Material.GOLD_SPADE)
115 || item.equals(Material.WOOD_PICKAXE)
116 || item.equals(Material.STONE_PICKAXE)
117 || item.equals(Material.IRON_PICKAXE)
118 || item.equals(Material.DIAMOND_PICKAXE)
119 || item.equals(Material.GOLD_PICKAXE)
120 || item.equals(Material.WOOD_HOE) // NOTE: No vanilla enchantments for this
121 || item.equals(Material.STONE_HOE) // NOTE: No vanilla enchantments for this
122 || item.equals(Material.IRON_HOE) // NOTE: No vanilla enchantments for this
123 || item.equals(Material.DIAMOND_HOE) // NOTE: No vanilla enchantments for this
124 || item.equals(Material.GOLD_HOE) // NOTE: No vanilla enchantments for this
125 || item.equals(Material.WOOD_AXE)
126 || item.equals(Material.STONE_AXE)
127 || item.equals(Material.IRON_AXE)
128 || item.equals(Material.DIAMOND_AXE)
129 || item.equals(Material.GOLD_AXE)
130 || item.equals(Material.SHEARS) // NOTE: No vanilla enchantments for this
131 || item.equals(Material.FLINT_AND_STEEL); // NOTE: No vanilla enchantments for this
132 }
133 },
134
135 /**
136 * Allows the Enchantment to be placed on bows.
137 */
138 BOW {
139 @Override
140 public boolean includes(Material item) {
141 return item.equals(Material.BOW);
142 }
143 },
144
145 /**
146 * Allows the Enchantment to be placed on fishing rods.
147 */
148 FISHING_ROD {
149 @Override
150 public boolean includes(Material item) {
151 return item.equals(Material.FISHING_ROD);
152 }
153 };
154
155 /**
156 * Check whether this target includes the specified item.
157 *
158 * @param item The item to check
159 * @return True if the target includes the item
160 */
161 public abstract boolean includes(Material item);
162
163 /**
164 * Check whether this target includes the specified item.
165 *
166 * @param item The item to check
167 * @return True if the target includes the item
168 */
169 public boolean includes(ItemStack item) {
170 return includes(item.getType());
171 }
172 }