From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 3 Jul 2018 21:52:52 -0400 Subject: [PATCH] InventoryCloseEvent Reason API Allows you to determine why an inventory was closed, enabling plugin developers to "confirm" things based on if it was player triggered close or not. diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java index 9e012c3c0671e5d0e55c243fdb4e14057038c153..d44c5a3fda0b159dc541246cb2fca8427cb38243 100644 --- a/src/main/java/org/bukkit/entity/HumanEntity.java +++ b/src/main/java/org/bukkit/entity/HumanEntity.java @@ -179,6 +179,15 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder */ public void closeInventory(); + // Paper start + /** + * Force-closes the currently open inventory view for this player, if any. + * + * @param reason why the inventory is closing + */ + public void closeInventory(@NotNull org.bukkit.event.inventory.InventoryCloseEvent.Reason reason); + // Paper end + /** * Returns the ItemStack currently in your hand, can be empty. * diff --git a/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java b/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java index 3cf2e2e87b8021f4c5e046b22ed89798b4172ae7..d527e3d7ba8d5b8c044e5a04ebdb9a2c117f22c7 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java @@ -30,9 +30,60 @@ import org.jetbrains.annotations.NotNull; */ public class InventoryCloseEvent extends InventoryEvent { private static final HandlerList handlers = new HandlerList(); + // Paper start + private final Reason reason; + @NotNull + public Reason getReason() { + return reason; + } + + public enum Reason { + /** + * Unknown reason + */ + UNKNOWN, + /** + * Player is teleporting + */ + TELEPORT, + /** + * Player is no longer permitted to use this inventory + */ + CANT_USE, + /** + * The chunk the inventory was in was unloaded + */ + UNLOADED, + /** + * Opening new inventory instead + */ + OPEN_NEW, + /** + * Closed + */ + PLAYER, + /** + * Closed due to disconnect + */ + DISCONNECT, + /** + * The player died + */ + DEATH, + /** + * Closed by Bukkit API + */ + PLUGIN, + } public InventoryCloseEvent(@NotNull InventoryView transaction) { + this(transaction, Reason.UNKNOWN); + } + + public InventoryCloseEvent(@NotNull InventoryView transaction, @NotNull Reason reason) { super(transaction); + this.reason = reason; + // Paper end } /**