player = $entity; $this->deathMessage = $deathMessage ?? self::deriveMessage($entity->getDisplayName(), $entity->getLastDamageCause()); } /** * @return Player */ public function getEntity(){ return $this->player; } public function getPlayer() : Player{ return $this->player; } public function getDeathMessage() : Translatable|string{ return $this->deathMessage; } public function setDeathMessage(Translatable|string $deathMessage) : void{ $this->deathMessage = $deathMessage; } public function getKeepInventory() : bool{ return $this->keepInventory; } public function setKeepInventory(bool $keepInventory) : void{ $this->keepInventory = $keepInventory; } public function getKeepXp() : bool{ return $this->keepXp; } public function setKeepXp(bool $keepXp) : void{ $this->keepXp = $keepXp; } /** * Returns the vanilla death message for the given death cause. */ public static function deriveMessage(string $name, ?EntityDamageEvent $deathCause) : Translatable{ switch($deathCause === null ? EntityDamageEvent::CAUSE_CUSTOM : $deathCause->getCause()){ case EntityDamageEvent::CAUSE_ENTITY_ATTACK: if($deathCause instanceof EntityDamageByEntityEvent){ $e = $deathCause->getDamager(); if($e instanceof Player){ return KnownTranslationFactory::death_attack_player($name, $e->getDisplayName()); }elseif($e instanceof Living){ return KnownTranslationFactory::death_attack_mob($name, $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName()); } } break; case EntityDamageEvent::CAUSE_PROJECTILE: if($deathCause instanceof EntityDamageByEntityEvent){ $e = $deathCause->getDamager(); if($e instanceof Player){ return KnownTranslationFactory::death_attack_arrow($name, $e->getDisplayName()); }elseif($e instanceof Living){ return KnownTranslationFactory::death_attack_arrow($name, $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName()); } } break; case EntityDamageEvent::CAUSE_SUICIDE: return KnownTranslationFactory::death_attack_generic($name); case EntityDamageEvent::CAUSE_VOID: return KnownTranslationFactory::death_attack_outOfWorld($name); case EntityDamageEvent::CAUSE_FALL: if($deathCause instanceof EntityDamageEvent && $deathCause->getFinalDamage() > 2){ return KnownTranslationFactory::death_fell_accident_generic($name); } return KnownTranslationFactory::death_attack_fall($name); case EntityDamageEvent::CAUSE_SUFFOCATION: return KnownTranslationFactory::death_attack_inWall($name); case EntityDamageEvent::CAUSE_LAVA: return KnownTranslationFactory::death_attack_lava($name); case EntityDamageEvent::CAUSE_FIRE: return KnownTranslationFactory::death_attack_onFire($name); case EntityDamageEvent::CAUSE_FIRE_TICK: return KnownTranslationFactory::death_attack_inFire($name); case EntityDamageEvent::CAUSE_DROWNING: return KnownTranslationFactory::death_attack_drown($name); case EntityDamageEvent::CAUSE_CONTACT: if($deathCause instanceof EntityDamageByBlockEvent){ if($deathCause->getDamager()->getId() === BlockLegacyIds::CACTUS){ return KnownTranslationFactory::death_attack_cactus($name); } } break; case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: if($deathCause instanceof EntityDamageByEntityEvent){ $e = $deathCause->getDamager(); if($e instanceof Player){ return KnownTranslationFactory::death_attack_explosion_player($name, $e->getDisplayName()); }elseif($e instanceof Living){ return KnownTranslationFactory::death_attack_explosion_player($name, $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName()); } } return KnownTranslationFactory::death_attack_explosion($name); case EntityDamageEvent::CAUSE_MAGIC: return KnownTranslationFactory::death_attack_magic($name); case EntityDamageEvent::CAUSE_CUSTOM: break; default: break; } return KnownTranslationFactory::death_attack_generic($name); } }