Причина смерти игрока

парниша

Участник
Баллы
33
Можно ли узнать причину смерти игрока? Если он был убит другим игроком, можно ли получить название кита, которым он был убит?
 
Можно ли узнать причину смерти игрока? Если он был убит другим игроком, можно ли получить название кита, которым он был убит?
В OnPlayerDeathEvent есть getKiller(), хотя я не уверен что это именно то, что нужно. (Хотя по логике это то что нужно.)
 
Можно ли узнать причину смерти игрока? Если он был убит другим игроком, можно ли получить название кита, которым он был убит?

В новых версиях уже есть такая фича, только выкопать и сделать как надо осталось. А вообще попробуй порытся в переменах в файле локализации.
 
В новых версиях уже есть такая фича, только выкопать и сделать как надо осталось. А вообще попробуй порытся в переменах в файле локализации.
Можно читать строку, которую вернёт getDeathMessage(), но это как то.. :confused:
 
Можно ли узнать причину смерти игрока? Если он был убит другим игроком, можно ли получить название кита, которым он был убит?
Код:
public class gg {
public void death (EntityDamageByEntityEvent e){
double h = e.getDamage();
Player p = (Player)e.getDamager();
Player pd = (Player)e.getEntity();
if(h >= pd.getMaxHealth()){
String name =p.getItemInHand().getItemMeta().getDisplayName();
НАЗВАНИЕ ПРЕДМЕТА КОТОРЫМ БЫЛ УБИТ ИГРОК
}
}
}
 
@_Rufu5_, очень рачинский способ, до такого я даже не додумался
Код:
    public void onPlayerDeath(PlayerDeathEvent e) {
        Player p = e.getEntity();
        if(!(e.getEntity().getKiller() instanceof Player))
            return;
        Player k = p.getKiller();
        ItemStack is = k.getItemInHand(); // предмет в руке у убийцы
    }
 
@_Rufu5_, очень рачинский способ, до такого я даже не додумался
Код:
    public void onPlayerDeath(PlayerDeathEvent e) {
        Player p = e.getEntity();
        if(!(e.getEntity().getKiller() instanceof Player))
            return;
        Player k = p.getKiller();
        ItemStack is = k.getItemInHand(); // предмет в руке у убийцы
    }

Норм ответ или нет мой?
 
@_Rufu5_, если я ничего не путаю, то p.getItemInHand().getItemMeta().getDisplayName(); может быть null т.е. такая строка без предварительной проверки вызовет эксепшн.
 
Хм, странно, убивал лопатами, топорами, кирками, всем короче, и всегда одно и тоже пишет: Player was slain by Player2. Хотя по идеи в 1.5.2+ должно писать что типа убил чем то... даже хз, просветите меня. Извините что здесь написал.
 
Хм, странно, убивал лопатами, топорами, кирками, всем короче, и всегда одно и тоже пишет: Player was slain by Player2. Хотя по идеи в 1.5.2+ должно писать что типа убил чем то... даже хз, просветите меня. Извините что здесь написал.
В 1.5 такого не имеется(за исключением помощи других игроков). В версиях свежее тоже не встречал, разве что за счёт сторонних плагинов
 
В 1.5 такого не имеется(за исключением помощи других игроков). В версиях свежее тоже не встречал, разве что за счёт сторонних плагинов
Странно, в 1.5.2 нашел такое, должно же пахать:
ланг файл:
death.fell.accident.ladder=%1$s fell off a ladder
death.fell.accident.vines=%1$s fell off some vines
death.fell.accident.water=%1$s fell out of the water
death.fell.accident.generic=%1$s fell from a high place
death.fell.killer=%1$s was doomed to fall
death.fell.assist=%1$s was doomed to fall by %2$s
death.fell.assist.item=%1$s was doomed to fall by %2$s using %3$s
death.fell.finish=%1$s was fell too far and was finished by %2$s
death.fell.finish.item=%1$s was fell too far and was finished by %2$s using %3$s

death.attack.inFire=%1$s went up in flames
death.attack.inFire.player=%1$s walked into fire whilst fighting %2$s
death.attack.onFire=%1$s burned to death
death.attack.onFire.player=%1$s was burnt to a crisp whilst fighting %2$s
death.attack.lava=%1$s tried to swim in lava
death.attack.lava.player=%1$s tried to swim in lava to escape %2$s
death.attack.inWall=%1$s suffocated in a wall
death.attack.drown=%1$s drowned
death.attack.drown.player=%1$s drowned whilst trying to escape %2$s
death.attack.starve=%1$s starved to death
death.attack.cactus=%1$s was pricked to death
death.attack.cactus.player=%1$s walked into a cactus whilst trying to escape %2$s
death.attack.generic=%1$s died
death.attack.explosion=%1$s blew up
death.attack.explosion.player=%1$s was blown up by %2$s
death.attack.magic=%1$s was killed by magic
death.attack.wither=%1$s withered away
death.attack.anvil=%1$s was squashed by a falling anvil
death.attack.fallingBlock=%1$s was squashed by a falling block
death.attack.player.item=%1$s was slain by %2$s using %3$s
death.attack.arrow=%1$s was shot by %2$s
death.attack.arrow.item=%1$s was shot by %2$s using %3$s
death.attack.fireball=%1$s was fireballed by %2$s
death.attack.fireball.item=%1$s was fireballed by %2$s using %3$s
death.attack.thrown=%1$s was pummeled by %2$s
death.attack.thrown.item=%1$s was pummeled by %2$s using %3$s
death.attack.indirectMagic=%1$s was killed by %2$s using magic
death.attack.indirectMagic.item=%1$s was killed by %2$s using %3$s
death.attack.thorns=%1$s was killed trying to hurt %2$s
death.attack.fall=%1$s hit the ground too hard
death.attack.outOfWorld=%1$s fell out of the world
Кусок кода EntityDamageSourceIndirect:
Код:
public String getDeathMessage(EntityLiving par1EntityLiving)
  {
  String s = this.indirectEntity == null ? this.damageSourceEntity.getTranslatedEntityName() : this.indirectEntity.getTranslatedEntityName();
  ItemStack itemstack = this.indirectEntity instanceof EntityLiving ? ((EntityLiving)this.indirectEntity).getHeldItem() : null;
  String s1 = "death.attack." + this.damageType;
  String s2 = s1 + ".item";
  return itemstack != null && itemstack.hasDisplayName() && StatCollector.func_94522_b(s2) ? StatCollector.translateToLocalFormatted(s2, new Object[] {par1EntityLiving.getTranslatedEntityName(), s, itemstack.getDisplayName()}): StatCollector.translateToLocalFormatted(s1, new Object[] {par1EntityLiving.getTranslatedEntityName(), s});
  }
 
Назад
Верх