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

Помогите Помогите разработать плагин чата!!!

RYORUS

Активный участник
Пользователь
Баллы
68
Короче мне нужно разработать плагин чата:cool: , ну, или разжуйте мне пошагово вот этот урок:rolleyes: потому что я непонимаю как сделать вот это::(
Создаем новый класс и делаем его потомком класса PlayerListener. Теперь добовляем в него метод onPlayerChat. Не трудно догадаться, что это и есть тот самый обработчик событий чата.
Заранее спасибо!!!:)
 
Кста я хочу его выкинуть на BukkitDev и там вас в авторах укажу... Я понимаю что для вот таких ------>:cool: профессионалов это никакой славы не принесет... Но все-таки...
 
После названия класса пропиши "extends PlayerListener"
А вообще в оригинал коде есть всё
 
Пример устарел, сейчас обработчики событий пишутся немного иначе.

Частично переведенный туторил: http://wiki.bukkit.org/Introduction_to_the_New_Event_System/ru

Если в двух словах и по-проще.
Создаете класс, который включает все обработчики (можно вообще ВСЕ, но если их много, то я разбиваю для удобства):

Цитирую из исходников MonsterFix'а:

Код:
public class MyPluginListener implements Listener {
 
///////////////////////
 
    @EventHandler(priority=EventPriority.NORMAL)
    public void onPlayerChatEvent (PlayerChatEvent event){
        Player p = event.getPlayer();
 
        String msg = event.getMessage(); 
 
// делаем с переменной msg все что хотим
 
            event.setMessage(msg);
 
        }
    }
 
///////////////////////
 
}


В основном классе пишем:

создаем объект
MyPluginListener mpl = new MyPluginListener();

В обработчике onEnable регистрируем наш объек:

Код:
        PluginManager pm = this.getServer().getPluginManager();
        pm.registerEvents(mpl, this);

Собственно все.
 
Да, чуть не забыл. Возьмите за правило ;)
В первой строке обработчика проверять не отменил ли кто событие. Если отменил - ничего не делать ;)

Код:
public class MyPluginListener implements Listener {
 
///////////////////////
 
    @EventHandler(priority=EventPriority.NORMAL)
    public void onPlayerChatEvent (PlayerChatEvent event){
        [B]if (event.isCancelled()) return;[/B]
 
 
        Player p = event.getPlayer();
 
        String msg = event.getMessage();
 
// делаем с переменной msg все что хотим
 
            event.setMessage(msg);
 
        }
    }
 
///////////////////////
 
}
 
Да, чуть не забыл. Возьмите за правило ;)
В первой строке обработчика проверять не отменил ли кто событие. Если отменил - ничего не делать ;)

Код:
public class MyPluginListener implements Listener {
 
///////////////////////
 
    @EventHandler(priority=EventPriority.NORMAL)
    public void onPlayerChatEvent (PlayerChatEvent event){
        [B]if (event.isCancelled()) return;[/B]
 
 
        Player p = event.getPlayer();
 
        String msg = event.getMessage();
 
// делаем с переменной msg все что хотим
 
            event.setMessage(msg);
 
        }
    }
 
///////////////////////
 
}
Спасибо!;)
 
В первой строке обработчика проверять не отменил ли кто событие. Если отменил - ничего не делать ;)
Код:
if (event.isCancelled()) return;
Кстати о птичках, чем отличается этот подход и annotation вида
Код:
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
?..
 
Кстати, да. Такой вариант даже предпочтительнее в большинстве случаев: обработчик с таким ключом в принципе не будет вызван, если событие уже отменено.
Только тут один нюанс. Событие с приоритетом LOWEST вызывается раньше чем NORMAL - т.е. если моё событие с приоритетом LOW отменит его, то NORMAL об этом "узнает", а LOWEST - нет.

Поэтому чтобы точно отловить, можно наоборот повышать приоритет.

Поэтому проверять if (event.isCacelled()) нужно если есть необходимость что-либо выполнять даже если событие отменено.

P.S. Всё мысль заработала: пойду добавлять "ignoreCancelled = true" в некоторые обработчики MonsterFix ;)
 

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

Назад
Верх