Помогите Event'ы

  • Автор темы Автор темы Rfg0
  • Дата начала Дата начала

Rfg0

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Rfg0
Проблема такая, да я знаю что такое уже было решено и таких тем много. Но у меня странный случай. Делаю два плагины(так для теста).
Первый плагин. Если в конфиге стоит true, то тогда мотд меняется на Идут технические работы!, а если нет, то нечего не меняется. Вот эвент-
Java:
    @EventHandler(priority = EventPriority.LOWEST)
   public void onServerListPing(ServerListPingEvent e){
       if(trueorfalse == true){
            e.setMotd("\u00A74Идут технические работы!");
       }else{
           return;
       }
   }
Второй плагин на MOTD.
Вот event -
Java:
     @EventHandler(priority = EventPriority.HIGHEST)
     public void onPing(ServerListPingEvent event)
     {
       List<String> config = this.config.getStringList("systemmotd");
       Integer a = Integer.valueOf(new Random().nextInt(config.size()));
       String motd = ((String)config.get(a.intValue()));
       String s = this.replsys(motd);
       event.setMotd(s);
     }

Первому event'у я поставил приоритет LOWEST значит конечный мотд поставит он, а второй приоритет HIGHEST значит он будет первым. НО даже когда идут тех. работы 2 плагин умудряется поставить свой motd. Перебирал все приоритеты ставил ignorecancelled. Не в какую.
Но тут я как-то случайно экспортировал сначала мотд потом тех. работы. И всё заработало. Потом попробовал наоборот таже фигня(плагин мотд перебивает тех. работы) . Остаётся вопрос: "Что за ухня?"
 
Последнее редактирование:
Проблема такая, да я знаю что такое уже было решено и таких тем много. Но у меня странный случай. Делаю два плагины(так для теста).
Первый плагин работает как whitelist. Если у игрока есть право и конфиг содержит его ник, то его пускает на сервер, когда идут тех. работы, а если какой-то пункт не совпадает, то его кикает. Вот эвент-
Java:
    @EventHandler(priority = EventPriority.LOWEST)
    public void onPlayerJoin(PlayerJoinEvent e){
        if(trueorfalse == true){
        if(e.getPlayer().hasPermission("tw.join") && players.contains(e.getPlayer().getName())){
            e.getPlayer().sendMessage(this.prefix + "Добро пожаловать на тех.работы!");
            return;
        }
        else{
            e.getPlayer().kickPlayer("§b" + e.getPlayer().getDisplayName() + ", §4Идут технические работы!");
            cs.sendMessage("§b" + e.getPlayer().getDisplayName() + " tried to connect to server!");
            return;
        }
    }else{
        return;
    }
    }
Второй плагин на MOTD.
Вот event -
Java:
     @EventHandler(priority = EventPriority.HIGHEST)
     public void onPing(ServerListPingEvent event)
     {
       List<String> config = this.config.getStringList("systemmotd");
       Integer a = Integer.valueOf(new Random().nextInt(config.size()));
       String motd = ((String)config.get(a.intValue()));
       String s = this.replsys(motd);
       event.setMotd(s);
     }

Первому event'у я поставил приоритет LOWEST значит конечный мотд поставит он, а второй приоритет HIGHEST значит он будет первым. НО даже когда идут тех. работы 2 плагин умудряется поставить свой motd. Перебирал все приоритеты ставил ignorecancelled. Не в какую.
Но тут я как-то случайно экспортировал сначала мотд потом тех. работы. И всё заработало. Потом попробовал наоборот таже фигня(плагин мотд перебивает тех. работы) . Остаётся вопрос: "Что за ухня?"
Ты случаем не используешь одинаковые пакеты? Ну типо во всех твоих плагинах: ru.rfg0.Main?
Если да, то используй ru.rfg0.pluginname.Main. А так они не должны друг друга перебивать, т.к евенты разные.
И почемубы не использовать PlayerLoginEvent?

Java:
    @EventHandler
    public void onJoin(final PlayerLoginEvent v) {
        if (v.getResult() == PlayerLoginEvent.Result.KICK_WHITELIST) {
            if(!e.getPlayer().hasPermission("tw.join") && !players.contains(e.getPlayer().getName())){ 
                    v.setKickMessage("§b" + v.getPlayer().getDisplayName() + ", §4Идут технические работы!");
                    return;
                }
                    v.allow();
        }
    }
 
>>
Java:
if(trueorfalse) { // если false - то в начало ставьте !
Ты случаем не используешь одинаковые пакеты? Ну типо во всех твоих плагинах: ru.rfg0.Main?
Если да, то используй ru.rfg0.pluginname.Main. А так они не должны друг друга перебивать, т.к евенты разные.
И почемубы не использовать PlayerLoginEvent?

Java:
    @EventHandler
    public void onJoin(final PlayerLoginEvent v) {
        if (v.getResult() == PlayerLoginEvent.Result.KICK_WHITELIST) {
            if(!e.getPlayer().hasPermission("tw.join") && !players.contains(e.getPlayer().getName())){
                    v.setKickMessage("§b" + v.getPlayer().getDisplayName() + ", §4Идут технические работы!");
                    return;
                }
                    v.allow();
        }
    }
me.rfg0.motd и me.rfg0.tw И ещё. ТУПАНУЛ НЕ ТУТ EVENT СКИНУЛ!!!! Вот тот -
Java:
    @EventHandler(priority = EventPriority.LOWEST)
    public void onServerListPing(ServerListPingEvent e){
        if(trueorfalse == true){
            e.setMotd("\u00A74Идут технические работы!");
        }else{
            return;
        }
    }
 
Первому event'у я поставил приоритет LOWEST значит конечный мотд поставит он, а второй приоритет HIGHEST значит он будет первым.
Наоборот. lowest поставит первым, highest - вторым.
 
me.rfg0.motd и me.rfg0.tw И ещё. ТУПАНУЛ НЕ ТУТ EVENT СКИНУЛ!!!! Вот тот -
Java:
    @EventHandler(priority = EventPriority.LOWEST)
    public void onServerListPing(ServerListPingEvent e){
        if(trueorfalse == true){
            e.setMotd("\u00A74Идут технические работы!");
        }else{
            return;
        }
    }
так если эти два плагина делают похожие действия, то почемубы их не объединить?
И почему бы вместо return; не поставить тот код, на установку мотд?
 
Кстати, не вижу в первом куске "кода" строки, который бы изменял motd.
 
так если эти два плагина делают похожие действия, то почемубы их не объединить?
И почему бы вместо return; не поставить тот код, на установку мотд?
Да, так разумнее. Но мне нужны именно два плагина.
 
Кстати, не вижу в первом куске "кода" строки, который бы изменял motd.
Код (Java):
  1. @EventHandler(priority = EventPriority.LOWEST)
  2. public void onPlayerJoin(PlayerJoinEvent e){
  3. if(trueorfalse == true){
  4. if(e.getPlayer().hasPermission("tw.join") && players.contains(e.getPlayer().getName())){
  5. e.getPlayer().sendMessage(this.prefix + "Добро пожаловать на тех.работы!");
  6. return;
  7. }
  8. else{
  9. e.getPlayer().kickPlayer("§b" + e.getPlayer().getDisplayName() + ", §4Идут технические работы!");
  10. cs.sendMessage("§b" + e.getPlayer().getDisplayName() + " tried to connect to server!");
  11. return;
  12. }
  13. }else{
  14. return;
  15. }
  16. }
Если ты про это, то говорю же, ошибся. Ниже тот event.
 
Если ты про это, то говорю же, ошибся. Ниже тот event.
Берёшь и обновляешь шапку.

А вообще если есть плагин на Motd, то устанавливать motd лучше им. Пилишь новый эвент на установку motd, первым плагином слушаешь его и устанавливаешь свой.
 
Проблема такая, да я знаю что такое уже было решено и таких тем много. Но у меня странный случай. Делаю два плагины(так для теста).
Первый плагин. Если в конфиге стоит true, то тогда мотд меняется на Идут технические работы!, а если нет, то нечего не меняется. Вот эвент-
Java:
    @EventHandler(priority = EventPriority.LOWEST)
   public void onServerListPing(ServerListPingEvent e){
       if(trueorfalse == true){
            e.setMotd("\u00A74Идут технические работы!");
       }else{
           return;
       }
   }
Второй плагин на MOTD.
Вот event -
Java:
     @EventHandler(priority = EventPriority.HIGHEST)
     public void onPing(ServerListPingEvent event)
     {
       List<String> config = this.config.getStringList("systemmotd");
       Integer a = Integer.valueOf(new Random().nextInt(config.size()));
       String motd = ((String)config.get(a.intValue()));
       String s = this.replsys(motd);
       event.setMotd(s);
     }

Первому event'у я поставил приоритет LOWEST значит конечный мотд поставит он, а второй приоритет HIGHEST значит он будет первым. НО даже когда идут тех. работы 2 плагин умудряется поставить свой motd. Перебирал все приоритеты ставил ignorecancelled. Не в какую.
Но тут я как-то случайно экспортировал сначала мотд потом тех. работы. И всё заработало. Потом попробовал наоборот таже фигня(плагин мотд перебивает тех. работы) . Остаётся вопрос: "Что за ухня?"
поидее нужно поменять местами приоритеты.
 
Берёшь и обновляешь шапку.

А вообще если есть плагин на Motd, то устанавливать motd лучше им. Пилишь новый эвент на установку motd, первым плагином слушаешь его и устанавливаешь свой.
А проблема то в чем? Мне нужно именно два плагна .
поидее нужно поменять местами приоритеты.
Мысль в голову пришла, поменял местами таже фигня.

Меня тревожит, что "выигрывает" плагин, которые самый последний был изменён(экспортирован)
 
В том, что кто то не может в очерёдность действий.
А ты можешь? Если можешь, подскажи пожалуйста!
Меня тревожит, что "выигрывает" плагин, которые самый последний был изменён(экспортирован)
В том, что кто то не может в очерёдность действий.
А ещё, какая тут может быть очерёдность действия?
up!
 
Актуально?
 
if(trueorfalse ==true){
Нравится обсуфикация))
 
А ты можешь? Если можешь, подскажи пожалуйста!


А ещё, какая тут может быть очерёдность действия?
up!
Дело в том, что Highest как бы перебивает настройки Lowest.
У вас получается, что сначала срабатывает Lowest, а потом Highest, и все настройки остаются за последним. Всё что могу посоветовать - поменять приоритеты у событий наоборот и посмотреть что выйдет.
 
Назад
Верх