Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / enchantments / EnchantmentTarget.java
@vlad20012 vlad20012 on 24 Feb 2017 4 KB initial
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());
	}
}