aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0216-Add-PlayerItemCooldownEvent.patch
blob: cf3a322855295d5428fd07a51ba9fb809fa5b69f (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nassim Jahnke <nassim@njahnke.dev>
Date: Tue, 25 Aug 2020 13:45:15 +0200
Subject: [PATCH] Add PlayerItemCooldownEvent


diff --git a/src/main/java/io/papermc/paper/event/player/PlayerItemCooldownEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerItemCooldownEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..d072cdb992f23cbcf434317de1940204cf8d320d
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/player/PlayerItemCooldownEvent.java
@@ -0,0 +1,43 @@
+package io.papermc.paper.event.player;
+
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+
+/**
+ * Fired when a player receives an item cooldown when using an item.
+ *
+ * @see PlayerItemGroupCooldownEvent for a more general event when applied to a group of items
+ */
+@NullMarked
+public class PlayerItemCooldownEvent extends PlayerItemGroupCooldownEvent {
+
+    private final Material type;
+
+    @ApiStatus.Internal
+    public PlayerItemCooldownEvent(final Player player, final Material type, final NamespacedKey cooldownGroup, final int cooldown) {
+        super(player, cooldownGroup, cooldown);
+        this.type = type;
+    }
+
+    /**
+     * Get the material of the item affected by the cooldown.
+     *
+     * @return material affected by the cooldown
+     */
+    public Material getType() {
+        return this.type;
+    }
+
+    @Override
+    public HandlerList getHandlers() {
+        return PlayerItemCooldownEvent.getHandlerList();
+    }
+
+    public static HandlerList getHandlerList() {
+        return PlayerItemGroupCooldownEvent.getHandlerList();
+    }
+}
diff --git a/src/main/java/io/papermc/paper/event/player/PlayerItemGroupCooldownEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerItemGroupCooldownEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..e66aed33b165b86cc5e51eb5c29159232be4a9ef
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/player/PlayerItemGroupCooldownEvent.java
@@ -0,0 +1,81 @@
+package io.papermc.paper.event.player;
+
+import com.google.common.base.Preconditions;
+import org.bukkit.NamespacedKey;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+
+/**
+ * Fired when a player receives an item cooldown.
+ *
+ * @see PlayerItemCooldownEvent for a more specific event when applied to a specific item.
+ */
+@NullMarked
+public class PlayerItemGroupCooldownEvent extends PlayerEvent implements Cancellable {
+
+    private static final HandlerList HANDLER_LIST = new HandlerList();
+
+    private final NamespacedKey cooldownGroup;
+    private int cooldown;
+
+    private boolean cancelled;
+
+    @ApiStatus.Internal
+    public PlayerItemGroupCooldownEvent(final Player player, final NamespacedKey cooldownGroup, final int cooldown) {
+        super(player);
+        this.cooldownGroup = cooldownGroup;
+        this.cooldown = cooldown;
+    }
+
+    /**
+     * Get the cooldown group as defined by an item's {@link org.bukkit.inventory.meta.components.UseCooldownComponent}.
+     *
+     * @return cooldown group
+     */
+    public NamespacedKey getCooldownGroup() {
+        return this.cooldownGroup;
+    }
+
+    /**
+     * Gets the cooldown in ticks.
+     *
+     * @return cooldown in ticks
+     */
+    public int getCooldown() {
+        return this.cooldown;
+    }
+
+    /**
+     * Sets the cooldown of the material in ticks.
+     * Setting the cooldown to 0 results in removing an already existing cooldown for the material.
+     *
+     * @param cooldown cooldown in ticks, has to be a positive number
+     */
+    public void setCooldown(final int cooldown) {
+        Preconditions.checkArgument(cooldown >= 0, "The cooldown has to be equal to or greater than 0!");
+        this.cooldown = cooldown;
+    }
+
+    @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;
+    }
+}