All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.event.player.PlayerInteractEvent Maven / Gradle / Ivy

package org.bukkit.event.player;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.block.Action;
import org.bukkit.inventory.ItemStack;

/**
 * Called when a player interacts with an object or air.
 * 

* This event will fire as cancelled if the vanilla behavior * is to do nothing (e.g interacting with air) */ public class PlayerInteractEvent extends PlayerEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); protected ItemStack item; protected Action action; protected Block blockClicked; protected BlockFace blockFace; private Result useClickedBlock; private Result useItemInHand; public PlayerInteractEvent(final Player who, final Action action, final ItemStack item, final Block clickedBlock, final BlockFace clickedFace) { super(who); this.action = action; this.item = item; this.blockClicked = clickedBlock; this.blockFace = clickedFace; useItemInHand = Result.DEFAULT; useClickedBlock = clickedBlock == null ? Result.DENY : Result.ALLOW; } public static HandlerList getHandlerList() { return handlers; } /** * Returns the action type * * @return Action returns the type of interaction */ public Action getAction() { return action; } /** * Gets the cancellation state of this event. Set to true if you want to * prevent buckets from placing water and so forth * * @return boolean cancellation state */ public boolean isCancelled() { return useInteractedBlock() == Result.DENY; } /** * Sets the cancellation state of this event. A canceled event will not be * executed in the server, but will still pass to other plugins *

* Canceling this event will prevent use of food (player won't lose the * food item), prevent bows/snowballs/eggs from firing, etc. (player won't * lose the ammo) * * @param cancel true if you wish to cancel this event */ public void setCancelled(boolean cancel) { setUseInteractedBlock(cancel ? Result.DENY : useInteractedBlock() == Result.DENY ? Result.DEFAULT : useInteractedBlock()); setUseItemInHand(cancel ? Result.DENY : useItemInHand() == Result.DENY ? Result.DEFAULT : useItemInHand()); } /** * Returns the item in hand represented by this event * * @return ItemStack the item used */ public ItemStack getItem() { return this.item; } /** * Convenience method. Returns the material of the item represented by * this event * * @return Material the material of the item used */ public Material getMaterial() { if (!hasItem()) { return Material.AIR; } return item.getType(); } /** * Check if this event involved a block * * @return boolean true if it did */ public boolean hasBlock() { return this.blockClicked != null; } /** * Check if this event involved an item * * @return boolean true if it did */ public boolean hasItem() { return this.item != null; } /** * Convenience method to inform the user whether this was a block * placement event. * * @return boolean true if the item in hand was a block */ public boolean isBlockInHand() { if (!hasItem()) { return false; } return item.getType().isBlock(); } /** * Returns the clicked block * * @return Block returns the block clicked with this item. */ public Block getClickedBlock() { return blockClicked; } /** * Returns the face of the block that was clicked * * @return BlockFace returns the face of the block that was clicked */ public BlockFace getBlockFace() { return blockFace; } /** * This controls the action to take with the block (if any) that was * clicked on. This event gets processed for all blocks, but most don't * have a default action * * @return the action to take with the interacted block */ public Result useInteractedBlock() { return useClickedBlock; } /** * @param useInteractedBlock the action to take with the interacted block */ public void setUseInteractedBlock(Result useInteractedBlock) { this.useClickedBlock = useInteractedBlock; } /** * This controls the action to take with the item the player is holding. * This includes both blocks and items (such as flint and steel or * records). When this is set to default, it will be allowed if no action * is taken on the interacted block. * * @return the action to take with the item in hand */ public Result useItemInHand() { return useItemInHand; } /** * @param useItemInHand the action to take with the item in hand */ public void setUseItemInHand(Result useItemInHand) { this.useItemInHand = useItemInHand; } @Override public HandlerList getHandlers() { return handlers; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy