1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем NukerFall, 6 дек 2018.

Статус темы:
Закрыта.
  1. Автор темы
    NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    Очень странная механика Bukkit меня вновь удивляет. Мне нужно, чтобы при клике в меню при наличии 10 самородков в инвентаре игрока выполнялось действие. Также потом эти самородки удалялись. И всё бы ничего, если бы это работало в случаях, когда самородков в слоте у меня было бы 11, 12..., 64. Работает жёстко только на 10. Второй способ - разложить 10 самородков по одному в инвентаре, но смысла от этого нет
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
        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;
                    }
                }
            }
        }
     
  3. Автор темы
    NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    Прошу прощения, но это не совсем то, что мне нужно. Проблема была в том, что я не посмотрел нормально на метод containsAtLeast(ItemStack, количество). Вроде как с ним даже по всем слотам разбросанное работает с любыми количествами.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну смотри. Тут есть и подсчет и удаление.
     
  5. Автор темы
    NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    Спасибо, но эта шняга тоже считает. Теперь осталось понять что использовать как удаление. remove или removeItem...
     
  6. Автор темы
    NukerFall

    NukerFall Активный участник Пользователь

    Баллы:
    76
    Всё же removeItem.
     
Статус темы:
Закрыта.

Поделиться этой страницей