1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как сделать ивент когда игрок убивает другого игрока, и получить игрока - убийцу?

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

  1. Автор темы
    Sevare

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

    Баллы:
    61
    Помогите пожалуйста, как сделать ивент когда игрок убивает другого игрока, а потом получить убийцу?
     
  2. Автор темы
    Sevare

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

    Баллы:
    61
  3. alexandrage

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

    Баллы:
    173
    Ну все - выбрасывай.
     
  4. Den_Blade

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

    Баллы:
    66
    Имя в Minecraft:
    Den_Blade
    Код:
        @EventHandler
        public void onDeath(PlayerDeathEvent e) {
          Player killed = e.getEntity(); // Игрок, которого убили
          if (killed.getKiller() instanceof Player) {
            Player killer = killed.getKiller(); // Игрок, который убил
    }
    }
            }
     
  5. FailsHD

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

    Баллы:
    61
    Имя в Minecraft:
    Unknown
    Привет дружище, если ты ничего не понял то:

    @EventHandler//Метод
    Код:
    public void onDeaths(PlayerDeathEvent event) {
        //Далее переменная
        if (event.getEntity().getKiller() instanceof Player) { //Если киллер является игроком
            Player killer = event.getEntity().getKiller(); //Получаем киллера
            killer.sendTitle("ВЫ УБИЛИ ИГРОКА",null); //Отправляем титл при убийстве игрока киллеру
            killer.playSound(killer.getLocation(), Sound.ENTITY_PLAYER_DEATH,100,100); //Отправляем звук при убийстве килллеру
        }
    }
     
  6. MurlikMurlik

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

    Баллы:
    96
    Не зачем проверять на Player ибо метод Player#getKiller() возвращает всегда Player.
    А так же из-за того что он возвращает Player, он может вернуть null если убийц не было или может вовсе всегда показывать одного и того же убийцу игрока если игрок умирает из-за монстра.


    Самый лучший способ проверять убийцу, это через EntityDamageByEntityEvent получить того кто атакует и на кого, и вычислить, является ли финальный урон фатальным, а там уже делать то что нужно. (Но прежде чем проверять, надо убедиться что ивент не был отменен ранее)
     
  7. FailsHD

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

    Баллы:
    61
    Имя в Minecraft:
    Unknown
    Кодер ты мой умный, ты ведь знаешь что игрок может упасть со скалы, или его убьет скелет?
    Для этого и существует проверка.
     
  8. _MRDen3000YT_

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

    Баллы:
    76
    Нашелся умник, он вернет null если игрок упадет со скалы или его убьет скелет.
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/LivingEntity.html#getKiller()
     
  9. _MRDen3000YT_

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

    Баллы:
    76
    А с твоим кодом, если игрок упадет со скалы, то будет выбрасывать nullpointer потому, что killer = null.
     
  10. _MRDen3000YT_

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

    Баллы:
    76
    Код:
    public void onDeaths(PlayerDeathEvent event) {
        if (event.getEntity().getKiller() != null) {
            Player killer = event.getEntity().getKiller();
        }
    }
    Держи рабочий код.
     
  11. MurlikMurlik

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

    Баллы:
    96
    Метод LivingEntity#getKiller() всегда возвращает Player, о а каких скелетах идет речь? (Player реализует LivingEntity если что)

    Как я сказал в том же сообщении, если нужно проверять смерть игрока (и не только) по факту, да и еще узнать кто убийца, используйте EntityDamageByEntityEvent
     
  12. _MRDen3000YT_

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

    Баллы:
    76
    Костыль. Все уже реализовано в баките.
     
  13. MurlikMurlik

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

    Баллы:
    96
    И как же? EntityDeathEvent возвращает только сущность которая умерла, узнать кем именно никак кроме как да, костыля.
     
  14. _MRDen3000YT_

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

    Баллы:
    76
    Здесь стоит конкретная задача - получить убийцу игрока. Когда игрок убивает другого игрока. Все остальное тут излишне.
     

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