Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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 не могут защитить пароли, если админ сервера захочет их просматривать с помощью другого плагина
 

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

Назад
Верх