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

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

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

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

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

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

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

    maybeTripll Участник Пользователь

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

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

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

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

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

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

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

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

    Trophy Points:
    63
    @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
    В коде указано название, но ему без разницы(
    (названия можно посмотреть выше)

    Если знаешь, как решить эти проблемы, то буду рад помощи =)
     
    Last edited: Jun 30, 2020
  8. maybeTripll

    maybeTripll Участник Пользователь

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

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

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

    Trophy Points:
    63
    Да, я это знаю, но тем не менее, оно не работает(
     
  10. Автор темы
    ZTYoung101

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

    Trophy Points:
    63
    Я порыскал в интернете, и нашел нужный код )
    @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 Активный участник Пользователь

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

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

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

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

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

    maybeTripll Участник Пользователь

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

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

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

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

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

Share This Page