package tc.oc.pgm.events;
import javax.annotation.Nullable;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import tc.oc.pgm.match.MatchPlayer;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Fired when a non-interacting player clicks anywhere. When they click on an entity,
* this event will fire twice, the second time with the entity set to null. This is a
* quirk caused by the Bukkit events that generate this one.
*
* Note that players on the death screen can generate this event, so if you don't want
* clicks from dead players, you need to filter them out yourself.
*/
public class ObserverInteractEvent extends SingleMatchPlayerEvent implements Cancellable {
private final ClickType clickType;
private final @Nullable Block clickedBlock;
private final @Nullable Entity clickedEntity;
private final @Nullable ItemStack clickedItem;
private boolean cancelled;
public ObserverInteractEvent(MatchPlayer player, ClickType clickType, @Nullable Block clickedBlock, @Nullable Entity clickedEntity, @Nullable ItemStack clickedItem) {
super(player);
this.clickType = checkNotNull(clickType);
this.clickedBlock = clickedBlock;
this.clickedEntity = clickedEntity;
this.clickedItem = clickedItem;
}
public ClickType getClickType() {
return clickType;
}
public @Nullable Block getClickedBlock() {
return clickedBlock;
}
public @Nullable BlockState getClickedBlockState() {
return getClickedBlock() == null ? null : getClickedBlock().getState();
}
public @Nullable Entity getClickedEntity() {
return clickedEntity;
}
public @Nullable ItemStack getClickedItem() {
return clickedItem;
}
public @Nullable MatchPlayer getClickedPlayer() {
return getMatch().getPlayer(getClickedEntity());
}
public @Nullable MatchPlayer getClickedParticipant() {
return getMatch().getParticipant(getClickedEntity());
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
this.cancelled = cancel;
}
private static HandlerList handlers = new HandlerList();
@Override public HandlerList getHandlers() { return handlers; }
public static HandlerList getHandlerList() { return handlers; }
}