Paper/Spigot-API-Patches/0117-InventoryCloseEvent-Reason-API.patch
Zach Brown 70ce6ce831
Move version command update checking to the implementation
This makes it easier for downstream projects (forks) to replace the
version fetching system with their own. It is as simple as implementing
an interface and overriding the default implementation of
org.bukkit.UnsafeValues#getVersionFetcher()

It also makes it easier for us to organize things like the version
history feature.

Lastly I have updated the paper implementation to check against the site
API rather than against jenkins.
2019-05-27 04:13:41 -05:00

97 lines
2.8 KiB
Diff

From da54191d0c80dea58ca857a395d3a39ccfdcc585 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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 cdbac95b..f25c7315 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
@@ -152,6 +152,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 5861247c..21ad8888 100644
--- a/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java
+++ b/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java
@@ -11,9 +11,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
}
/**
--
2.21.0