001 package org.bukkit.inventory.meta;
002
003 import org.bukkit.Material;
004 import org.bukkit.potion.PotionEffect;
005 import org.bukkit.potion.PotionEffectType;
006
007 import java.util.List;
008
009 /**
010 * Represents a potion ({@link Material#POTION}) that can have custom effects.
011 */
012 public interface PotionMeta extends ItemMeta {
013
014 /**
015 * Checks for the presence of custom potion effects.
016 *
017 * @return true if custom potion effects are applied
018 */
019 boolean hasCustomEffects();
020
021 /**
022 * Gets an immutable list containing all custom potion effects applied to
023 * this potion.
024 * <p>
025 * Plugins should check that hasCustomEffects() returns true before
026 * calling this method.
027 *
028 * @return the immutable list of custom potion effects
029 */
030 List<PotionEffect> getCustomEffects();
031
032 /**
033 * Adds a custom potion effect to this potion.
034 *
035 * @param effect the potion effect to add
036 * @param overwrite true if any existing effect of the same type should be
037 * overwritten
038 * @return true if the potion meta changed as a result of this call
039 */
040 boolean addCustomEffect(PotionEffect effect, boolean overwrite);
041
042 /**
043 * Removes a custom potion effect from this potion.
044 *
045 * @param type the potion effect type to remove
046 * @return true if the potion meta changed as a result of this call
047 */
048 boolean removeCustomEffect(PotionEffectType type);
049
050 /**
051 * Checks for a specific custom potion effect type on this potion.
052 *
053 * @param type the potion effect type to check for
054 * @return true if the potion has this effect
055 */
056 boolean hasCustomEffect(PotionEffectType type);
057
058 /**
059 * Moves a potion effect to the top of the potion effect list.
060 * <p>
061 * This causes the client to display the potion effect in the potion's
062 * name.
063 *
064 * @param type the potion effect type to move
065 * @return true if the potion meta changed as a result of this call
066 */
067 boolean setMainEffect(PotionEffectType type);
068
069 /**
070 * Removes all custom potion effects from this potion.
071 *
072 * @return true if the potion meta changed as a result of this call
073 */
074 boolean clearCustomEffects();
075
076 PotionMeta clone();
077 }