Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / event / player / PlayerEggThrowEvent.java
@vlad20012 vlad20012 on 24 Feb 2017 3 KB initial
package org.bukkit.event.player;

import org.bukkit.entity.CreatureType;
import org.bukkit.entity.Egg;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;

/**
 * Called when a player throws an egg and it might hatch
 */
public class PlayerEggThrowEvent extends PlayerEvent
{
	private static final HandlerList handlers = new HandlerList();
	private final Egg egg;
	private boolean hatching;
	private EntityType hatchType;
	private byte numHatches;

	public PlayerEggThrowEvent(final Player player, final Egg egg, final boolean hatching, final byte numHatches, final EntityType hatchingType)
	{
		super(player);
		this.egg = egg;
		this.hatching = hatching;
		this.numHatches = numHatches;
		this.hatchType = hatchingType;
	}

	@Deprecated
	public PlayerEggThrowEvent(Player player, Egg egg, boolean hatching, byte numHatches, CreatureType hatchingType)
	{
		this(player, egg, hatching, numHatches, hatchingType.toEntityType());
	}

	/**
	 * Gets the egg involved in this event.
	 *
	 * @return the egg involved in this event
	 */
	public Egg getEgg()
	{
		return egg;
	}

	/**
	 * Gets whether the egg is hatching or not. Will be what the server
	 * would've done without interaction.
	 *
	 * @return boolean Whether the egg is going to hatch or not
	 */
	public boolean isHatching()
	{
		return hatching;
	}

	/**
	 * Sets whether the egg will hatch or not.
	 *
	 * @param hatching true if you want the egg to hatch, false if you want it
	 *                 not to
	 */
	public void setHatching(boolean hatching)
	{
		this.hatching = hatching;
	}

	/**
	 * Get the type of the mob being hatched (EntityType.CHICKEN by default)
	 *
	 * @return The type of the mob being hatched by the egg
	 * @deprecated In favour of {@link #getHatchingType()}.
	 */
	@Deprecated
	public CreatureType getHatchType()
	{
		return CreatureType.fromEntityType(hatchType);
	}

	/**
	 * Get the type of the mob being hatched (EntityType.CHICKEN by default)
	 *
	 * @return The type of the mob being hatched by the egg
	 */
	public EntityType getHatchingType()
	{
		return hatchType;
	}

	/**
	 * Change the type of mob being hatched by the egg
	 *
	 * @param hatchType The type of the mob being hatched by the egg
	 * @deprecated In favour of {@link #setHatchingType(EntityType)}.
	 */
	@Deprecated
	public void setHatchType(CreatureType hatchType)
	{
		this.hatchType = hatchType.toEntityType();
	}

	/**
	 * Change the type of mob being hatched by the egg
	 *
	 * @param hatchType The type of the mob being hatched by the egg
	 */
	public void setHatchingType(EntityType hatchType)
	{
		if(!hatchType.isSpawnable()) throw new IllegalArgumentException("Can't spawn that entity type from an egg!");
		this.hatchType = hatchType;
	}

	/**
	 * Get the number of mob hatches from the egg. By default the number will
	 * be the number the server would've done
	 * <ul>
	 * <li>7/8 chance of being 0
	 * <li>31/256 ~= 1/8 chance to be 1
	 * <li>1/256 chance to be 4
	 * </ul>
	 *
	 * @return The number of mobs going to be hatched by the egg
	 */
	public byte getNumHatches()
	{
		return numHatches;
	}

	/**
	 * Change the number of mobs coming out of the hatched egg
	 * <p>
	 * The boolean hatching will override this number. Ie. If hatching =
	 * false, this number will not matter
	 *
	 * @param numHatches The number of mobs coming out of the egg
	 */
	public void setNumHatches(byte numHatches)
	{
		this.numHatches = numHatches;
	}

	@Override
	public HandlerList getHandlers()
	{
		return handlers;
	}

	public static HandlerList getHandlerList()
	{
		return handlers;
	}
}