--- a/net/minecraft/world/item/ItemCooldowns.java
+++ b/net/minecraft/world/item/ItemCooldowns.java
@@ -11,8 +_,8 @@
 import net.minecraft.world.item.component.UseCooldown;
 
 public class ItemCooldowns {
-    private final Map<ResourceLocation, ItemCooldowns.CooldownInstance> cooldowns = Maps.newHashMap();
-    private int tickCount;
+    public final Map<ResourceLocation, ItemCooldowns.CooldownInstance> cooldowns = Maps.newHashMap();
+    public int tickCount;
 
     public boolean isOnCooldown(ItemStack stack) {
         return this.getCooldownPercent(stack, 0.0F) > 0.0F;
@@ -56,6 +_,13 @@
     }
 
     public void addCooldown(ResourceLocation group, int cooldown) {
+        // Paper start - Item cooldown events
+        this.addCooldown(group, cooldown, true);
+    }
+
+    public void addCooldown(ResourceLocation group, int cooldown, boolean callEvent) {
+        // Event called in server override
+        // Paper end - Item cooldown events
         this.cooldowns.put(group, new ItemCooldowns.CooldownInstance(this.tickCount, this.tickCount + cooldown));
         this.onCooldownStarted(group, cooldown);
     }
@@ -71,6 +_,6 @@
     protected void onCooldownEnded(ResourceLocation group) {
     }
 
-    record CooldownInstance(int startTime, int endTime) {
+    public record CooldownInstance(int startTime, int endTime) {
     }
 }
