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

Помогите Эвент в таймере

Тема в разделе "Разработка плагинов для новичков", создана пользователем GodlikE, 4 июн 2014.

Статус темы:
Закрыта.
  1. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    Всем привет=) Я создал плагин, который создает взрывы в месте падения яйца (основан на эвенте ProjectileHitEvent), и хочу, чтобы он работал несколько секунд, когда игрок написал команду, допустим, /egon. Я создал таймер, как полагается, но не знаю, как затолкать туда ProjectileHitEvent. Помогите пожалуйста, кому не сложно, желательно на примере кода=)
    P.S. Мой код ниже.
    Код:
    public class MainClass extends JavaPlugin implements Listener{
            private int sec = 20;
            Location loc;
            public void onEnable()
        {
            getLogger().info("EggGrenade was enabled");
            Bukkit.getPluginManager().registerEvents(this, this);
        }
        @EventHandler
        public void onProjectileHit(ProjectileHitEvent e)
        {
          
            if(e.getEntity().getType() == EntityType.EGG)
            {
                e.getEntity().getWorld().createExplosion(e.getEntity().getLocation(), 4F, true);
                loc = e.getEntity().getLocation();
            }
          
        }
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
        {
            if (sender instanceof Player)
            {
                Player player = (Player) sender;
                if(cmd.getName().equalsIgnoreCase("egon")){
                BukkitRunnable runnable = new BukkitRunnable() {
                    @Override
                    public void run()
                    {
                    if (sec >= 0)
                            {
                        sec -= 1;
                            }
                    else
                        cancel();
                        }
                    }
                ;
                runnable.runTaskTimer(this, 1L, 20L);
                
                }
            }
            return true;
        }  
      
        public void onDisable()
        {
            getLogger().info("EggGrenade was disabled");
        }  
      
    }
     
    Лайка3, Лайка2 и mahimamax нравится это.
  2. Хостинг MineCraft
    <
  3. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Как эвент может работать несколько секунд? Изъясняйтесь, пожалуйста, так, чтобы мы хотя бы поняли, что от нас надо.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  4. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Создаете обработчик ивента с проверкой флага, перед запуском таймера включаете, в конце выключаете.
     
    Лайка3, Лайка2, mahimamax и 3 другим нравится это.
  5. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    Напишите кодом пожалуйста, а дальше я разберусь))[DOUBLEPOST=1401887694,1401887556][/DOUBLEPOST]
    Не эвент работал несколько секунд, а плагин)
     
    Лайка3, Лайка2 и mahimamax нравится это.
  6. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Чтобы яйцо полетело, его естественно нужно запустить. Так как вы это делаете через время, а не по действию игрока, то запускать надо самостоятельно. Для этого есть метод launchProjectile. Когда оно упадёт, вызовется ваш уже обрабатываемый эвент. Ну и возможно придётся ещё отслеживать ProjectileLaunchEvent, чтобы задать траекторию полёта, если при запуске сила броска не задастся сама.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  7. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Я понял так, что после введения команды, если игрок кидает яйцо в какой-то отрезок времени, то что-то происходит.
     
    Последнее редактирование: 4 июн 2014
  8. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну вот так вот человек описал задачу, что каждый понимает по своему.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  9. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    Мне нужно, чтобы плагин работал в таком порядке:
    1) Игрок пишет комманду /egon
    2) Таймер начинает работать
    3) Пока таймер работает, игрок может кинуть яйцо и оно взорвется
    4) таймер прекращает работать
    5) если игрок кинет яйцо, оно не взорвется
    Ну вот как-то так=) Вроде разъяснил понятно=)
     
    ПриветОтЛайки, Лайка3 и mahimamax нравится это.
  10. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Как я и думал. См. пост выше.
     
  11. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    подскажи пожалуйста кодом, как создать обработчик ивента с проверкой флага)) Буду очень благодарен)
     
    Последнее редактирование: 5 июн 2014
    Лайка3 и mahimamax нравится это.
  12. Gentalion

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

    Баллы:
    93
    Имя в Minecraft:
    Gentalion
    Не легче ли просто сделать cooldown способности "взрывающееся яйцо"?
     
  13. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    Всмысле?=)
     
    Лайка3, Javascript и mahimamax нравится это.
  14. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Зачем вам таймер?
     
    Лайка3 и mahimamax нравится это.
  15. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    Я понял вашу мысль, но не понял, как это реализовать=) (как "посмотреть на часы"?)
    Даже если я смогу посмотреть на часы, то как мне отмерить нужное время?=) Нужно ведь знать, в каком формате пишется время=)[DOUBLEPOST=1402045873,1402044620][/DOUBLEPOST]Все сводится к тому, что нужно найти метод отмены ловли события. Подскажите, есть ли такой?=)
    Как перестать ловить событие?=)
     
    Последнее редактирование: 6 июн 2014
  16. Gentalion

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

    Баллы:
    93
    Имя в Minecraft:
    Gentalion
    Просто создай дополнительное условие и проверяй его. Если A - тогда делать что-то, если B - тогда ничего не делать (игнорировать событие). Я думаю лучше всего выбрать тип переменной boolean, тогда соответственно A - true, а B - false.

    P.S. Под условием я подразумеваю какую-то переменную, значение которой мы и будет проверять с помощью if[DOUBLEPOST=1402047154][/DOUBLEPOST]Пожалуй тебе ещё подойдёт вариант записи (текущего времени + времени на бросок яйца) в long, тогда при вызове соответственного эвента сравнивай записанное время с текущим. Если первое больше, тогда делай что-то, а если больше второе - ничего не делай.
     
    Лайка3, Mr_RoboMan, mahimamax и 2 другим нравится это.
  17. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    С таймером я вроде разобрался, но как это все привязать к комманде?=) У меня получается либо есть ивент внутри цикла таймера на 20 сек, но без комманды, либо есть комманда и таймер на 20 сек, но без ивента=)
    P.S. Если не затруднит, покажи кодом плиз=)[DOUBLEPOST=1402130915,1402130214][/DOUBLEPOST]Блин, вопрос, конечно, глупый, но почему он ругается на If?=)
    Код:
    if (eggs == 0)
            {
                @EventHandler
                public void onProjectileHit(ProjectileHitEvent e)
                {
                   
                    if(e.getEntity().getType() == EntityType.EGG)
                    {
                        e.getEntity().getWorld().createExplosion(e.getEntity().getLocation(), 4F, true);
                        loc = e.getEntity().getLocation();
                       
                    }
                   
                }
            }
            else
        }
     
    Лайка3, Mr_RoboMan и mahimamax нравится это.
  18. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вы этот бред пишете от безысходности, потому что никто не хочет писать за вас?
    Выучите наконец основы языка, а потом разработки плагинов
     
    Лайка3, Mr_RoboMan, Кувырок и 2 другим нравится это.
  19. Автор темы
    GodlikE

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

    Баллы:
    103
    Имя в Minecraft:
    GodlikE
    Все, я разобрался, спасибо всем, кто подсказывал=) Gentalion, огромное спасибо за идею №1=)
     
    Лайка3, Mr_RoboMan, Кувырок и ещё 1-му нравится это.
Статус темы:
Закрыта.

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