package org.bukkit.inventory; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; /** * An instance of the ItemFactory can be obtained with {@link * Server#getItemFactory()}. *

* The ItemFactory is solely responsible for creating item meta containers to * apply on item stacks. */ public interface ItemFactory { /** * This creates a new item meta for the material. * * @param material The material to consider as base for the meta * @return a new ItemMeta that could be applied to an item stack of the * specified material */ ItemMeta getItemMeta(final Material material); /** * This method checks the item meta to confirm that it is applicable (no * data lost if applied) to the specified ItemStack. *

* A {@link SkullMeta} would not be valid for a sword, but a normal {@link * ItemMeta} from an enchanted dirt block would. * * @param meta Meta to check * @param stack Item that meta will be applied to * @return true if the meta can be applied without losing data, false * otherwise * @throws IllegalArgumentException if the meta was not created by this * factory */ boolean isApplicable(final ItemMeta meta, final ItemStack stack) throws IllegalArgumentException; /** * This method checks the item meta to confirm that it is applicable (no * data lost if applied) to the specified Material. *

* A {@link SkullMeta} would not be valid for a sword, but a normal {@link * ItemMeta} from an enchanted dirt block would. * * @param meta Meta to check * @param material Material that meta will be applied to * @return true if the meta can be applied without losing data, false * otherwise * @throws IllegalArgumentException if the meta was not created by this * factory */ boolean isApplicable(final ItemMeta meta, final Material material) throws IllegalArgumentException; /** * This method is used to compare two item meta data objects. * * @param meta1 First meta to compare, and may be null to indicate no data * @param meta2 Second meta to compare, and may be null to indicate no * data * @return false if one of the meta has data the other does not, otherwise * true * @throws IllegalArgumentException if either meta was not created by this * factory */ boolean equals(final ItemMeta meta1, final ItemMeta meta2) throws IllegalArgumentException; /** * Returns an appropriate item meta for the specified stack. *

* The item meta returned will always be a valid meta for a given * ItemStack of the specified material. It may be a more or less specific * meta, and could also be the same meta or meta type as the parameter. * The item meta returned will also always be the most appropriate meta. *

* Example, if a {@link SkullMeta} is being applied to a book, this method * would return a {@link BookMeta} containing all information in the * specified meta that is applicable to an {@link ItemMeta}, the highest * common interface. * * @param meta the meta to convert * @param stack the stack to convert the meta for * @return An appropriate item meta for the specified item stack. No * guarantees are made as to if a copy is returned. This will be null * for a stack of air. * @throws IllegalArgumentException if the specified meta was not created * by this factory */ ItemMeta asMetaFor(final ItemMeta meta, final ItemStack stack) throws IllegalArgumentException; /** * Returns an appropriate item meta for the specified material. *

* The item meta returned will always be a valid meta for a given * ItemStack of the specified material. It may be a more or less specific * meta, and could also be the same meta or meta type as the parameter. * The item meta returned will also always be the most appropriate meta. *

* Example, if a {@link SkullMeta} is being applied to a book, this method * would return a {@link BookMeta} containing all information in the * specified meta that is applicable to an {@link ItemMeta}, the highest * common interface. * * @param meta the meta to convert * @param material the material to convert the meta for * @return An appropriate item meta for the specified item material. No * guarantees are made as to if a copy is returned. This will be null for air. * @throws IllegalArgumentException if the specified meta was not created * by this factory */ ItemMeta asMetaFor(final ItemMeta meta, final Material material) throws IllegalArgumentException; /** * Returns the default color for all leather armor. * * @return the default color for leather armor */ Color getDefaultLeatherColor(); /** * Apply a material change for an item meta. Do not use under any * circumstances. * * @param meta * @param material * @return updated material * @throws IllegalArgumentException * @deprecated for internal use only */ @Deprecated Material updateMaterial(final ItemMeta meta, final Material material) throws IllegalArgumentException; }