Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

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

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

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

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

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

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

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Разве name не благодаря meta?)

    Name кастомный.
     
  5. Fenix78563

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

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

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Хмм.. Можно как либо всё же обойти эту фигню с проверкой на Ammount?
     
  7. Fenix78563

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

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

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Если у меня в инвентаре есть soap (не важно кол-во. минимум 1), то он (soap) удаляется в размере 1шт., а потом выполняется код удаления эффекта.
     
  9. 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);
                }
            }
        }
    }
     
  10. Автор темы
    iD3LSY

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    И еще раз спасибо, Fenix78563. Уже какой раз ты меня выручаешь?) xd
     
Статус темы:
Закрыта.

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