diff options
author | Mariell Hoversholm <[email protected]> | 2020-08-29 21:55:41 +0200 |
---|---|---|
committer | Mariell Hoversholm <[email protected]> | 2020-08-29 21:55:41 +0200 |
commit | 2f8f0f1f818f9263dd01bc50921f6a5046e34ecb (patch) | |
tree | a22ac3c33ebbc06036c2536b070dbb79d5e305da /paper-api | |
parent | 7b11ab058b6125b53c2aa3916be0860654f0ace8 (diff) | |
download | Paper-2f8f0f1f818f9263dd01bc50921f6a5046e34ecb.tar.gz Paper-2f8f0f1f818f9263dd01bc50921f6a5046e34ecb.zip |
Add PlayerInsertLecternBookEvent
Diffstat (limited to 'paper-api')
-rw-r--r-- | paper-api/src/main/java/io/papermc/paper/event/player/PlayerInsertLecternBookEvent.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/paper-api/src/main/java/io/papermc/paper/event/player/PlayerInsertLecternBookEvent.java b/paper-api/src/main/java/io/papermc/paper/event/player/PlayerInsertLecternBookEvent.java new file mode 100644 index 0000000000..6d31e0c30f --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/event/player/PlayerInsertLecternBookEvent.java @@ -0,0 +1,96 @@ +package io.papermc.paper.event.player; + +import com.google.common.base.Preconditions; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Lectern; +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.ItemStack; +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; + +/** + * This event is called when a player clicks on a lectern to insert a book. + * If this event is cancelled the player will keep the book and the lectern will remain empty. + */ +@NullMarked +public class PlayerInsertLecternBookEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + private boolean cancelled = false; + private final Block block; + private ItemStack book; + + @ApiStatus.Internal + public PlayerInsertLecternBookEvent(final Player player, final Block block, final ItemStack book) { + super(player); + this.block = block; + this.book = book; + } + + /** + * Gets the block of the lectern involved in this event. + * + * @return the block of the lectern + */ + public Block getBlock() { + return this.block; + } + + /** + * Fetches the lectern block state that was part of this event. + * This method constructs a new snapshot {@link org.bukkit.block.BlockState}. + * + * @return a new lectern state snapshot of the involved lectern + * @throws IllegalStateException if the block at {@link #getBlock()} is no longer a lectern + */ + public Lectern getLectern() { + final BlockState state = this.getBlock().getState(); + Preconditions.checkState(state instanceof Lectern, "Block state of lectern block is no longer a lectern tile state!"); + return (Lectern) state; + } + + /** + * Returns the itemstack the player tried to insert. This is a copy of the item, + * changes made to this itemstack will not affect the book that is being placed in the lectern. + * If you want to mutate the item stack that ends up in the lectern, use {@link #setBook(ItemStack)}. + * + * @return the book that is being placed + */ + public ItemStack getBook() { + return this.book.clone(); + } + + /** + * Sets the itemstack to insert into the lectern. + * + * @param book the book to insert (non book items will leave the lectern in a locked + * state as the menu cannot be opened, preventing item extraction) + */ + public void setBook(final ItemStack book) { + Preconditions.checkArgument(book != null, "Cannot set book to null"); + this.book = book.clone(); + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(final boolean cancel) { + this.cancelled = cancel; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} |