1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем RYORUS, 18 май 2012.

  1. Автор темы
    RYORUS

    RYORUS Активный участник Пользователь

    Баллы:
    68
    Короче мне нужно разработать плагин чата:cool: , ну, или разжуйте мне пошагово вот этот урок:rolleyes: потому что я непонимаю как сделать вот это::(
    Заранее спасибо!!!:)
     
    Сникерсни нравится это.
  2. Автор темы
    RYORUS

    RYORUS Активный участник Пользователь

    Баллы:
    68
    Кста я хочу его выкинуть на BukkitDev и там вас в авторах укажу... Я понимаю что для вот таких ------>:cool: профессионалов это никакой славы не принесет... Но все-таки...
     
  3. DaleMartinWatson

    DaleMartinWatson Старожил Девелопер Пользователь

    Баллы:
    103
    Зачем изобретать велосипед?
    И как обстоят дела с java?
     
  4. Автор темы
    RYORUS

    RYORUS Активный участник Пользователь

    Баллы:
    68
    Ну пока-что учусь и набираюсь опыта вот таким плагинами типа чата...
     
  5. mayor123

    mayor123 Старожил Девелопер Пользователь

    Баллы:
    173
    После названия класса пропиши "extends PlayerListener"
    А вообще в оригинал коде есть всё
     
    Сникерсни нравится это.
  6. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Пример устарел, сейчас обработчики событий пишутся немного иначе.

    Частично переведенный туторил: 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);
    
    Собственно все.
     
    vanchezzz, jkl1234 и Flints нравится это.
  7. fromgate

    fromgate Старожил Пользователь

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

    Код:
    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);
     
            }
        }
     
    ///////////////////////
     
    }
     
    Flints нравится это.
  8. Автор темы
    RYORUS

    RYORUS Активный участник Пользователь

    Баллы:
    68
    Спасибо!;)
     
  9. Toxuin

    Toxuin Старожил Девелопер Пользователь

    Баллы:
    103
    Кстати о птичках, чем отличается этот подход и annotation вида
    Код:
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
    ?..
     
  10. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Кстати, да. Такой вариант даже предпочтительнее в большинстве случаев: обработчик с таким ключом в принципе не будет вызван, если событие уже отменено.
    Только тут один нюанс. Событие с приоритетом LOWEST вызывается раньше чем NORMAL - т.е. если моё событие с приоритетом LOW отменит его, то NORMAL об этом "узнает", а LOWEST - нет.

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

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

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

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