diff --git a/src/chestcleaner/listeners/RefillListener.java b/src/chestcleaner/listeners/RefillListener.java index fab7e46..0a307be 100644 --- a/src/chestcleaner/listeners/RefillListener.java +++ b/src/chestcleaner/listeners/RefillListener.java @@ -200,16 +200,16 @@ private boolean isOnBlackList(ItemStack item) { private int getRefillStack(Material material, Player player) { ItemStack[] items = InventoryDetector.getFullInventory(player.getInventory()); - for (int i = 9; i < 36; i++) { + for (int i = 0; i < 36; i++) { + if (i != player.getInventory().getHeldItemSlot() && i != 40) { + if (items[i] != null) { - if (items[i] != null) { + if (items[i].getType().equals(material)) { + return i; + } - if (items[i].getType().equals(material)) { - return i; } - } - } return -1; @@ -296,6 +296,10 @@ private boolean playerOffHandHeldItemMaterialEquals(ItemStack item, Player playe return player.getInventory().getItemInOffHand().getType().equals(item.getType()); } + private boolean isViableSlot(int i, Player player) { + return i != player.getInventory().getHeldItemSlot() && i != 40; + } + /** * Searches through the main inventory (slots 9 - 35) taking the first ItemStack * with the same type, an amount bigger than 1 (bigger than 0 would work but @@ -312,23 +316,24 @@ private void refillConsumableInSlot(int hand, Player player, ItemStack conItem) public void run() { ItemStack[] items = InventoryDetector.getFullInventory(player.getInventory()); - for (int i = 9; i < 36; i++) { + for (int i = 0; i < 36; i++) { if (items[i] != null) { - if (items[i].getType().equals(conItem.getType())) { - if (hand > -999) { - player.getInventory().setItem(hand, items[i]); - player.getInventory().setItem(i, null); - break; - } else { - player.getInventory().setItemInOffHand(items[i]); - player.getInventory().setItem(i, null); - break; + if (isViableSlot(i, player)) { + if (items[i].getType().equals(conItem.getType())) { + if (hand > -999) { + player.getInventory().setItem(hand, items[i]); + player.getInventory().setItem(i, null); + break; + } else { + player.getInventory().setItemInOffHand(items[i]); + player.getInventory().setItem(i, null); + break; + } + } } - } - } } @@ -346,24 +351,24 @@ public void run() { private void refillBlockInSlot(Player player, Material material, EquipmentSlot hand) { ItemStack[] items = InventoryDetector.getFullInventory(player.getInventory()); - for (int i = 9; i < 36; i++) { + for (int i = 0; i < 36; i++) { if (items[i] != null) { + if (isViableSlot(i, player)) { + if (items[i].getType().equals(material)) { + + if (hand.equals(EquipmentSlot.HAND)) { + player.getInventory().setItemInMainHand(items[i]); + player.getInventory().setItem(i, null); + break; + } else if (hand.equals(EquipmentSlot.OFF_HAND)) { + player.getInventory().setItemInOffHand(items[i]); + player.getInventory().setItem(i, null); + break; + } - if (items[i].getType().equals(material)) { - - if (hand.equals(EquipmentSlot.HAND)) { - player.getInventory().setItemInMainHand(items[i]); - player.getInventory().setItem(i, null); - break; - } else if (hand.equals(EquipmentSlot.OFF_HAND)) { - player.getInventory().setItemInOffHand(items[i]); - player.getInventory().setItem(i, null); - break; } - } - } }