Вопрос Почему-то не работают ивенты.

OneLaimer

Заблокирован
Сообщения
224
Решения
4
Тупо не работают ивенты, хотя команда полностью рабочая, ошибок в компиляторе нет. Ивенты так же зареганы.
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
а вообще вроде как, можно использовать проверку: if (e.getInventory() == change)
можно но на новых версиях. Писал плагин на 1.13, там такое не работает, пришлось определять по названию

Там короче сложно обьяснять, я проверял названия через сообщения в чате- они отличаются по айди. На новых версиях такого нет
 
на версиях ниже 1.16 equals и == не работает. Приходится делать по названию.
Ты уверен? По идее, если ты открываешь для всех игроков один объект инвентаря, == должен сработать
 
ы уверен? По идее, если ты открываешь для всех игроков один объект инвентаря, == должен сработать
я через чат названия выводил, они разные. Типо inv.open(player) inv и player.getInv() разные будут
 
Ага, только это вообще никак не отменяет фичи с нормальным сравнением кастомных гуи. Как эту фишку использовали со времен 1.5.2 - так и используют до сих пор.
Мало того, на сравнении инвентарей InventoryHolder не ограничивается - с помощью него можно делать штуки и по круче.
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Последнее редактирование:
Ага, только это вообще никак не отменяет фичи с нормальным сравнением кастомных гуи. Как эту фишку использовали со времен 1.5.2 - так и используют до сих пор.
Мало того, на сравнении инвентарей InventoryHolder не ограничивается - с помощью него можно делать штуки и по круче.
ну да, а потом, когда, внезапно для вас, эту "фичу" прикроют, начнется куча воплей и изобретение новых костылей. это же так сложно создать собственный класс для своих же гуишек. там прямым текстом написано, что это не нормально, но вам разумеется виднее =)
 
ну да, а потом, когда, внезапно для вас, эту "фичу" прикроют, начнется куча воплей и изобретение новых костылей. это же так сложно создать собственный класс для своих же гуишек. там прямым текстом написано, что это не нормально, но вам разумеется виднее =)
О да, эти истории про "внезапно" прикроют. То то же сообщение, что ты скинул датируется 2018 годом. А сколько этот интерфейс уже существует мне проверять лень, но, пока что он даже не @Deprecated.

В сообщении может быть написано вообще всё что угодно - это обычное "ИМХО", коих столько же, сколько и людей на планете. md_5 тоже думал, что он самый умный - поэтому paper и родился.

Я б расписал тут еще про легаси апи жабы, которое тянется с бородатой версии 1.0 и его никто не выпиливает уже 2 десятка лет, но мне слишком лениво. Тут все таки ребятки рассуждают как инвентари между собой "правильно" сравнивать - поэтому не вижу смысла.
 
Последнее редактирование:
О да, эти истории про "внезапно" прикроют. То то же сообщение, что ты скинул датируется 2018 годом. А сколько этот интерфейс уже существует мне проверять лень, но, пока что он даже не @Deprecated.
В API полно и других вещей, которые не следует использовать в определенных целях и они так же там висят годами, в чем проблема-то?

В сообщении может быть написано вообще всё что угодно - это обычное "ИМХО", коих столько же, сколько и людей на планете.
Ну тогда полистай еще на одно сообщение ниже и тебе там будет объяснение для чего этот интерфейс задумывался и что с ним планировали сделать.

md_5 тоже думал, что он самый умный - поэтому paper и родился.
лол

Делайте что хотите и как хотите, факт в том, что вы зачастую даже не знаете что используете и для чего оно вообще на самом деле надо. зато работает!!
 
ну да, а потом, когда, внезапно для вас, эту "фичу" прикроют, начнется куча воплей и изобретение новых костылей. это же так сложно создать собственный класс для своих же гуишек. там прямым текстом написано, что это не нормально, но вам разумеется виднее =)
О да, эти истории про "внезапно" прикроют. То то же сообщение, что ты скинул датируется 2018 годом. А сколько этот интерфейс уже существует мне проверять лень, но, пока что он даже не @Deprecated.
С одной стороны, не использовать апи, потому что он потенциально может исчезнуть - глупо. Тем более в бакките, где deprecated методы никто не собирается удалять и они работают годами. Но, если покопаться, похоже, что InventoryHolder действительно задуман как интерфейс для блоков и сущностей, содержащих инвентарь

С другой стороны - этот InventoryHolder задокументирован очень слабо и он всё равно даже рядом не стоял с нормальными апи для меню. Не вижу особого смысла в том, чтобы в нём копаться, когда можно подключить тот же InvUI, который ничего не весит и при этом предлагает гораздо более удобное взаимодействие

это же так сложно создать собственный класс для своих же гуишек
На его скриншоте так-то и был собственный класс для гуишек. Просто именно для сравнения он использовал InventoryHolder
 
С помощью проверки:

if (e.getView().getTitle().equalsIgnoreCase("Сдача")) {
e.setCancelled(true);
Чёт вспомнил один метод сравнения инвентарей, где ничего сверхъестественного, но и баги вряд ли найдутся
При открытии меню добавлять UUID/ник человека в список держателей меню, а при закрытии убирать. Пример:

Класс с меню:
Java:
ArrayList<String> holders = new ArrayList<>();
public void openMenu(Player p) {
    //Код открытия меню
    holders.add(p.getName());
}

public void removeHolder(String holderName) {
    holders.remove(holderName);
}
public void isHolder(String name) {
    return holders.contains(name);
}

Класс с прослушивателем событий:
Java:
@EventHandler
public void onCloseMenu(InventoryCloseMenu e) {
    MenuClass.getInstance().removeHolder(e.getPlayer().getName());
    MenuClass2.getInstance().removeHolder(e.getPlayer().getName());
    MenuClass3.getInstance().removeHolder(e.getPlayer().getName());
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
    if(MenuClass.isHolder(e.getPlayer().getName)) {
        e.setCancelled(true);
        if(e.getClickedSlot() == 4) {
            Bukkit.broadcastMessage("It works!");
        }
    }
    else if(MenuClass2.isHolder(e.getPlayer().getName)) {
        e.setCancelled(true);
        if(e.getClickedSlot() == 6) {
            e.getPlayer().sendMessage("Привет");
        }
    }
}

А ещё лучше - используйте
 
Последнее редактирование:
Назад
Сверху Снизу