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

Помогите Какие бывают аргументы?

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

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

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    Доброе время суток! хочу задать вопрос знающим людям: Не подскажите, Какие бываю аргументы?
    Типо: getPlayer()
    getInventory()
    Всем вам знакомы, получить игрока и его инвентарь соответственно.
    И я хочу узнать весь список аргументов. К примеру сейчас мне нужно проверить следующее:

    Если у игрока открыт инвентарь и он тыкнул пкм по предмету в инвентоте и это блок золота{
    Выполните действия которые указаны тут
    }
    (Причем задача, что бы это работало в GUI инвенторе, который создается в коде)
     
    Последнее редактирование: 27 май 2020
  2. Хостинг MineCraft
    <
  3. maybeTripll

    maybeTripll Новичок Пользователь

    Баллы:
    13
    Код:
    if(e.getInventory().getName().equalsIgnoreCase("Название GUI-инвентаря")) {
         if(e.getSlot() == номер_слота) {
               Код для взаимодействия с кликнутым слотом
         }
    }
    
     
  4. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    спасибо тебе, святой человек
     
  5. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    Еще будет вопрос, в какой ивент это вставлять? Пробовал многие, но он никак не реагирует
     
  6. diego070202

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

    Баллы:
    61
    Имя в Minecraft:
    Mielsen
    InventoryClickEvent как варик. Погугли, откуда эти методы идут.
     
  7. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    @EventHandler
    public void onInven1toryClick(InventoryClickEvent e) {
    Player p = ((Player) e).getPlayer();
    if(e.getInventory().getName().equalsIgnoreCase("Покупка руды")) {
    if(e.getSlot() == 2) {
    p.sendMessage(ChatColor.YELLOW + String.format("Проверка"));
    }
    }
    }

    Ну вот. Но, после клика по 2му слоту, ничего не происходит. (Это написано в классе, где сам GUI инвентарь)
    То есть там, где все это указанно:"


    Inventory inv = Bukkit.createInventory(null, 9, "Покупка руды");
    inv.setItem(0, ItemUntil.create(Material.BARRIER, ChatColor.YELLOW + "Повысить уровень" ));
    inv.setItem(2, ItemUntil.create(Material.GOLD_BLOCK,ChatColor.GRAY + "Купить уголь " ));
    inv.setItem(3, ItemUntil.create(Material.STONE,ChatColor.WHITE + "Купить железо " ));
    inv.setItem(4, ItemUntil.create(Material.EMERALD_BLOCK,ChatColor.GOLD + "Купить золото " ));
    p.openInventory(inv);"


    Класс с массивом для инвенторя отдельно.
    Ошибок он не выдает, код работает, но не работает XD
    Открываю этот инвентарь, кликаю мышкой по 2му слоту, и ничего не происходит (хотя, по идее, должен написать это:
    p.sendMessage(ChatColor.YELLOW + String.format("Проверка"));


    Кстати, еще он не дает название предметам в инвенторе
    https://skr.sh/s2vofVkrYvK?a
    В коде указано название, но ему без разницы(
    (названия можно посмотреть выше)

    Если знаешь, как решить эти проблемы, то буду рад помощи =)
     
    Последнее редактирование: 30 июн 2020 в 07:19
  8. maybeTripll

    maybeTripll Новичок Пользователь

    Баллы:
    13
    В джаве идет счет с нуля, т.е. если ты хочешь кликнуть на 2-й слот (в инвентаре), то в джаве должен быть 1

    Это будет уже 3-й слот в инвентаре
     
  9. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    Да, я это знаю, но тем не менее, оно не работает(
     
  10. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    Я порыскал в интернете, и нашел нужный код )
    @EventHandler
    public void onInventoryCl1ick(InventoryClickEvent e) {

    Player p = (Player) e.getWhoClicked();

    if (e.getInventory().getName().equalsIgnoreCase("Покупка руды")) {
    e.setCancelled(true);
    if (e.getCurrentItem().getType() == Material.STONE) {
    p.sendMessage(ChatColor.YELLOW + String.format("Проверка"));
    }



    }
    }
     
  11. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    н
    Но, проблема все еще осталась одна. Почему он не дает название предметам?
    https://skr.sh/v2wunGWYEn8?a - тут наглядно видно, что все называется ванильными названиями из игры
    https://skr.sh/s2wu7DiV9GP?a - тут написано, как оно ДОЛЖНО зваться.
    Не знаешь, почему не работает??
     
  12. diego070202

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

    Баллы:
    61
    Имя в Minecraft:
    Mielsen
    ItemUtil. Хоть-бы больше прикрепил.
    Делай через мету.
    Берешь мету, берешь дисплейнейм, меняешь, устанавливаешь шмотке мету(всегда так делаю).
    А можешь написать метод и чисто обращаться к нему указывая аргументы.
     
  13. diego070202

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

    Баллы:
    61
    Имя в Minecraft:
    Mielsen
    if(e.getInventory().getName().equalsIgnoreCase("Покупка руды")) мб это условие не проходит?
    Всегда для уверенности делай getInventory().hasName()
    Вроде так, пишу не в IDE, а от руки, так что могу ошибаться.
    Если у инвента не будет имени, то еррор выдаст, поэтому проверяй сперва на наличие имени инвента
     
  14. maybeTripll

    maybeTripll Новичок Пользователь

    Баллы:
    13
    Если у тебя цветное название инвентаря, то ты должен писать с тем же цветом, например
    if(e.getInventory().getName().equalsIgnoreCase(ChatColor.YELLOW + "Покупка руды")) {}
     
  15. Автор темы
    ZTYoung101

    ZTYoung101 Новичок Пользователь

    Баллы:
    16
    Мы можем связаться в Дискорде или ТимСпике, или любой другой сети? Просто тут нормально не обменяться информацией
     
  16. diego070202

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

    Баллы:
    61
    Имя в Minecraft:
    Mielsen
    Да, вполне.
    Дискорд/ВК(предпочтительно 2ой вариант).
    https://vk.com/pozdnyak1337
    PoZDnyak#0128
     

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