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

Помогите Нормальное создание инвентарей

Тема в разделе "Разработка плагинов для новичков", создана пользователем MLG_Coder, 23 июл 2021.

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

    MLG_Coder Новичок

    Баллы:
    6
    Имя в Minecraft:
    MLG_Coder
    1.12.2. Мне нужно создать меню так, чтобы клики регало только при нажатии по самому меню. Конечно, можно сравнить инвентари по тайтлу, но тогда регает и клики в инвентаре игрока.
     
  2. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Используй InventoryHolder и проверяй по нему
     
  3. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    С одной стороны плюсую, с другой же на Spigot 1.17 кастомные IH больше не поддерживаются (хотя Paper вернули их поддержку у себя).
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    И что предлагается использовать вместо IH? Явно не тайтлы
     
  5. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Только что проверил, все работает. Да и информации о том, что IH больше не поддерживается, я не нашел.
    PHP:
        @EventHandler
        
    public void onClick(InventoryClickEvent e) {
            if (
    e.getClickedInventory() == null) return;
            if (
    e.getClickedInventory().getHolder() == null) return;
            if (
    e.getClickedInventory().getHolder() instanceof CustomHolder)
                
    e.getWhoClicked().sendMessage("123");
        }
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    md_5 и ко. всегда были против использования IH для выявления кастомных инвентарей, но по какой-то причине оно всё ещё как-то да работает/работало. Патч Paper. Вот какая-никакая официальная позиция. Плюс проблемы с кастомными IH закрываются/игнорируются.
    Вероятно, хранить их самому? Что-то вроде Set<Inventory> invs = Collections.newSetFromMap(new IdentityHashMap<>()), да добавлять/удалять при соответствующих действиях. Не знаю, что именно у них на уме - доступа к их сташу не имею.
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Да все так же работает как и работало.
     
  8. Автор темы
    MLG_Coder

    MLG_Coder Новичок

    Баллы:
    6
    Имя в Minecraft:
    MLG_Coder
    Он всё равно учитывает инвентарь игрока как IH
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Так ты на instanceof проверяй.
     
  10. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Подниму пожалуй тему. В принципе, как альтернативу, можно использовать InventoryView. Если уберут возможность использовать IH для кастомных инвентарей, то InventoryView вполне подойдет в качестве замены.
     
  11. swat1x

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

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    (это я создал тему со второго акка, потому что этот на 4 месяца банили на неправильную категорию вопроса). Всё легче в 1000 раз. Была проблема с тем, что инвентарь игрока так же клики считывал. Я просто сравнил inventoryholder, а потом кликнутый инвентарь и инвентарь игрока. В первый раз хз почему, но тупил и не мог догадаться. Тема закрыта если что
     
  12. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Tо бишь, также кастомно реализовать IV, и открывать игроку уже его?
     
  13. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Ага. А проверку можно примерно такую делать
    PHP:
        @EventHandler
        
    public void onClick(InventoryClickEvent e) {
            if (
    e.getClickedInventory() == null) return;
            if (
    e.getWhoClicked().getOpenInventory() instanceof CustomInventoryView) {
                if (
    e.getClickedInventory().getHolder() != null && e.getClickedInventory().getHolder() instanceof Player) return;
                
    e.getWhoClicked().sendMessage("You clicked in custom inventory. Slot: " e.getSlot());
            }
        }
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Да ничего там не уберут, не ссы. В спиготе были некоторые проблемы с инвентарами вида наковальни, в бумаге сделали свою реализацию и все.
     
    Последнее редактирование: 7 сен 2021

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