aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0117-InventoryCloseEvent-Reason-API.patch
blob: ed0568548a691a9d7ae287cdfc6f5b2ac4110800 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
From 0000000000000000000000000000000000000000 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 ee3086661e11d3d8faec30590be7131648d3b82a..25cd03f2f3dc0aaa67173c0f3ebfe56402489e24 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
@@ -185,6 +185,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 c0cc82d98348e8aae3cb56bafb2fcb590b03094f..4db0a07db156c61867644f50c185e63b695e2462 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
     }
 
     /**