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..9bb4a79320eac7d662d9d04765664b6a7e955a4f --- /dev/null +++ b/src/main/java/io/papermc/paper/event/block/PlayerShearBlockEvent.java @@ -0,0 +1,113 @@ +package io.papermc.paper.event.block; + +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.jetbrains.annotations.NotNull; + +import java.util.List; + +/** + * 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. + */ +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(@NotNull Player player, @NotNull Block block, @NotNull ItemStack item, @NotNull EquipmentSlot hand, @NotNull 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. + */ + @NotNull + public Block getBlock() { + return this.block; + } + + /** + * Gets the item used to shear the block. + * + * @return The {@link ItemStack} of the shears. + */ + @NotNull + public ItemStack getItem() { + return this.item; + } + + /** + * Gets the hand used to shear the block. + * + * @return Either {@link EquipmentSlot#HAND} OR {@link EquipmentSlot#OFF_HAND}. + */ + @NotNull + public EquipmentSlot getHand() { + return this.hand; + } + + /** + * Gets the resulting drops of this event. + * + * @return A {@link List list} of {@link ItemStack items} that will be dropped as result of this event. + */ + @NotNull + 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(boolean cancel) { + this.cancelled = cancel; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + @NotNull + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +}