Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / entity / Horse.java
@vlad20012 vlad20012 on 24 Feb 2017 5 KB initial
package org.bukkit.entity;

import org.bukkit.inventory.HorseInventory;
import org.bukkit.inventory.InventoryHolder;

/**
 * Represents a Horse.
 */
public interface Horse extends Animals, Vehicle, InventoryHolder, Tameable
{

	/**
	 * Represents the different types of horses that may exist.
	 */
	public enum Variant
	{
		/**
		 * A normal horse
		 */
		HORSE,
		/**
		 * A donkey
		 */
		DONKEY,
		/**
		 * A mule
		 */
		MULE,
		/**
		 * An undead horse
		 */
		UNDEAD_HORSE,
		/**
		 * A skeleton horse
		 */
		SKELETON_HORSE,;
	}

	/**
	 * Represents the base color that the horse has.
	 */
	public enum Color
	{
		/**
		 * Snow white
		 */
		WHITE,
		/**
		 * Very light brown
		 */
		CREAMY,
		/**
		 * Chestnut
		 */
		CHESTNUT,
		/**
		 * Light brown
		 */
		BROWN,
		/**
		 * Pitch black
		 */
		BLACK,
		/**
		 * Gray
		 */
		GRAY,
		/**
		 * Dark brown
		 */
		DARK_BROWN,;
	}

	/**
	 * Represents the style, or markings, that the horse has.
	 */
	public enum Style
	{
		/**
		 * No markings
		 */
		NONE,
		/**
		 * White socks or stripes
		 */
		WHITE,
		/**
		 * Milky splotches
		 */
		WHITEFIELD,
		/**
		 * Round white dots
		 */
		WHITE_DOTS,
		/**
		 * Small black dots
		 */
		BLACK_DOTS,;
	}

	/**
	 * Gets the horse's variant.
	 * <p>
	 * A horse's variant defines its physical appearance and capabilities.
	 * Whether a horse is a regular horse, donkey, mule, or other kind of
	 * horse is determined using the variant.
	 *
	 * @return a {@link Variant} representing the horse's variant
	 */
	public Variant getVariant();

	/**
	 * Sets the horse's variant.
	 * <p>
	 * A horse's variant defines its physical appearance and capabilities.
	 * Whether a horse is a regular horse, donkey, mule, or other kind of
	 * horse can be set using the variant.
	 * <p>
	 * Setting a horse's variant does not change its attributes such as
	 * its owner and its tamed status, but changing a mule or donkey
	 * with a chest to another variant which does not support a chest
	 * will remove the chest and its contents.
	 *
	 * @param variant a {@link Variant} for this horse
	 */
	public void setVariant(Variant variant);

	/**
	 * Gets the horse's color.
	 * <p>
	 * Colors only apply to horses, not to donkeys, mules, skeleton horses
	 * or undead horses.
	 *
	 * @return a {@link Color} representing the horse's group
	 */
	public Color getColor();

	/**
	 * Sets the horse's color.
	 * <p>
	 * Attempting to set a color for any donkey, mule, skeleton horse or
	 * undead horse will not result in a change.
	 *
	 * @param color a {@link Color} for this horse
	 */
	public void setColor(Color color);

	/**
	 * Gets the horse's style.
	 * Styles determine what kind of markings or patterns a horse has.
	 * <p>
	 * Styles only apply to horses, not to donkeys, mules, skeleton horses
	 * or undead horses.
	 *
	 * @return a {@link Style} representing the horse's style
	 */
	public Style getStyle();

	/**
	 * Sets the style of this horse.
	 * Styles determine what kind of markings or patterns a horse has.
	 * <p>
	 * Attempting to set a style for any donkey, mule, skeleton horse or
	 * undead horse will not result in a change.
	 *
	 * @param style a {@link Style} for this horse
	 */
	public void setStyle(Style style);

	/**
	 * Gets whether the horse has a chest equipped.
	 *
	 * @return true if the horse has chest storage
	 */
	public boolean isCarryingChest();

	/**
	 * Sets whether the horse has a chest equipped.
	 * Removing a chest will also clear the chest's inventory.
	 *
	 * @param chest true if the horse should have a chest
	 */
	public void setCarryingChest(boolean chest);

	/**
	 * Gets the domestication level of this horse.
	 * <p>
	 * A higher domestication level indicates that the horse is closer to
	 * becoming tame. As the domestication level gets closer to the max
	 * domestication level, the chance of the horse becoming tame increases.
	 *
	 * @return domestication level
	 */
	public int getDomestication();

	/**
	 * Sets the domestication level of this horse.
	 * <p>
	 * Setting the domestication level to a high value will increase the
	 * horse's chances of becoming tame.
	 * <p>
	 * Domestication level must be greater than zero and no greater than
	 * the max domestication level of the horse, determined with
	 * {@link #getMaxDomestication()}
	 *
	 * @param level domestication level
	 */
	public void setDomestication(int level);

	/**
	 * Gets the maximum domestication level of this horse.
	 * <p>
	 * The higher this level is, the longer it will likely take
	 * for the horse to be tamed.
	 *
	 * @return the max domestication level
	 */
	public int getMaxDomestication();

	/**
	 * Sets the maximum domestication level of this horse.
	 * <p>
	 * Setting a higher max domestication will increase the amount of
	 * domesticating (feeding, riding, etc.) necessary in order to tame it,
	 * while setting a lower max value will have the opposite effect.
	 * <p>
	 * Maximum domestication must be greater than zero.
	 *
	 * @param level the max domestication level
	 */
	public void setMaxDomestication(int level);

	/**
	 * Gets the jump strength of this horse.
	 * <p>
	 * Jump strength defines how high the horse can jump. A higher jump strength
	 * increases how high a jump will go.
	 *
	 * @return the horse's jump strength
	 */
	public double getJumpStrength();

	/**
	 * Sets the jump strength of this horse.
	 * <p>
	 * A higher jump strength increases how high a jump will go.
	 * Setting a jump strength to 0 will result in no jump.
	 * You cannot set a jump strength to a value below 0 or
	 * above 2.
	 *
	 * @param strength jump strength for this horse
	 */
	public void setJumpStrength(double strength);

	@Override
	public HorseInventory getInventory();
}