From adbd9c39ef7de481287b5f791515abca5cbcef4e Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Tue, 13 Aug 2024 20:49:59 +1000 Subject: [PATCH] SPIGOT-7783, SPIGOT-7784, #1051: Add Trial Vault & Spawner event API By: ShreyasAyyengar --- .../event/block/BlockDispenseLootEvent.java | 90 +++++++++++++++++++ .../event/block/VaultDisplayItemEvent.java | 65 ++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 paper-api/src/main/java/org/bukkit/event/block/BlockDispenseLootEvent.java create mode 100644 paper-api/src/main/java/org/bukkit/event/block/VaultDisplayItemEvent.java diff --git a/paper-api/src/main/java/org/bukkit/event/block/BlockDispenseLootEvent.java b/paper-api/src/main/java/org/bukkit/event/block/BlockDispenseLootEvent.java new file mode 100644 index 0000000000..6dea23ddd9 --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/event/block/BlockDispenseLootEvent.java @@ -0,0 +1,90 @@ +package org.bukkit.event.block; + +import java.util.ArrayList; +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.inventory.ItemStack; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Called when a block dispenses loot from its designated LootTable. This is not + * to be confused with events like {@link BlockDispenseEvent} which fires when a + * singular item is dispensed from its inventory container. + *

+ * Example: A player unlocks a trial chamber vault and the vault block dispenses + * its loot. + */ +@ApiStatus.Experimental +public class BlockDispenseLootEvent extends BlockEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private final Player player; + private List dispensedLoot; + private boolean cancelled; + + public BlockDispenseLootEvent(@Nullable Player player, @NotNull Block theBlock, @NotNull List dispensedLoot) { + super(theBlock); + this.player = player; + this.block = theBlock; + this.dispensedLoot = dispensedLoot; + } + + /** + * Gets the loot that will be dispensed. + * + * @return the loot that will be dispensed + */ + @NotNull + public List getDispensedLoot() { + return dispensedLoot; + } + + /** + * Sets the loot that will be dispensed. + * + * @param dispensedLoot new loot to dispense + */ + public void setDispensedLoot(@Nullable List dispensedLoot) { + this.dispensedLoot = (dispensedLoot == null) ? new ArrayList<>() : dispensedLoot; + } + + /** + * Gets the player associated with this event. + *
+ * Warning: Some event instances like a + * {@link org.bukkit.block.TrialSpawner} dispensing its reward loot may not + * have a player associated with them and will return null. + * + * @return the player who unlocked the vault + */ + @Nullable + public Player getPlayer() { + return player; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/paper-api/src/main/java/org/bukkit/event/block/VaultDisplayItemEvent.java b/paper-api/src/main/java/org/bukkit/event/block/VaultDisplayItemEvent.java new file mode 100644 index 0000000000..cc06af61d8 --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/event/block/VaultDisplayItemEvent.java @@ -0,0 +1,65 @@ +package org.bukkit.event.block; + +import org.bukkit.block.Block; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Called when a vault in a trial chamber is about to display an item. + */ +@ApiStatus.Experimental +public class VaultDisplayItemEvent extends BlockEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; + private ItemStack displayItem; + + public VaultDisplayItemEvent(@NotNull Block theBlock, @Nullable ItemStack displayItem) { + super(theBlock); + this.displayItem = displayItem; + } + + /** + * Gets the item that will be displayed inside the vault. + * + * @return the item to be displayed + */ + @Nullable + public ItemStack getDisplayItem() { + return displayItem; + } + + /** + * Sets the item that will be displayed inside the vault. + * + * @param displayItem the item to be displayed + */ + public void setDisplayItem(@Nullable ItemStack displayItem) { + this.displayItem = displayItem; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +}