Вопрос Как удалить конкретное кол-во предмета

RpAhmed

Пользователь
Сообщения
17
Можно ли как-то найти и удалить предмет в инвентаре игрока в конкретном количестве?
Система крафта:
Нажал на предмет -> удалились нужные в крафте предметы в нужном количестве -> получил необходимый предмет.
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Проблема метода inv.contains() в том, что он ищет конкретное число предмета.
То есть, если у тебя прописано plyInv.contains(new ItemStack(Material.IRON_INGOT)), то он не будет пропускать нажатие, если у тебя больше 1 слитка в инвентаре.

Кусок кода ниже:
Java:
@EventHandler
public void inventoryEvent(InventoryClickEvent e)
{
    Inventory inv = e.getInventory();
    ItemStack curretItem = e.getCurrentItem();
    Player ply = (Player) e.getWhoClicked();
    Inventory plyInv = ply.getInventory();
     
     
    if (inv.equals(Main.menu))
    {
        if (curretItem.equals(Main.dust_black))
            {
                //if (plyInv.contains(new ItemStack(Material.IRON_INGOT)))
                //{
                for (int i = 1; i < 27; i++) {
                    ItemStack item = plyInv.getItem(i);
                    if (item != null) return;
                    if (item.getType().equals(Material.IRON_INGOT)) // этот способ выдает null ошибку
                    {
                        item.setAmount(item.getAmount() - 1);
                    }
                }
                //}
            }
            e.setCancelled(true);
        }
}
Как можно решить данную проблему?
 
Последнее редактирование:
Решение
for (int i = 1; i < 27; i++)
Размер инвентаря без брони и левой руки - 36.
Ты отменяешь весь свой код дальше если в слоте есть предмет.

Правильнее будет так
for (int i = 0; i < 36; i++) или for (ItemStack item : plyInv.getStorageContents())
и
if (item == null) continue;
for (int i = 1; i < 27; i++)
Размер инвентаря без брони и левой руки - 36.
Ты отменяешь весь свой код дальше если в слоте есть предмет.

Правильнее будет так
for (int i = 0; i < 36; i++) или for (ItemStack item : plyInv.getStorageContents())
и
if (item == null) continue;
 
Назад
Сверху Снизу