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

Помогите Как отловить, если игрока убили оружием из Flan's Mod?

MrTrojan

Активный участник
Пользователь
Баллы
98
Имя в Minecraft
BlackTrojan
Всем привет, я столкнулся с проблемой, что не могу отловить убийство/дамаг, если стреляют из оружия, а оружие из Flan's Mod.

Попробовал отловить так:

Java:
public void onDeath(EntityDeathEvent e) {
LivingEntity ent = e.getEntity();
EntityDamageEvent ede = ent.getLastDamageCause();
DamageCause cause = ede.getCause();

System.out.println(cause);
}

но возвращало ENTITY_ATTACK
 
Проверяйте что в руках у того, кто нанёс урон. По другому, думаю, ни как не получится.
 
А что там за оружие? Там какие-то пули/снаряды/стрелы? Если да - то тогда по идее, там должно по аналогии со стреалами - наносит урон не игрок, а стрела (а у неё уже есть стрелок).

Если же оружие "мгновенное" (лазеры или что-то подобное) - тогда сменить не успеет ;) Обработка события происходит в пределах одного тика.
 
Если можно в моде изменить дамаг, то стоит попробовать поставить уникальный дабл...
Потом методом entity.getLastDamage() проверять.
Или я чего-то не понимаю :oops:
 
А что там за оружие? Там какие-то пули/снаряды/стрелы? Если да - то тогда по идее, там должно по аналогии со стреалами - наносит урон не игрок, а стрела (а у неё уже есть стрелок).

Если же оружие "мгновенное" (лазеры или что-то подобное) - тогда сменить не успеет ;) Обработка события происходит в пределах одного тика.
Там пули.
 
Код:
EntityDamageEvent ede = ent.getLastDamageCause();

if (ede instanceof EntityDamageByEntityEvent){
     EntityDamageByEntityEvent evdmg = (EntityDamageByEntityEvent)ede ;
     if (evdmg.getCause() == DamageCause.PROJECTILE){
     Projectile prj = (Projectile) evdmg.getDamager();
     // prj - это стрела или возможно пуля (если мод правильно себя ведёт)
     }
}
 
Код:
EntityDamageEvent ede = ent.getLastDamageCause();

if (ede instanceof EntityDamageByEntityEvent){
     EntityDamageByEntityEvent evdmg = (EntityDamageByEntityEvent)ede ;
     if (evdmg.getCause() == DamageCause.PROJECTILE){
     Projectile prj = (Projectile) evdmg.getDamager();
     // prj - это стрела или возможно пуля (если мод правильно себя ведёт)
     }
}
Projectile - чисто баккитовский интерфейс, шанс в том что в модовская энтитя имеет этот интерфейс - 0%.
Поэтому проверять придётся по имени класса энтити, а дергать стрелка рефлексией, если энтитя вообще хранит стрелка.
 

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

Назад
Верх