Мне нужно посчитать сколько предметов определенного типа есть в инвентаре игрока. Делать мне это нужно когда инвентарь открыт и игрок кликает в нем. Проблема в том, что подсчет срабатывает нормально только 1 раз пока открыт инвентарь, далее полный абзац начинается. Плюс к этому как оказалось не хотят определяться номера слотов.
Стоит добавить, что в это время игроку показывается кастомный инвентарь с размером одинарного сундука.
Код
private Integer searchItems(Player player, ItemStack itemStack) {
Inventory playerInventory = player.getInventory();
MainPlayerInventory mainPlayerInventory = playerInventory.query(QueryOperationTypes.INVENTORY_TYPE.of(MainPlayerInventory.class));
int totalItemsinInventory = 0;
Iterable<Slot> slots = mainPlayerInventory.slots();
for(Slot slot : slots) {
Optional<SlotIndex> slotIndex = slot.getInventoryProperty(SlotIndex.class);
if(slotIndex.isPresent()) { //Тут всегда false, чую проблема в том, что id не определяются.
int id = slotIndex.get().getValue();
System.out.println("SlotID = " + id);
}
int anyItemsInSlot = slot.totalItems();
System.out.println("Не определенных предметов в слоте = " + anyItemsInSlot); // По непонятной причине эта строка вообще не выводится.
if(slot.contains(itemStack)) { // Нормально работает, только если предметы есть лишь в одном слоте инвентаря
int itemsInSlot = slot.totalItems(); // Возможно и тут проблема.
System.out.println("Искомых предметов = " + itemsInSlot);
totalItemsinInventory = totalItemsinInventory + itemsInSlot;
}
}
System.out.println("Всего предметов " + totalItemsinInventory);
return totalItemsinInventory;
}
При первом клике все отлично, но потом проверка наличия предмета перестает работать. В зависимости от заполненности инвентаря глюк может изменяться. Если занято всего несколько слотов, то цикл может пройтись по ним несколько раз. Если же занято много слотов, то при получении объема ItemStack в них я начинаю получать 0.
Тоже самое происходит, если я пытаюсь сканировать только хотбар. Может можно как-то еще подсчитать число определенного ItemStack в инвентаре?