Added KnownTranslationFactory and use it in as many places as possible

this makes translation usage much more statically analysable.
The only places this isn't used are:
- places that prefix translations with colours (those are still a problem)
- places where server/client translations don't match (e.g. gameMode.changed accepts different parameters in vanilla than in PM)
This commit is contained in:
Dylan K. Taylor
2021-08-10 14:50:40 +01:00
parent d39080c45a
commit 2293bd948d
52 changed files with 2185 additions and 372 deletions

View File

@ -30,7 +30,7 @@ use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityDeathEvent;
use pocketmine\item\Item;
use pocketmine\lang\KnownTranslationKeys;
use pocketmine\lang\KnownTranslationFactory;
use pocketmine\lang\TranslationContainer;
use pocketmine\player\Player;
@ -89,23 +89,14 @@ class PlayerDeathEvent extends EntityDeathEvent{
* Returns the vanilla death message for the given death cause.
*/
public static function deriveMessage(string $name, ?EntityDamageEvent $deathCause) : TranslationContainer{
$message = KnownTranslationKeys::DEATH_ATTACK_GENERIC;
$params = [$name];
switch($deathCause === null ? EntityDamageEvent::CAUSE_CUSTOM : $deathCause->getCause()){
case EntityDamageEvent::CAUSE_ENTITY_ATTACK:
if($deathCause instanceof EntityDamageByEntityEvent){
$e = $deathCause->getDamager();
if($e instanceof Player){
$message = KnownTranslationKeys::DEATH_ATTACK_PLAYER;
$params[] = $e->getDisplayName();
break;
return KnownTranslationFactory::death_attack_player($name, $e->getDisplayName());
}elseif($e instanceof Living){
$message = KnownTranslationKeys::DEATH_ATTACK_MOB;
$params[] = $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName();
break;
}else{
$params[] = "Unknown";
return KnownTranslationFactory::death_attack_mob($name, $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName());
}
}
break;
@ -113,57 +104,41 @@ class PlayerDeathEvent extends EntityDeathEvent{
if($deathCause instanceof EntityDamageByEntityEvent){
$e = $deathCause->getDamager();
if($e instanceof Player){
$message = KnownTranslationKeys::DEATH_ATTACK_ARROW;
$params[] = $e->getDisplayName();
return KnownTranslationFactory::death_attack_arrow($name, $e->getDisplayName());
}elseif($e instanceof Living){
$message = KnownTranslationKeys::DEATH_ATTACK_ARROW;
$params[] = $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName();
break;
}else{
$params[] = "Unknown";
return KnownTranslationFactory::death_attack_arrow($name, $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName());
}
}
break;
case EntityDamageEvent::CAUSE_SUICIDE:
$message = KnownTranslationKeys::DEATH_ATTACK_GENERIC;
break;
return KnownTranslationFactory::death_attack_generic($name);
case EntityDamageEvent::CAUSE_VOID:
$message = KnownTranslationKeys::DEATH_ATTACK_OUTOFWORLD;
break;
return KnownTranslationFactory::death_attack_outOfWorld($name);
case EntityDamageEvent::CAUSE_FALL:
if($deathCause instanceof EntityDamageEvent){
if($deathCause->getFinalDamage() > 2){
$message = KnownTranslationKeys::DEATH_FELL_ACCIDENT_GENERIC;
break;
}
if($deathCause instanceof EntityDamageEvent && $deathCause->getFinalDamage() > 2){
return KnownTranslationFactory::death_fell_accident_generic($name);
}
$message = KnownTranslationKeys::DEATH_ATTACK_FALL;
break;
return KnownTranslationFactory::death_attack_fall($name);
case EntityDamageEvent::CAUSE_SUFFOCATION:
$message = KnownTranslationKeys::DEATH_ATTACK_INWALL;
break;
return KnownTranslationFactory::death_attack_inWall($name);
case EntityDamageEvent::CAUSE_LAVA:
$message = KnownTranslationKeys::DEATH_ATTACK_LAVA;
break;
return KnownTranslationFactory::death_attack_lava($name);
case EntityDamageEvent::CAUSE_FIRE:
$message = KnownTranslationKeys::DEATH_ATTACK_ONFIRE;
break;
return KnownTranslationFactory::death_attack_onFire($name);
case EntityDamageEvent::CAUSE_FIRE_TICK:
$message = KnownTranslationKeys::DEATH_ATTACK_INFIRE;
break;
return KnownTranslationFactory::death_attack_inFire($name);
case EntityDamageEvent::CAUSE_DROWNING:
$message = KnownTranslationKeys::DEATH_ATTACK_DROWN;
break;
return KnownTranslationFactory::death_attack_drown($name);
case EntityDamageEvent::CAUSE_CONTACT:
if($deathCause instanceof EntityDamageByBlockEvent){
if($deathCause->getDamager()->getId() === BlockLegacyIds::CACTUS){
$message = KnownTranslationKeys::DEATH_ATTACK_CACTUS;
return KnownTranslationFactory::death_attack_cactus($name);
}
}
break;
@ -173,21 +148,15 @@ class PlayerDeathEvent extends EntityDeathEvent{
if($deathCause instanceof EntityDamageByEntityEvent){
$e = $deathCause->getDamager();
if($e instanceof Player){
$message = KnownTranslationKeys::DEATH_ATTACK_EXPLOSION_PLAYER;
$params[] = $e->getDisplayName();
return KnownTranslationFactory::death_attack_explosion_player($name, $e->getDisplayName());
}elseif($e instanceof Living){
$message = KnownTranslationKeys::DEATH_ATTACK_EXPLOSION_PLAYER;
$params[] = $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName();
break;
return KnownTranslationFactory::death_attack_explosion_player($name, $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName());
}
}else{
$message = KnownTranslationKeys::DEATH_ATTACK_EXPLOSION;
}
break;
return KnownTranslationFactory::death_attack_explosion($name);
case EntityDamageEvent::CAUSE_MAGIC:
$message = KnownTranslationKeys::DEATH_ATTACK_MAGIC;
break;
return KnownTranslationFactory::death_attack_magic($name);
case EntityDamageEvent::CAUSE_CUSTOM:
break;
@ -196,6 +165,6 @@ class PlayerDeathEvent extends EntityDeathEvent{
break;
}
return new TranslationContainer($message, $params);
return KnownTranslationFactory::death_attack_generic($name);
}
}