/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/event/block/SignChangeEvent.java
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
	 *                                   {@literal > 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
	 *                                   {@literal > 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;
	}
}
