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

Помогите Проверка инвентаря на наличие предмета.

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

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

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

    Баллы:
    76
    Не знаю почему, но как бы я не старался, как бы я не потел, код работает на половину.
    Код:
    if(player.getInventory().contains(soap) {
        player.getInventory().removeItem(soap);
        player.sendMessage(prefix + " " + getConfig().getString("messages.soapused").replace('&', '§'));
    }
    Дело в том, что если у игрока в инвентаре более 1 soap, то код не срабатывает.

    Когда ставлю вместо ItemStack - Material, всё работает без условных ограничений количеством.
     
  2. Exception_Prototype

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

    Баллы:
    96
    А у тебя предмет каким либо образом изменён? Meta || Name ?
     
  3. Автор темы
    iD3LSY

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

    Баллы:
    76
    Название кастомное.
     
    Последнее редактирование: 29 май 2019
  4. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Тоже на этом парился.
    Item Stack имеет параметр Ammount (количество) и этот параметр так же учитывается ведром, поэтому стаки с кол-вом отличным от того что ты указал не будут удалены
     
  5. Автор темы
    iD3LSY

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

    Баллы:
    76
    Хмм.. Можно как либо всё же обойти эту фигню с проверкой на количество?
     
    Последнее редактирование: 29 май 2019
  6. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    что именно тебе нужно от кода?
    очистить определенный слот или удалить все soap из инвентаря? во всех слотах? или что то третье
     
  7. Автор темы
    iD3LSY

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

    Баллы:
    76
    Если у меня в инвентаре есть soap (не важно кол-во. минимум 1), то его кол-во уменьшается на 1, а потом выполняется код удаления эффекта.
     
    Последнее редактирование: 29 май 2019
  8. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Код:
    ItemStack whatShoudRemove = new ItemStack (Material.APPLE);
    if (p.getInventory().containsAtLeast(whatShoudRemove, 1)){   
        for (int i = 0; i<=36; i++){
            if (p.getInventory().getItem(i)==null) continue; //пропускаем код если item null а то nullpointer
            if (p.getInventory().getItem(i).getType()==whatShoudRemove.getType()){ //сравниваем тип
                if (p.getInventory().getItem(i).getAmount()==1){ //количество
                    p.getInventory().setItem(i, new ItemStack(Material.AIR)); //удаляем вещь из этого слота. если использовать remove то он удалит все вещи с кол-вом 1
                } else if (p.getInventory().getItem(i).getAmount()>1){ //если кол-во больше 1 то просто уменьшаем его
                    p.getInventory().getItem(i).setAmount(p.getInventory().getItem(i).getAmount()-1);
                }
            }
        }
    }
     
  9. Автор темы
    iD3LSY

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

    Баллы:
    76
    Спасибо, Fenix78563
     
    Последнее редактирование: 29 май 2019
Статус темы:
Закрыта.

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