001 package org.bukkit.event.inventory;
002
003 import org.bukkit.entity.HumanEntity;
004 import org.bukkit.event.Cancellable;
005 import org.bukkit.event.Event.Result;
006 import org.bukkit.inventory.InventoryView;
007 import org.bukkit.inventory.ItemStack;
008
009 /**
010 * An abstract base class for events that describe an interaction between a
011 * HumanEntity and the contents of an Inventory.
012 */
013 public abstract class InventoryInteractEvent extends InventoryEvent implements Cancellable {
014 private Result result = Result.DEFAULT;
015
016 public InventoryInteractEvent(InventoryView transaction) {
017 super(transaction);
018 }
019
020 /**
021 * Gets the player who performed the click.
022 *
023 * @return The clicking player.
024 */
025 public HumanEntity getWhoClicked() {
026 return getView().getPlayer();
027 }
028
029 /**
030 * Sets the result of this event. This will change whether or not this
031 * event is considered cancelled.
032 *
033 * @see #isCancelled()
034 * @param newResult the new {@link Result} for this event
035 */
036 public void setResult(Result newResult) {
037 result = newResult;
038 }
039
040 /**
041 * Gets the {@link Result} of this event. The Result describes the
042 * behavior that will be applied to the inventory in relation to this
043 * event.
044 *
045 * @return the Result of this event.
046 */
047 public Result getResult() {
048 return result;
049 }
050
051 /**
052 * Gets whether or not this event is cancelled. This is based off of the
053 * Result value returned by {@link #getResult()}. Result.ALLOW and
054 * Result.DEFAULT will result in a returned value of false, but
055 * Result.DENY will result in a returned value of true.
056 * <p>
057 * {@inheritDoc}
058 *
059 * @return whether the event is cancelled
060 */
061 public boolean isCancelled() {
062 return getResult() == Result.DENY;
063 }
064
065 /**
066 * Proxy method to {@link #setResult(Event.Result)} for the Cancellable
067 * interface. {@link #setResult(Event.Result)} is preferred, as it allows
068 * you to specify the Result beyond Result.DENY and Result.ALLOW.
069 * <p>
070 * {@inheritDoc}
071 *
072 * @param toCancel result becomes DENY if true, ALLOW if false
073 */
074 public void setCancelled(boolean toCancel) {
075 setResult(toCancel ? Result.DENY : Result.ALLOW);
076 }
077
078 }