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

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

Статус
Закрыто для дальнейших ответов.

Морпеч крч

Активный участник
Пользователь
Баллы
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 );
            }
        }

    }
 
Последнее редактирование:
?

переделал, кастанул, не вышло

ругается на "if(ev.getEntity() instanceof Egg){"
Без ошибки и кода сказать почему не могу, ванга разрядилась да и денег счету нет...
Но скажу что использовать instanceof - плохой тон
 
Без ошибки и кода сказать почему не могу, ванга разрядилась да и денег счету нет...
Но скажу что использовать instanceof - плохой тон
Я решил проблему. Объявляю переменную игрока в начале класса:
Код:
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);
              
          
        }
  
    }
 
Почему все начинает выходить, когда я задаю вопрос на РБ

ок :D
я восстановлю права яиц и заглавных букв..
Код:
public void projhtev(ProjectileHitEvent ev)

Дам пару советов
Как бы вы не пытались - вы не придумаете названия понятнее чем названию евента добавить приставку on
Пример:
public void onProjectileHit(ProjectileHitEvent event)
Методы пишутся с маленькой буквы, но каждое слово выделяется заглавной для повышения читабельности.
Выходить.. Ну, может мало пытаетесь или мало гуглите.. Вам виднее)
И да, напомню что код у вас может быть любой длинны и за символы мы пока не платим, так что не бойтесь давать всему длинные, но понятные названия
Берите пример с разработчиков BukkitAPI и их EntityDamageByEntityEvent :D
 
Дам пару советов
Как бы вы не пытались - вы не придумаете названия понятнее чем названию евента добавить приставку on
Пример:
public void onProjectileHit(ProjectileHitEvent event)
Методы пишутся с маленькой буквы, но каждое слово выделяется заглавной для повышения читабельности.
Выходить.. Ну, может мало пытаетесь или мало гуглите.. Вам виднее)
И да, напомню что код у вас может быть любой длинны и за символы мы пока не платим, так что не бойтесь давать всему длинные, но понятные названия
Берите пример с разработчиков BukkitAPI и их EntityDamageByEntityEvent :D
Спасибо за советы)
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх