Помогите Получение слушателем информации раньше других

Korvinius

Активный участник
Пользователь
Баллы
88
Приветствую самых умных людей сообщества!

Мне снова нужна ваша помощь, допустим есть у меня слушатель PlayerCommandPreprocessEvent, я хочу, чтобы он получал информацию о событии раньше любых других подобных слушателей, соответственно, ставлю ему приоритет @EventHandler(priority = EventPriority.LOWEST), это всё хорошо, но работает ровно до тех пор, пока у другого плагина не появится аналогичный слушатель с таким же приоритетом. И тут начинается рулетка, какой из плагинов с слушателем с таким же приоритетом загружен сервером раньше, тот слушатель и доберется до события раньше других. Попытка называть плагин согласно алфавита не помогает загрузиться раньше...

Вопросы:
  1. Как сделать так, чтобы мой слушатель получал информацию о событии раньше других?
  2. Или как заставить мой плагин загрузиться раньше других плагинов?
  3. Такое вообще возможно?
 
Обратиться к разработчику плагина, где тоже стоит LOWEST, и попросить повысить. Но шанс на успех мал. Но других вариантов в бакките нет.
Можешь перехватывать команды на уровне BungeeCord или Velocity - это будет раньше любых баккитовских плагинов
 
Я пишу общедоступный плагин, но не все владельцы серверов могут быть порядочными и некоторые могут захотеть украсть приватную информацию, а это нужно для того, чтобы предохраниться от возможных потенциальных плагинов-взломщиков, которые могут поставить себе такие админы, так что врятли обращение к кому-то неизвестному может быть успешным)
 
Я пишу общедоступный плагин, но не все владельцы серверов могут быть порядочными и некоторые могут захотеть украсть приватную информацию, а это нужно для того, чтобы предохраниться от возможных потенциальных плагинов-взломщиков, которые могут поставить себе такие админы, так что врятли обращение к кому-то неизвестному может быть успешным)
Ну если админ сервера захочет, то он украдёт в любом случае, чего бы ты не делал. Вариант с банжой актуален. Ещё можно на уровне пакетов производить необходимые действия. Но опять же, смысла в этом надо. Кому надо - украдёт
 
Кому надо - украдёт
ну как минимум попытаюсь организовать проверку отслеживаются ли команды на этом сервере и вывести сообщение игроку с предупреждением, что такие-то плагины пытаются отслеживать команды, чтобы игроки знали можно ли доверять этому серверу
 
ну как минимум попытаюсь организовать проверку отслеживаются ли команды на этом сервере и вывести сообщение игроку с предупреждением, что такие-то плагины пытаются отслеживать команды, чтобы игроки знали можно ли доверять этому серверу
Слежку никак не отследить от обычной работы плагина. Ты можешь получить все обработчики PlayerCommandPreprocessEvent с приоритетом LOWEST, но это не скажет ровным счётом ни о чём
 
Ты можешь получить все обработчики PlayerCommandPreprocessEvent с приоритетом LOWEST, но это не скажет ровным счётом ни о чём
да, я понимаю, но я могу вывести список этих плагинов игроку, а он уже сам пусть решает доверять или нет
 
да, я понимаю, но я могу вывести список этих плагинов игроку, а он уже сам пусть решает доверять или нет
Ну ок. В таком случае можно примерно так:
PHP:
for (RegisteredListener listener : PlayerCommandPreprocessEvent.getHandlerList().getRegisteredListeners()) {
    if (listener.getPriority() != EventPriority.LOWEST) continue;
    if (listener.getPlugin() == this.plugin) continue;
    this.plugin.getLogger().warning("Плагин " + listener.getPlugin().getName() + " может перехватывать"
        + " команды (класс " + listener.getListener().getClass().getName() + ")");
}
 
Как вариант перетасовать RegisteredListener в HandlerList как тебе нужно, с помощью рефлексии, может сработать
 
Не знаю будет ли это работать, но можно было бы хукнуть класс в котором вызывается наше событие по дефолту, и перед вызовом оригинального события, вызвать наше. Это только на уровне догадок, мне лень было проверять.
 
Не было времени на твой комент с кодом, если все ещё актуально, могу попробовать помочь
Не спасибо, уже не актуально, я понял что смысла нет, всё-равно на каждый костыль, найдётся другой, который его обойдёт, АПИ сервера так сделано, в нём не о безопасности совсем речь), там даже плагины авторизации типа Authme не могут защитить пароли, если админ сервера захочет их просматривать с помощью другого плагина
 
Назад
Верх