PocketMine-MP 5.35.1 git-e32e836dad793a3a3c8ddd8927c00e112b1e576a
Loading...
Searching...
No Matches
PlayerDeathEvent.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
25
40
42 protected Player $player;
43
44 private Translatable|string $deathMessage;
45 private Translatable|string $deathScreenMessage;
46 private bool $keepInventory = false;
47 private bool $keepXp = false;
48
53 public function __construct(Player $entity, array $drops, int $xp, Translatable|string|null $deathMessage){
54 parent::__construct($entity, $drops, $xp);
55 $this->player = $entity;
56 $this->deathMessage = $deathMessage ?? self::deriveMessage($entity->getDisplayName(), $entity->getLastDamageCause());
57 $this->deathScreenMessage = $this->deathMessage;
58 }
59
63 public function getEntity(){
64 return $this->player;
65 }
66
67 public function getPlayer() : Player{
68 return $this->player;
69 }
70
71 public function getDeathMessage() : Translatable|string{
72 return $this->deathMessage;
73 }
74
75 public function setDeathMessage(Translatable|string $deathMessage) : void{
76 $this->deathMessage = $deathMessage;
77 }
78
79 public function getDeathScreenMessage() : Translatable|string{
80 return $this->deathScreenMessage;
81 }
82
83 public function setDeathScreenMessage(Translatable|string $deathScreenMessage) : void{
84 $this->deathScreenMessage = $deathScreenMessage;
85 }
86
87 public function getKeepInventory() : bool{
88 return $this->keepInventory;
89 }
90
91 public function setKeepInventory(bool $keepInventory) : void{
92 $this->keepInventory = $keepInventory;
93 }
94
95 public function getKeepXp() : bool{
96 return $this->keepXp;
97 }
98
99 public function setKeepXp(bool $keepXp) : void{
100 $this->keepXp = $keepXp;
101 }
102
106 public static function deriveMessage(string $name, ?EntityDamageEvent $deathCause) : Translatable{
107 switch($deathCause === null ? EntityDamageEvent::CAUSE_CUSTOM : $deathCause->getCause()){
108 case EntityDamageEvent::CAUSE_ENTITY_ATTACK:
109 if($deathCause instanceof EntityDamageByEntityEvent){
110 $e = $deathCause->getDamager();
111 if($e instanceof Player){
112 return KnownTranslationFactory::death_attack_player($name, $e->getDisplayName());
113 }elseif($e instanceof Living){
114 return KnownTranslationFactory::death_attack_mob($name, $e->getDisplayName());
115 }
116 }
117 break;
118 case EntityDamageEvent::CAUSE_PROJECTILE:
119 if($deathCause instanceof EntityDamageByChildEntityEvent){
120 $e = $deathCause->getDamager();
121 if($e instanceof Living){
122 $child = $deathCause->getChild();
123 if($child instanceof Trident){
124 return KnownTranslationFactory::death_attack_trident($name, $e->getDisplayName());
125 }else{
126 return KnownTranslationFactory::death_attack_arrow($name, $e->getDisplayName());
127 }
128 }
129 }
130 break;
131 case EntityDamageEvent::CAUSE_SUICIDE:
132 return KnownTranslationFactory::death_attack_generic($name);
133 case EntityDamageEvent::CAUSE_VOID:
134 return KnownTranslationFactory::death_attack_outOfWorld($name);
135 case EntityDamageEvent::CAUSE_FALL:
136 if($deathCause instanceof EntityDamageEvent && $deathCause->getFinalDamage() > 2){
137 return KnownTranslationFactory::death_fell_accident_generic($name);
138 }
139 return KnownTranslationFactory::death_attack_fall($name);
140
141 case EntityDamageEvent::CAUSE_SUFFOCATION:
142 return KnownTranslationFactory::death_attack_inWall($name);
143
144 case EntityDamageEvent::CAUSE_LAVA:
145 return KnownTranslationFactory::death_attack_lava($name);
146
147 case EntityDamageEvent::CAUSE_FIRE:
148 return KnownTranslationFactory::death_attack_onFire($name);
149
150 case EntityDamageEvent::CAUSE_FIRE_TICK:
151 return KnownTranslationFactory::death_attack_inFire($name);
152
153 case EntityDamageEvent::CAUSE_DROWNING:
154 return KnownTranslationFactory::death_attack_drown($name);
155
156 case EntityDamageEvent::CAUSE_CONTACT:
157 if($deathCause instanceof EntityDamageByBlockEvent){
158 if($deathCause->getDamager()->getTypeId() === BlockTypeIds::CACTUS){
159 return KnownTranslationFactory::death_attack_cactus($name);
160 }
161 }
162 break;
163
164 case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION:
165 case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION:
166 if($deathCause instanceof EntityDamageByEntityEvent){
167 $e = $deathCause->getDamager();
168 if($e instanceof FireworkRocket){
169 return KnownTranslationFactory::death_attack_fireworks($name);
170 }elseif($e instanceof Living){
171 return KnownTranslationFactory::death_attack_explosion_player($name, $e->getDisplayName());
172 }
173 }
174 return KnownTranslationFactory::death_attack_explosion($name);
175
176 case EntityDamageEvent::CAUSE_MAGIC:
177 return KnownTranslationFactory::death_attack_magic($name);
178
179 case EntityDamageEvent::CAUSE_FALLING_BLOCK:
180 if($deathCause instanceof EntityDamageByEntityEvent){
181 $e = $deathCause->getDamager();
182 if($e instanceof FallingBlock){
183 if($e->getBlock()->getTypeId() === BlockTypeIds::ANVIL){
184 return KnownTranslationFactory::death_attack_anvil($name);
185 }else{
186 return KnownTranslationFactory::death_attack_fallingBlock($name);
187 }
188 }
189 }
190 break;
191
192 case EntityDamageEvent::CAUSE_CUSTOM:
193 break;
194
195 default:
196 break;
197 }
198
199 return KnownTranslationFactory::death_attack_generic($name);
200 }
201}
static deriveMessage(string $name, ?EntityDamageEvent $deathCause)
__construct(Player $entity, array $drops, int $xp, Translatable|string|null $deathMessage)