/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
package org.bukkit.enchantments;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

/**
 * Represents the applicable target for a {@link Enchantment}
 */
public enum EnchantmentTarget {
	/**
	 * Allows the Enchantment to be placed on all items
	 */
	ALL {
		@Override
		public boolean includes(Material item) {
			return true;
		}
	},

	/**
	 * Allows the Enchantment to be placed on armor
	 */
	ARMOR {
		@Override
		public boolean includes(Material item) {
			return ARMOR_FEET.includes(item) || ARMOR_LEGS.includes(item) || ARMOR_HEAD.includes(item)
					|| ARMOR_TORSO.includes(item);
		}
	},

	/**
	 * Allows the Enchantment to be placed on feet slot armor
	 */
	ARMOR_FEET {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.LEATHER_BOOTS) || item.equals(Material.CHAINMAIL_BOOTS)
					|| item.equals(Material.IRON_BOOTS) || item.equals(Material.DIAMOND_BOOTS)
					|| item.equals(Material.GOLD_BOOTS);
		}
	},

	/**
	 * Allows the Enchantment to be placed on leg slot armor
	 */
	ARMOR_LEGS {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.LEATHER_LEGGINGS) || item.equals(Material.CHAINMAIL_LEGGINGS)
					|| item.equals(Material.IRON_LEGGINGS) || item.equals(Material.DIAMOND_LEGGINGS)
					|| item.equals(Material.GOLD_LEGGINGS);
		}
	},

	/**
	 * Allows the Enchantment to be placed on torso slot armor
	 */
	ARMOR_TORSO {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.LEATHER_CHESTPLATE) || item.equals(Material.CHAINMAIL_CHESTPLATE)
					|| item.equals(Material.IRON_CHESTPLATE) || item.equals(Material.DIAMOND_CHESTPLATE)
					|| item.equals(Material.GOLD_CHESTPLATE);
		}
	},

	/**
	 * Allows the Enchantment to be placed on head slot armor
	 */
	ARMOR_HEAD {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.LEATHER_HELMET) || item.equals(Material.CHAINMAIL_HELMET)
					|| item.equals(Material.DIAMOND_HELMET) || item.equals(Material.IRON_HELMET)
					|| item.equals(Material.GOLD_HELMET);
		}
	},

	/**
	 * Allows the Enchantment to be placed on weapons (swords)
	 */
	WEAPON {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.WOOD_SWORD) || item.equals(Material.STONE_SWORD)
					|| item.equals(Material.IRON_SWORD) || item.equals(Material.DIAMOND_SWORD)
					|| item.equals(Material.GOLD_SWORD);
		}
	},

	/**
	 * Allows the Enchantment to be placed on tools (spades, pickaxe, hoes, axes)
	 */
	TOOL {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.WOOD_SPADE) || item.equals(Material.STONE_SPADE)
					|| item.equals(Material.IRON_SPADE) || item.equals(Material.DIAMOND_SPADE)
					|| item.equals(Material.GOLD_SPADE) || item.equals(Material.WOOD_PICKAXE)
					|| item.equals(Material.STONE_PICKAXE) || item.equals(Material.IRON_PICKAXE)
					|| item.equals(Material.DIAMOND_PICKAXE) || item.equals(Material.GOLD_PICKAXE)
					|| item.equals(Material.WOOD_HOE) // NOTE: No vanilla enchantments for this
					|| item.equals(Material.STONE_HOE) // NOTE: No vanilla enchantments for this
					|| item.equals(Material.IRON_HOE) // NOTE: No vanilla enchantments for this
					|| item.equals(Material.DIAMOND_HOE) // NOTE: No vanilla enchantments for this
					|| item.equals(Material.GOLD_HOE) // NOTE: No vanilla enchantments for this
					|| item.equals(Material.WOOD_AXE) || item.equals(Material.STONE_AXE)
					|| item.equals(Material.IRON_AXE) || item.equals(Material.DIAMOND_AXE)
					|| item.equals(Material.GOLD_AXE) || item.equals(Material.SHEARS) // NOTE: No vanilla enchantments
																						// for this
					|| item.equals(Material.FLINT_AND_STEEL); // NOTE: No vanilla enchantments for this
		}
	},

	/**
	 * Allows the Enchantment to be placed on bows.
	 */
	BOW {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.BOW);
		}
	},

	/**
	 * Allows the Enchantment to be placed on fishing rods.
	 */
	FISHING_ROD {
		@Override
		public boolean includes(Material item) {
			return item.equals(Material.FISHING_ROD);
		}
	};

	/**
	 * Check whether this target includes the specified item.
	 *
	 * @param item The item to check
	 * @return True if the target includes the item
	 */
	public abstract boolean includes(Material item);

	/**
	 * Check whether this target includes the specified item.
	 *
	 * @param item The item to check
	 * @return True if the target includes the item
	 */
	public boolean includes(ItemStack item) {
		return includes(item.getType());
	}
}
