From a828c43f996988035e55238ad99b8ad1ed219d97 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 15 Mar 2023 09:20:21 +0100 Subject: [PATCH] Remove ignoreCancelled from ArmorToggleListener, small cleanup Spigot considers interacting with air "cancelled" Fixes #3240 --- .../ArmorToggleListener.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_19_4To1_19_3/ArmorToggleListener.java b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_19_4To1_19_3/ArmorToggleListener.java index 2fce7d40a..574b1d664 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_19_4To1_19_3/ArmorToggleListener.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_19_4To1_19_3/ArmorToggleListener.java @@ -27,6 +27,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; public final class ArmorToggleListener extends ViaBukkitListener { @@ -46,23 +47,26 @@ public final class ArmorToggleListener extends ViaBukkitListener { } } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR) public void itemUse(final PlayerInteractEvent event) { if (!ENABLED) { return; } final Player player = event.getPlayer(); - if (!isOnPipe(player) || event.getItem() == null) { + final ItemStack item = event.getItem(); + if (item == null || event.getHand() == null || !isOnPipe(player)) { return; } - final EquipmentSlot equipmentSlot = event.getItem().getType().getEquipmentSlot(); - if (equipmentSlot != EquipmentSlot.HAND && equipmentSlot != EquipmentSlot.OFF_HAND) { - final ItemStack armor = player.getInventory().getItem(equipmentSlot); + final EquipmentSlot armorItemSlot = item.getType().getEquipmentSlot(); + if (armorItemSlot != EquipmentSlot.HAND && armorItemSlot != EquipmentSlot.OFF_HAND) { + final PlayerInventory inventory = player.getInventory(); + final ItemStack armor = inventory.getItem(armorItemSlot); // If two pieces of armor are equal, the client will do nothing. - if (armor != null && armor.getType() != Material.AIR && !armor.equals(event.getItem())) { - player.updateInventory(); + if (armor != null && armor.getType() != Material.AIR && !armor.equals(item)) { + inventory.setItem(event.getHand(), inventory.getItem(event.getHand())); + inventory.setItem(armorItemSlot, armor); } } }