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

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

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

  1. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    Есть меню сервера, выдаю его при команде /menu, если оно уже есть - выдаваться не должно.
    Проблема в том, что меню выдается в любом случае, даже если оно уже есть в инвентаре.
    Как фиксить?

    public boolean onCommand(CommandSender sender, Command cmd, String label,String[] args) {
    Player p = (Player) sender;

    if(!(sender instanceof Player)) {

    sender.sendMessage("Only for players");

    return true;
    }else{

    if(p.getInventory().containsAtLeast(GUI.itemmenu(), 1)){
    p.sendMessage(ChatColor.DARK_RED+"У вас уже есть меню!");

    }else {

    p.getInventory().addItem(GUI.itemmenu());
    p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");

    }
    }
    return true;
    }
     
  2. reZero

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

    Баллы:
    76
    Просто contains попробуй
     
  3. Nikolai_Faint

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

    Баллы:
    96
  4. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    contains ничего не изменило, с equals я вроде тоже уже пробовал.
     
  5. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Можно попробовать isSimilar, метод у ItemStack.
     
  6. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    Не могу додуматься как мне его впихнуть в проверку
     
  7. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Пройдись по инвентарь и сравнивай через isSimilar.
     
  8. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Проведи итерацию по всему инвентарю.
     
  9. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    Не сработало, хотя, может я накосячил где-то

    for (int i = 0; i<=36; i++){

    if (p.getInventory().getItem(i)==null) continue;
    if (!p.getInventory().getItem(i).isSimilar(GUI.itemmenu())) {
    continue;
    }



    if(p.getInventory().getItem(i).isSimilar(GUI.itemmenu())) {


    p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");

    }




    }
    p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");
    p.getInventory().addItem(GUI.itemmenu());
     
  10. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Код:
    for (ItemStack item : p.getInventory().getItems()){
        If (item.isSimilar(otherItem) {
            Todo
            return true;
        }
    }
     
  11. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Лишние строки кода
     
  12. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    The method getItems() is undefined for the type PlayerInventory
     
  13. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Я точное наименование метода не помню, посмотри сам, он должен массив с предметами возвращать.

    Upd: getContents()
     
  14. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    for (ItemStack item : p.getInventory().getContents()){
    if(item.isSimilar(GUI.itemmenu())) {
    p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
    return true;
    }
    }
    Ошибку выдает в консоль когда команду ввожу.
     
  15. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Небось NullPointerException. Пропуская нулевые предметы.
     
  16. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Код:
     if (item == null) continue;
     
  17. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Потому что у тебя предмет в итерации может быть null

    Код:
    if (Arrays.stream(player.getInventory().getContents()).anyMatch(GUI.itemmenu()::isSimilar)) {
        p.sendMessage(ChatColor.DARK_RED+"У вас уже есть меню!");
    } else {
        p.getInventory().addItem(GUI.itemmenu());
        p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");
    }
    
     
  18. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Ну куда ему stream, если он и это пока написать не может? Ты же ему голову сломаешь.
     
  19. Автор темы
    menusha11

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

    Баллы:
    61
    Имя в Minecraft:
    menusha11
    for (ItemStack item : p.getInventory().getContents()){
    if (item==null) continue;
    if(item.isSimilar(GUI.itemmenu())) {
    p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
    return true;
    }




    }

    Теперь просто ничего не происходит.
     
  20. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Да не, пускай видит как это красиво и пойдет изучать, ну и через фор тоже проверку на нулл не надо, просто местами поменять предметы при сравнении guiItem.isSimilar(item), там при null предмете метод и так false вернет.
     

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