- Баллы
- 68
Здравствуйте.
Проблема такая: нужно посчитать все предметы определенного типа в диспенсере, затем удалить их.
В документации нашел подходящий метод - all. Но возвращает он какой-то непонятный для меня тип: <Integer,? extends ItemStack> (я новичек в программировании).
Поискав в гугле, нашел вроде-бы подходящий цикл, но он почему-то делает только один проход.
Собственно, вот код:
Насколько я понимаю, цикл должен обходить все элементы HashMap, а выходит только один. Где тут ошибка?
Вторая проблема заключается в том, что даже если тупо применить ко всему инвентарю clear, удалятся все stack'и, кроме того который был выброшен из диспенсера.
Проблема такая: нужно посчитать все предметы определенного типа в диспенсере, затем удалить их.
В документации нашел подходящий метод - all. Но возвращает он какой-то непонятный для меня тип: <Integer,? extends ItemStack> (я новичек в программировании).
Поискав в гугле, нашел вроде-бы подходящий цикл, но он почему-то делает только один проход.
Собственно, вот код:
Код:
public void onBlockDispenseEvent(BlockDispenseEvent event) {
Block block = event.getBlock();
Dispenser dispenser = (Dispenser) block.getState();
Inventory inventory = dispenser.getInventory();
ItemStack item = event.getItem();
Integer amount = 1;
for (Entry<Integer, ? extends ItemStack> pair : ((HashMap<Integer, ? extends ItemStack>)inventory.all(item)).entrySet()){
System.out.println("Key: " + pair.getKey() + ", Value: " + pair.getValue());
ItemStack stack = (ItemStack) pair.getValue();
amount += stack.getAmount();
inventory.clear(pair.getKey());
}
item.setAmount(amount);
event.setItem(item);
}
Вторая проблема заключается в том, что даже если тупо применить ко всему инвентарю clear, удалятся все stack'и, кроме того который был выброшен из диспенсера.