diff --git a/patches/api/0382-Add-PlayerStopUsingItemEvent.patch b/patches/api/0382-Add-PlayerStopUsingItemEvent.patch new file mode 100644 index 000000000..0743d44ae --- /dev/null +++ b/patches/api/0382-Add-PlayerStopUsingItemEvent.patch @@ -0,0 +1,65 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: u9g +Date: Tue, 3 May 2022 20:41:30 -0400 +Subject: [PATCH] Add PlayerStopUsingItemEvent + + +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerStopUsingItemEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerStopUsingItemEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..3689551baf2c9880f3e2a70435f8b4ad05cba49a +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerStopUsingItemEvent.java +@@ -0,0 +1,53 @@ ++package io.papermc.paper.event.player; ++ ++import org.bukkit.entity.Player; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.bukkit.inventory.ItemStack; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Called when the server detects a player stopping using an item. ++ * Examples of this are letting go of the interact button when holding a bow, an edible item, or a spyglass. ++ */ ++public class PlayerStopUsingItemEvent extends PlayerEvent { ++ private static final HandlerList handlers = new HandlerList(); ++ @NotNull private final ItemStack item; ++ private final int ticksHeldFor; ++ ++ public PlayerStopUsingItemEvent(@NotNull final Player player, @NotNull final ItemStack item, final int ticksHeldFor) { ++ super(player); ++ this.item = item; ++ this.ticksHeldFor = ticksHeldFor; ++ } ++ ++ /** ++ * Gets the exact item the player is releasing ++ * ++ * @return ItemStack the exact item the player released ++ */ ++ @NotNull ++ public ItemStack getItem() { ++ return item; ++ } ++ ++ /** ++ * Gets the number of ticks the item was held for ++ * ++ * @return int the number of ticks the item was held for ++ */ ++ public int getTicksHeldFor() { ++ return ticksHeldFor; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} diff --git a/patches/server/0902-Add-PlayerStopUsingItemEvent.patch b/patches/server/0902-Add-PlayerStopUsingItemEvent.patch new file mode 100644 index 000000000..b46828ff9 --- /dev/null +++ b/patches/server/0902-Add-PlayerStopUsingItemEvent.patch @@ -0,0 +1,18 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: u9g +Date: Tue, 3 May 2022 20:41:37 -0400 +Subject: [PATCH] Add PlayerStopUsingItemEvent + + +diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java +index 1521f53ee1bd85ca44a68b2c9d969eaf63fa342e..bd5825c5b5c81e0694a3635b981588f0d2ba83cb 100644 +--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +@@ -3868,6 +3868,7 @@ public abstract class LivingEntity extends Entity { + + public void releaseUsingItem() { + if (!this.useItem.isEmpty()) { ++ if (this instanceof ServerPlayer) new io.papermc.paper.event.player.PlayerStopUsingItemEvent((Player) getBukkitEntity(), useItem.asBukkitMirror(), getTicksUsingItem()).callEvent(); // Paper + this.useItem.releaseUsing(this.level, this, this.getUseItemRemainingTicks()); + if (this.useItem.useOnRelease()) { + this.updatingUsingItem();