Помогите Отслеживание предметов.

Статус
Закрыто для дальнейших ответов.

NukerFall

Активный участник
Пользователь
Баллы
76
Очень странная механика Bukkit меня вновь удивляет. Мне нужно, чтобы при клике в меню при наличии 10 самородков в инвентаре игрока выполнялось действие. Также потом эти самородки удалялись. И всё бы ничего, если бы это работало в случаях, когда самородков в слоте у меня было бы 11, 12..., 64. Работает жёстко только на 10. Второй способ - разложить 10 самородков по одному в инвентаре, но смысла от этого нет
 
Код:
    public static boolean checkremove(Player p, ItemStack s, int c) {
        if (calc(p, s) >= c) {
            clear(p, s, c);
            return true;
        }
        return false;
    }

    public static int calc(Player p, ItemStack s) {
        int count = 0;
        for (int i = 0; i < p.getInventory().getSize(); i++) {
            ItemStack stack = p.getInventory().getItem(i);
            if (stack == null)
                continue;
            if (stack.isSimilar(s)) {
                count += stack.getAmount();
            }
        }
        return count;
    }

    public static void clear(Player p, ItemStack s, int c) {
        for (int i = 0; i < p.getInventory().getSize(); i++) {
            ItemStack stack = p.getInventory().getItem(i);
            if (stack == null)
                continue;
            if (stack.isSimilar(s)) {
                if (stack.getAmount() == 0)
                    break;
                if (stack.getAmount() <= c) {
                    c = c - stack.getAmount();
                    stack.setAmount(-1);
                }
                if (stack.getAmount() > c) {
                    stack.setAmount(stack.getAmount() - c);
                    c = 0;
                }
            }
        }
    }
 
Код:
    public static boolean checkremove(Player p, ItemStack s, int c) {
        if (calc(p, s) >= c) {
            clear(p, s, c);
            return true;
        }
        return false;
    }

    public static int calc(Player p, ItemStack s) {
        int count = 0;
        for (int i = 0; i < p.getInventory().getSize(); i++) {
            ItemStack stack = p.getInventory().getItem(i);
            if (stack == null)
                continue;
            if (stack.isSimilar(s)) {
                count += stack.getAmount();
            }
        }
        return count;
    }

    public static void clear(Player p, ItemStack s, int c) {
        for (int i = 0; i < p.getInventory().getSize(); i++) {
            ItemStack stack = p.getInventory().getItem(i);
            if (stack == null)
                continue;
            if (stack.isSimilar(s)) {
                if (stack.getAmount() == 0)
                    break;
                if (stack.getAmount() <= c) {
                    c = c - stack.getAmount();
                    stack.setAmount(-1);
                }
                if (stack.getAmount() > c) {
                    stack.setAmount(stack.getAmount() - c);
                    c = 0;
                }
            }
        }
    }
Прошу прощения, но это не совсем то, что мне нужно. Проблема была в том, что я не посмотрел нормально на метод containsAtLeast(ItemStack, количество). Вроде как с ним даже по всем слотам разбросанное работает с любыми количествами.
 
Прошу прощения, но это не совсем то, что мне нужно. Проблема была в том, что я не посмотрел нормально на метод containsAtLeast(ItemStack, количество). Вроде как с ним даже по всем слотам разбросанное работает с любыми количествами.
Ну смотри. Тут есть и подсчет и удаление.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх