From 983f3a7935712ff63da3bfd2c2233ffb9914db51 Mon Sep 17 00:00:00 2001 From: md678685 Date: Sat, 10 Feb 2018 16:03:33 +0000 Subject: [PATCH] Clear item in offhand slot in /clearinventory GitHub fancy things: Fixes #950. Fixes #1426. Fixes #1834. --- .../essentials/commands/Commandclearinventory.java | 2 ++ .../essentials/craftbukkit/InventoryWorkaround.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java index e5a433f09..7d07fae3b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java @@ -113,12 +113,14 @@ public class Commandclearinventory extends EssentialsCommand { sender.sendMessage(tl("inventoryClearingAllItems", player.getDisplayName())); } InventoryWorkaround.clearInventoryNoArmor(player.getInventory()); + InventoryWorkaround.setItemInOffHand(player, null); } else if (type == -2) // type -2 represents double wildcard or all items and armor { if (showExtended) { sender.sendMessage(tl("inventoryClearingAllArmor", player.getDisplayName())); } InventoryWorkaround.clearInventoryNoArmor(player.getInventory()); + InventoryWorkaround.setItemInOffHand(player, null); player.getInventory().setArmorContents(null); } else { if (data == -1) // data -1 means that all subtypes will be cleared diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java b/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java index 3a0e905a3..a70ba20bc 100644 --- a/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java +++ b/Essentials/src/com/earth2me/essentials/craftbukkit/InventoryWorkaround.java @@ -239,4 +239,17 @@ public final class InventoryWorkaround { } } } + + @SuppressWarnings("deprecation") + public static void setItemInOffHand(Player p, ItemStack item) { + // This assumes that all builds that support a main hand also support an off hand. + if (hasMainHandSupport == null || hasMainHandSupport) { + try { + p.getInventory().setItemInOffHand(item); + hasMainHandSupport = true; + } catch (Throwable e) { + hasMainHandSupport = false; + } + } + } }