/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/event/player/PlayerEggThrowEvent.java
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;
	}
}
