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

[Решено]Как достать игрока из события ProjectileHitEvent ?

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    _Morpech_
    Всем привет, дорогие девелоперы)
    Я долго лазил на просторах гугла, но так и не нашел точной информации, которая даст ответ на выше заданный мой вопрос или же я их не правильно использовал. Вообщем, я собираюсь сделать так, чтобы игрок ,который кинет яйцо, получил своё яйцо обратно через 15(300 t) секунд, но я не знаю, как получить игрока из этого события. Что не так в коде? Консоль ругается на строку "if(ev.getEntity().getShooter() instanceof Player)"

    буду надеяться на ответ, спасибо за прочтение. Код:
    Код:
    @EventHandler
        public void Egg(ProjectileHitEvent ev){
        
            Projectile proj = ev.getEntity();
            if(ev.getEntity() instanceof Egg){
                Egg egg = (Egg) proj;
                if(egg.getShooter() instanceof Player){
                    Player p = (Player) egg.getShooter();
                    final Location loc = new Location (egg.getLocation().getWorld(), egg.getLocation().getX(), egg.getLocation().getY()+1, egg.getLocation().getZ());
                
                    task = this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
                    
                        public void run(){
                            ParticleEffect.LARGE_SMOKE.display(1, 1, 1, 0.05F, 50, loc, 50.00);
                           lof++;
                           if (lof>300){
                        
                            Bukkit.getScheduler().cancelTask(task);
                           }     
                        
                       }
                    },0L, 1L);
    p.getInventory().addItem( olo );
                }
            }
    
        }
    
     
    Последнее редактирование: 15 ноя 2014
  2. Хостинг MineCraft
    <
  3. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    ev.getEntity().getShooter()?
     
  4. Автор темы
    Морпеч крч

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

    Баллы:
    66
    Имя в Minecraft:
    _Morpech_
    ?[DOUBLEPOST=1416011571,1416011508][/DOUBLEPOST]
    переделал, кастанул, не вышло[DOUBLEPOST=1416011603][/DOUBLEPOST]
    ругается на "if(ev.getEntity() instanceof Egg){"
     
  5. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Без ошибки и кода сказать почему не могу, ванга разрядилась да и денег счету нет...
    Но скажу что использовать instanceof - плохой тон
     
  6. Автор темы
    Морпеч крч

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

    Баллы:
    66
    Имя в Minecraft:
    _Morpech_
    Я решил проблему. Объявляю переменную игрока в начале класса:
    Код:
    public class mainClass extends JavaPlugin implements Listener
    {
        public Player poi;
    
    И добавляю PlayerInteractEvent, при этом изменив немного событие ProjectileHitEvent:
    Код:
    @EventHandler
        public void onInteract2(final PlayerInteractEvent ehg) {
            if (ehg.getItem() == null) return;
            if (ehg.getAction() == Action.RIGHT_CLICK_AIR | ehg.getAction() == Action.RIGHT_CLICK_BLOCK ){
                final ItemStack tyu = new ItemStack(Material.EGG);
                final ItemMeta meta = tyu.getItemMeta();
                meta.setDisplayName(ChatColor.GOLD+"Smoke");
                tyu.setItemMeta(meta);
                if (ehg.getItem().getType().equals(Material.EGG)) {
                    poi = ehg.getPlayer();
                  
                    final ItemStack ghj = new ItemStack(Material.EGG);
                    final ItemMeta meta4 = ghj.getItemMeta();
                    meta4.setDisplayName(ChatColor.GOLD+"Smoke");
                    ghj.setItemMeta(meta4);
                    poi.getInventory().removeItem( ghj );
                  
                    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
    
                        @Override
                        public void run() {
                            poi.sendMessage(ChatColor.GREEN+"Ваше умение будет возвращенно через: "+ChatColor.RED+"1 minutes");
                          
                        }
                      
                    }, 300L);
                    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
    
                        @Override
                        public void run() {
                            poi.getInventory().addItem(ghj);
                          
                        }
                      
                    }, 1500L);
            }
        }
            }
      
        @EventHandler
        public void Egg(ProjectileHitEvent ev){
            if(ev.getEntity() instanceof Egg){
                final Egg e = (Egg)ev.getEntity();
                final Location loc = new Location (e.getLocation().getWorld(), e.getLocation().getX(), e.getLocation().getY()+1, e.getLocation().getZ());
                    task = this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
                      
                        public void run(){
                            ParticleEffect.LARGE_SMOKE.display(1, 1, 1, 0.05F, 50, loc, 50.00);
                           lof++;
                           if (lof>300){
                          
                            Bukkit.getScheduler().cancelTask(task);
                           }       
                          
                       }
                    },0L, 1L);
                  
              
            }
      
        }
    
     
  7. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
  8. Автор темы
    Морпеч крч

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

    Баллы:
    66
    Имя в Minecraft:
    _Morpech_
  9. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Дам пару советов
    Как бы вы не пытались - вы не придумаете названия понятнее чем названию евента добавить приставку on
    Пример:
    public void onProjectileHit(ProjectileHitEvent event)
    Методы пишутся с маленькой буквы, но каждое слово выделяется заглавной для повышения читабельности.
    Выходить.. Ну, может мало пытаетесь или мало гуглите.. Вам виднее)[DOUBLEPOST=1416014580,1416014468][/DOUBLEPOST]И да, напомню что код у вас может быть любой длинны и за символы мы пока не платим, так что не бойтесь давать всему длинные, но понятные названия
    Берите пример с разработчиков BukkitAPI и их EntityDamageByEntityEvent :D
     
  10. Автор темы
    Морпеч крч

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

    Баллы:
    66
    Имя в Minecraft:
    _Morpech_
    Спасибо за советы)
     
Статус темы:
Закрыта.

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