Войти или зарегистрироваться

[Решено] Как получить ник игрока, который выстрелил из лука?

  • Автор темы Автор темы CoolBoy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

CoolBoy

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
Xezard
Имею код:
Код:
@EventHandler (priority = EventPriority.HIGHEST)
public void onShoot(EntityShootBowEvent e) {
  if (e.getProjectile().getType() == EntityType.ARROW) {
    Arrow a = (Arrow) e.getProjectile();
    if (e.getEntity() instanceof Player) {
      Location location = a.getLocation();
      Player shooter = тут я должен получить никнейм игрока который выстрелил из лука и попал в другого игрока
      Bukkit.getPlayer(shooter).getWorld().playSound(location, Sound.BLAZE_DEATH, 1, 0);
        }
     }
   }
}
Что мне нужно:
Когда один игрок попадает в другого игрока из лука - проигрывается звук смерти ифрита.
Каким образом можно получить никнейм того, кто стрелял, и возможно ли каким либо образом упростить данный код?

Очень прошу помидорами не кидаться. Я только учусь.:oops: Знаете как реализовать это лучше? Напишите это здесь и обьясните как и почему это нужно делать именно так.
 
a.getShooter()?
Если не то, посмотри в моём плагине Belavia, там должно быть именно это, или загугли "get arrow shooter bukkit"
 
a.getShooter()?
Если не то, посмотри в моём плагине Belavia, там должно быть именно это, или загугли "get arrow shooter bukkit"
Окей, немного разобрался, но теперь возникла другая проблема - каким образом можно проиграть нужный мне саунд тому игроку, который сделал выстрел?
На:
Код:
Bukkit.getPlayer(player).playSound(location, Sound.BLAZE_DEATH, 1, 0);
Отвечает - the method getPlayer(String) in the type Bukkit is not applicable for the arguments (Player).
 
Последнее редактирование:
Окей, немного разобрался, но теперь возникла другая проблема - каким образом можно проиграть нужный мне саунд тому игроку, который сделал выстрел?
На:
Код:
Bukkit.getPlayer(player).playSound(location, Sound.BLAZE_DEATH, 1, 0);
Отвечает - the method getPlayer(String) in the type Bukkit is not applicable for the arguments (Player).
player.playSound(location, Sound.BLAZE_DEATH,1,0);
 
Помоему при этом ивенте будет всегда звук проигрываться, а не когда попал в когото.
 
Java:
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent event){
        if(event.getEntity() instanceof Player && event.getDamager() instanceof Arrow){
            Player damaged = (Player) event.getEntity();
            Arrow arrow = (Arrow) event.getDamager();
            if (arrow.getShooter() instanceof Player) {
                if (damaged instanceof Player){
                    Player shooter = (Player) arrow.getShooter();
                    Location location = shooter.getLocation();
                    shooter.getWorld().playSound( location, Sound.BLAZE_DEATH, 1, 0);
                }
            }
        }
    }
 
Токо звук будет проигрываться всем игрокам которые рядом с игроком который выстрелил.
 
Java:
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent event){
        if(event.getEntity() instanceof Player && event.getDamager() instanceof Arrow){
            Player damaged = (Player) event.getEntity();
            Arrow arrow = (Arrow) event.getDamager();
            if (arrow.getShooter() instanceof Player) {
                if (damaged instanceof Player){
                    Player shooter = (Player) arrow.getShooter();
                    Location location = shooter.getLocation();
                    shooter.getWorld().playSound( location, Sound.BLAZE_DEATH, 1, 0);
                }
            }
        }
    }
Сейчас проверю)
Токо звук будет проигрываться всем игрокам которые рядом с игроком который выстрелил.
Ок, тогда как проиграть звук только тому кто выстрелил?
 
Проблему со звуком решил. Чтобы проиграть звук только одному игроку нужно использовать Protocollib отправляя игроку пакет со звуком.

UPD: нашёл путь легче, спасибо @Bars.
Всё просто, вместо player.getWorld().playSound(...) используйте player.playSound(...).

Решено. Закрыто.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх