package org.bukkit.event.player; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; import org.bukkit.inventory.meta.BookMeta; /** * Called when a player edits or signs a book and quill item. If the event is * cancelled, no changes are made to the BookMeta */ public class PlayerEditBookEvent extends PlayerEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); private final BookMeta previousBookMeta; private final int slot; private BookMeta newBookMeta; private boolean isSigning; private boolean cancel; public PlayerEditBookEvent(Player who, int slot, BookMeta previousBookMeta, BookMeta newBookMeta, boolean isSigning) { super(who); Validate.isTrue(slot >= 0 && slot <= 8, "Slot must be in range 0-8 inclusive"); Validate.notNull(previousBookMeta, "Previous book meta must not be null"); Validate.notNull(newBookMeta, "New book meta must not be null"); Bukkit.getItemFactory().equals(previousBookMeta, newBookMeta); this.previousBookMeta = previousBookMeta; this.newBookMeta = newBookMeta; this.slot = slot; this.isSigning = isSigning; this.cancel = false; } /** * Gets the book meta currently on the book. * <p> * Note: this is a copy of the book meta. You cannot use this object to * change the existing book meta. * * @return the book meta currently on the book */ public BookMeta getPreviousBookMeta() { return previousBookMeta.clone(); } /** * Gets the book meta that the player is attempting to add to the book. * <p> * Note: this is a copy of the proposed new book meta. Use {@link * #setNewBookMeta(BookMeta)} to change what will actually be added to the * book. * * @return the book meta that the player is attempting to add */ public BookMeta getNewBookMeta() { return newBookMeta.clone(); } /** * Gets the inventory slot number for the book item that triggered this * event. * <p> * This is a slot number on the player's hotbar in the range 0-8. * * @return the inventory slot number that the book item occupies */ public int getSlot() { return slot; } /** * Sets the book meta that will actually be added to the book. * * @param newBookMeta new book meta * @throws IllegalArgumentException if the new book meta is null */ public void setNewBookMeta(BookMeta newBookMeta) throws IllegalArgumentException { Validate.notNull(newBookMeta, "New book meta must not be null"); Bukkit.getItemFactory().equals(newBookMeta, null); this.newBookMeta = newBookMeta.clone(); } /** * Gets whether or not the book is being signed. If a book is signed the * Material changes from BOOK_AND_QUILL to WRITTEN_BOOK. * * @return true if the book is being signed */ public boolean isSigning() { return isSigning; } /** * Sets whether or not the book is being signed. If a book is signed the * Material changes from BOOK_AND_QUILL to WRITTEN_BOOK. * * @param signing whether or not the book is being signed. */ public void setSigning(boolean signing) { isSigning = signing; } @Override public HandlerList getHandlers() { return handlers; } public static HandlerList getHandlerList() { return handlers; } public boolean isCancelled() { return cancel; } public void setCancelled(boolean cancel) { this.cancel = cancel; } }