Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Регистрация событий в bukkit 1.2.2-r0.1

Тема в разделе "[Архив] Помощь", создана пользователем DPOH-VAR, 2 мар 2012.

  1. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Помогите, кто знает как регистрировать события в новой версии буккита?
    Собственно, вот что требуется для регистрации события:
    void org.bukkit.plugin.PluginManager.registerEvent(Class<? extends Event> arg0, Listener arg1, EventPriority arg2, EventExecutor arg3, Plugin arg4)

    Не могу понять, откуда брать Listener и EventExecutor.
    Достаточно будет одного рабочего примера.
     
  2. Хостинг MineCraft
    <
  3. Nikk97

    Nikk97 Активный участник

    Баллы:
    63
    Я сам не понимаю. У меня та же проблема. В 1.0.0 было по другому.....

    Если можно, дайте пример на BlockBreakEvent (org.bukkit.event.block.BlockBreakEvent)
     
  4. acdev

    acdev Активный участник

    Баллы:
    68
    Имя в Minecraft:
    myacdev
    А теперь новое API только можно юзать.
    На сайте wiki.bukkit.org есть примеры в описании нового API.
     
  5. Nikk97

    Nikk97 Активный участник

    Баллы:
    63
    I-Am-Black-Overlord, Сникерсни и DPOH-VAR нравится это.
  6. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Еще добавлю, что функции в классе-слушателе можно называть как угодно. Главное не забыть аннотацию. И в одном классе можем ставить сколько угодно функций, даже с одинаковыми евентами. Только придется быть внимательнее с event.setCancelled(..)
    @EventHandler
    public void onPlayerLoginBlablalba(PlayerLoginEvent event) {
    // Your code here...
    }
    Регистрация событий такого вида совместима с более ранними версиями (проверял на R2)
    @Nikk97, спасибо за ссылку!
     
  7. Nikk97

    Nikk97 Активный участник

    Баллы:
    63
    @DPOH-VAR, дай плиз готовый пример, а то не получается всеровно чтото... .

    В регистрации листенера чтото не то.
     
  8. acdev

    acdev Активный участник

    Баллы:
    68
    Имя в Minecraft:
    myacdev
  9. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    //---------Главный класс, в функции onload:

    PluginManager pm = getServer().getPluginManager();
    pm.registerEvents(new ListenerPlugin(this),this);

    //-----------В классе listenerPlugin

    public class ListenerPlugin implements Listener{
    public static ТвойПлагин plugin;

    public ListenerPlugin( ТвойПлагин p) {
    plugin = p;
    }

    @EventHandler
    public void breakTheBlock(BlockBreakEvent event){
    // плеер сломал блок
    }

    }
     
    Nikk97 нравится это.
  10. Nikk97

    Nikk97 Активный участник

    Баллы:
    63
    спс огромное. С меня+
     
  11. Nikk97

    Nikk97 Активный участник

    Баллы:
    63
    Слуш, а оно всеровно не в какую.

    1) Я добавил в Онлоад то что ты дал и у меня получилось


    2) Потом создал класс ListenerPlugin где в поле SuperClass указал
    и у меня получилось

    где по идее если игрок сломал блок то у него остается 1 хп и его лвл стает 99
     
  12. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Ошибка тут:
    @EventHandler
    public void breakTheBlock(BlockBreakEvent event, Player player){
    player.setHealth(1);
    player.setLevel(99);
    }

    Как нужно:
    public void breakTheBlock(BlockBreakEvent event){
    Player player = event.getPlayer(); // вроде так. Подробности смотри в АРI
    player.setHealth(1);
    player.setLevel(99);
    }
    Функция должна быть с одним аргументом, и обязательно аргумент instanceof Event


    UPD: убери onLoad, засунь все в onEnable
     
  13. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Еще совет: если не можешь юзать стандартный дебаггер, добавь в майнкласс
    Код:
    public static theplug plugin;
     
    public static void debug(String s) {
            getServer().broadcastMessage(s);
    }
    В оненейбл
    Код:
    theplug.plugin = this
    Потом в любом месте
    Код:
    theplug.debug("Проверка исполнения");
    Чтобы точно знать, выполняется ли участок кода
    UPD: Имена классов обычно пишутся с большой буквы. Иначе можно запутаться
     
    Сникерсни нравится это.
  14. Nikk97

    Nikk97 Активный участник

    Баллы:
    63
    Спасибо огромное) Всё работает.

    Я в джаве пока что нуб, но если нужно плагин для САМП или игру на Опен ГЛ обращайся)
     
  15. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    пишу на яве полтора месяца xD
    Имхо проще явы только batch
     
    Nikk97 нравится это.

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