From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: JRoy Date: Thu, 27 Aug 2020 12:32:35 -0400 Subject: [PATCH] Add PlayerShearBlockEvent diff --git a/src/main/java/io/papermc/paper/event/block/PlayerShearBlockEvent.java b/src/main/java/io/papermc/paper/event/block/PlayerShearBlockEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..33c6e1868e1bad4802bcadecebc2b46633690fce --- /dev/null +++ b/src/main/java/io/papermc/paper/event/block/PlayerShearBlockEvent.java @@ -0,0 +1,107 @@ +package io.papermc.paper.event.block; + +import java.util.List; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; + +/** + * Called when a player uses sheers on a block. + *

+ * This event is not called when breaking blocks with shears but instead only when a + * player uses the sheer item on a block to garner drops from said block and/or change its state. + *

+ * Examples include shearing a pumpkin to turn it into a carved pumpkin or shearing a beehive to get honeycomb. + */ +@NullMarked +public class PlayerShearBlockEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Block block; + private final ItemStack item; + private final EquipmentSlot hand; + private final List drops; + + private boolean cancelled; + + @ApiStatus.Internal + public PlayerShearBlockEvent(final Player player, final Block block, final ItemStack item, final EquipmentSlot hand, final List drops) { + super(player); + this.block = block; + this.item = item; + this.hand = hand; + this.drops = drops; + } + + /** + * Gets the block being sheared in this event. + * + * @return The {@link Block} which block is being sheared in this event. + */ + public Block getBlock() { + return this.block; + } + + /** + * Gets the item used to shear the block. + * + * @return The {@link ItemStack} of the shears. + */ + public ItemStack getItem() { + return this.item; + } + + /** + * Gets the hand used to shear the block. + * + * @return Either {@link EquipmentSlot#HAND} OR {@link EquipmentSlot#OFF_HAND}. + */ + public EquipmentSlot getHand() { + return this.hand; + } + + /** + * Gets the resulting drops of this event. + * + * @return A mutable {@link List list} of {@link ItemStack items} that will be dropped as result of this event. + */ + public List getDrops() { + return this.drops; + } + + /** + * Gets whether the shearing of the block should be cancelled or not. + * + * @return Whether the shearing of the block should be cancelled or not. + */ + @Override + public boolean isCancelled() { + return this.cancelled; + } + + /** + * Sets whether the shearing of the block should be cancelled or not. + * + * @param cancel whether the shearing of the block should be cancelled or not. + */ + @Override + public void setCancelled(final boolean cancel) { + this.cancelled = cancel; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +}