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

  • Автор темы Автор темы Sevare
  • Дата начала Дата начала

Sevare

Активный участник
Пользователь
Баллы
61
Помогите пожалуйста, как сделать ивент когда игрок убивает другого игрока, а потом получить убийцу?
 
Код:
    @EventHandler
    public void onDeath(PlayerDeathEvent e) {
      Player killed = e.getEntity(); // Игрок, которого убили
      if (killed.getKiller() instanceof Player) {
        Player killer = killed.getKiller(); // Игрок, который убил
}
}
        }
 
Помогите пожалуйста, как сделать ивент когда игрок убивает другого игрока, а потом получить убийцу?
Привет дружище, если ты ничего не понял то:

@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); //Отправляем звук при убийстве килллеру
    }
}
 
Привет дружище, если ты ничего не понял то:

@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); //Отправляем звук при убийстве килллеру
    }
}
Не зачем проверять на Player ибо метод Player#getKiller() возвращает всегда Player.
А так же из-за того что он возвращает Player, он может вернуть null если убийц не было или может вовсе всегда показывать одного и того же убийцу игрока если игрок умирает из-за монстра.


Помогите пожалуйста, как сделать ивент когда игрок убивает другого игрока, а потом получить убийцу?
Самый лучший способ проверять убийцу, это через EntityDamageByEntityEvent получить того кто атакует и на кого, и вычислить, является ли финальный урон фатальным, а там уже делать то что нужно. (Но прежде чем проверять, надо убедиться что ивент не был отменен ранее)
 
Не зачем проверять на Player ибо метод Player#getKiller() возвращает всегда Player.
А так же из-за того что он возвращает Player, он может вернуть null если убийц не было или может вовсе всегда показывать одного и того же убийцу игрока если игрок умирает из-за монстра.



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

Кодер ты мой умный, ты ведь знаешь что игрок может упасть со скалы, или его убьет скелет?
Для этого и существует проверка.
 
Кодер ты мой умный, ты ведь знаешь что игрок может упасть со скалы, или его убьет скелет?
Для этого и существует проверка.
Нашелся умник, он вернет null если игрок упадет со скалы или его убьет скелет.
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/LivingEntity.html#getKiller()
 
Кодер ты мой умный, ты ведь знаешь что игрок может упасть со скалы, или его убьет скелет?
Для этого и существует проверка.
А с твоим кодом, если игрок упадет со скалы, то будет выбрасывать nullpointer потому, что killer = null.
 
Код:
public void onDeaths(PlayerDeathEvent event) {
    if (event.getEntity().getKiller() != null) {
        Player killer = event.getEntity().getKiller();
    }
}
Держи рабочий код.
 
Кодер ты мой умный, ты ведь знаешь что игрок может упасть со скалы, или его убьет скелет?
Для этого и существует проверка.
Метод LivingEntity#getKiller() всегда возвращает Player, о а каких скелетах идет речь? (Player реализует LivingEntity если что)

Как я сказал в том же сообщении, если нужно проверять смерть игрока (и не только) по факту, да и еще узнать кто убийца, используйте EntityDamageByEntityEvent
 
И как же? EntityDeathEvent возвращает только сущность которая умерла, узнать кем именно никак кроме как да, костыля.
Здесь стоит конкретная задача - получить убийцу игрока. Когда игрок убивает другого игрока. Все остальное тут излишне.
 
Назад
Верх