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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем CoolBoy, 25 фев 2016.

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

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Имею код:
    Код:
    @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: Знаете как реализовать это лучше? Напишите это здесь и обьясните как и почему это нужно делать именно так.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Окей, немного разобрался, но теперь возникла другая проблема - каким образом можно проиграть нужный мне саунд тому игроку, который сделал выстрел?
    На:
    Код:
    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).
     
    Последнее редактирование: 25 фев 2016
  4. Sonicxd2

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

    Баллы:
    76
    Мб так -
    1. Player player = (Player) a.getShooter();
    Должно вродь работать
     
  5. Sonicxd2

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

    Баллы:
    76
    player.playSound(location, Sound.BLAZE_DEATH,1,0);
     
  6. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Помоему при этом ивенте будет всегда звук проигрываться, а не когда попал в когото.
     
  7. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Нельзя использовать метод getDamager для ивента EntityShootBowEvent

    Eclipse: the method getDamager() is undefined for the type EntityShootBowEvent
     
  8. TarUbica

    TarUbica Ньюби

    Баллы:
    1
    Не по теме, но всё же, как убарть твою надпись, что сервер сделал slavik123123123?
     
  9. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
        @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);
                    }
                }
            }
        }
     
  10. TarUbica

    TarUbica Ньюби

    Баллы:
    1
    В твоей сборке.
     
  11. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Токо звук будет проигрываться всем игрокам которые рядом с игроком который выстрелил.
     
  12. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Сейчас проверю)[DOUBLEPOST=1456413824,1456413786][/DOUBLEPOST]
    Ок, тогда как проиграть звук только тому кто выстрелил?
     
  13. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    А я вот хз.
     
  14. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Спасибо, проверил, ваш код работает. Насчёт того слышат ли звук другие - не проверял, но позже и это выясню.

    Тему пока оставлю открытой.
     
  15. MrTrojan

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
     
  16. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Проблему со звуком решил. Чтобы проиграть звук только одному игроку нужно использовать Protocollib отправляя игроку пакет со звуком.

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

    Решено. Закрыто.
     
    Последнее редактирование: 24 апр 2016
Статус темы:
Закрыта.

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