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

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

Discussion in 'Разработка плагинов для новичков' started by iD3LSY, Dec 27, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    iD3LSY

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

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Не знаю почему, но как бы я не старался, как бы я не потел, код работает на половину.
    Code:
    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 Активный участник Пользователь

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Если у меня в инвентаре есть soap (не важно кол-во. минимум 1), то он (soap) удаляется в размере 1шт., а потом выполняется код удаления эффекта.
     
  9. Fenix78563

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    Code:
    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 Активный участник Пользователь

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    И еще раз спасибо, Fenix78563. Уже какой раз ты меня выручаешь?) xd
     
Thread Status:
Not open for further replies.

Share This Page