package org.bukkit.event.block;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
/**
 * Called when a sign is changed by a player.
 * <p>
 * If a Sign Change event is cancelled, the sign will not be changed.
 */
public class SignChangeEvent extends BlockEvent implements Cancellable
{
	private static final HandlerList handlers = new HandlerList();
	private boolean cancel = false;
	private final Player player;
	private final String[] lines;
	public SignChangeEvent(final Block theBlock, final Player thePlayer, final String[] theLines)
	{
		super(theBlock);
		this.player = thePlayer;
		this.lines = theLines;
	}
	/**
	 * Gets the player changing the sign involved in this event.
	 *
	 * @return the Player involved in this event
	 */
	public Player getPlayer()
	{
		return player;
	}
	/**
	 * Gets all of the lines of text from the sign involved in this event.
	 *
	 * @return the String array for the sign's lines new text
	 */
	public String[] getLines()
	{
		return lines;
	}
	/**
	 * Gets a single line of text from the sign involved in this event.
	 *
	 * @param index index of the line to get
	 * @return the String containing the line of text associated with the
	 * provided index
	 * @throws IndexOutOfBoundsException thrown when the provided index is > 3
	 *                                   or < 0
	 */
	public String getLine(int index) throws IndexOutOfBoundsException
	{
		return lines[index];
	}
	/**
	 * Sets a single line for the sign involved in this event
	 *
	 * @param index index of the line to set
	 * @param line  text to set
	 * @throws IndexOutOfBoundsException thrown when the provided index is > 3
	 *                                   or < 0
	 */
	public void setLine(int index, String line) throws IndexOutOfBoundsException
	{
		lines[index] = line;
	}
	public boolean isCancelled()
	{
		return cancel;
	}
	public void setCancelled(boolean cancel)
	{
		this.cancel = cancel;
	}
	@Override
	public HandlerList getHandlers()
	{
		return handlers;
	}
	public static HandlerList getHandlerList()
	{
		return handlers;
	}
}