diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 75dd03988..f6334009d 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -3635,10 +3635,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if($source->isCancelled()){ return; }elseif($this->getLastDamageCause() === $source and $this->spawned){ - $pk = new EntityEventPacket(); - $pk->entityRuntimeId = $this->id; - $pk->event = EntityEventPacket::HURT_ANIMATION; - $this->dataPacket($pk); + $this->broadcastEntityEvent(EntityEventPacket::HURT_ANIMATION); if($this->isSurvival()){ $this->exhaust(0.3, PlayerExhaustEvent::CAUSE_DAMAGE); diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index bbaecbfa6..d7fa05195 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -59,6 +59,7 @@ use pocketmine\nbt\tag\ListTag; use pocketmine\nbt\tag\ShortTag; use pocketmine\nbt\tag\StringTag; use pocketmine\network\mcpe\protocol\AddEntityPacket; +use pocketmine\network\mcpe\protocol\EntityEventPacket; use pocketmine\network\mcpe\protocol\MoveEntityPacket; use pocketmine\network\mcpe\protocol\RemoveEntityPacket; use pocketmine\network\mcpe\protocol\SetEntityDataPacket; @@ -2077,6 +2078,15 @@ abstract class Entity extends Location implements Metadatable, EntityIds{ } } + public function broadcastEntityEvent(int $eventId, ?int $eventData = null, ?array $players = null) : void{ + $pk = new EntityEventPacket(); + $pk->entityRuntimeId = $this->id; + $pk->event = $eventId; + $pk->data = $eventData ?? 0; + + $this->server->broadcastPacket($players ?? $this->getViewers(), $pk); + } + public function __destruct(){ $this->close(); } diff --git a/src/pocketmine/entity/Living.php b/src/pocketmine/entity/Living.php index 1bc23a9db..520e5f7ee 100644 --- a/src/pocketmine/entity/Living.php +++ b/src/pocketmine/entity/Living.php @@ -108,10 +108,7 @@ abstract class Living extends Entity implements Damageable{ parent::setHealth($amount); $this->attributeMap->getAttribute(Attribute::HEALTH)->setValue(ceil($this->getHealth()), true); if($this->isAlive() and !$wasAlive){ - $pk = new EntityEventPacket(); - $pk->entityRuntimeId = $this->getId(); - $pk->event = EntityEventPacket::RESPAWN; - $this->server->broadcastPacket($this->hasSpawned, $pk); + $this->broadcastEntityEvent(EntityEventPacket::RESPAWN); } } @@ -376,10 +373,7 @@ abstract class Living extends Entity implements Damageable{ $this->setAbsorption(max(0, $this->getAbsorption() + $source->getDamage(EntityDamageEvent::MODIFIER_ABSORPTION))); - $pk = new EntityEventPacket(); - $pk->entityRuntimeId = $this->getId(); - $pk->event = $this->getHealth() <= 0 ? EntityEventPacket::DEATH_ANIMATION : EntityEventPacket::HURT_ANIMATION; //Ouch! - $this->server->broadcastPacket($this->hasSpawned, $pk); + $this->broadcastEntityEvent($this->getHealth() <= 0 ? EntityEventPacket::DEATH_ANIMATION : EntityEventPacket::HURT_ANIMATION); //Ouch! $this->attackTime = 10; //0.5 seconds cooldown } diff --git a/src/pocketmine/entity/Squid.php b/src/pocketmine/entity/Squid.php index eb6257523..64f44245b 100644 --- a/src/pocketmine/entity/Squid.php +++ b/src/pocketmine/entity/Squid.php @@ -64,10 +64,7 @@ class Squid extends WaterAnimal{ $this->swimDirection = (new Vector3($this->x - $e->x, $this->y - $e->y, $this->z - $e->z))->normalize(); } - $pk = new EntityEventPacket(); - $pk->entityRuntimeId = $this->getId(); - $pk->event = EntityEventPacket::SQUID_INK_CLOUD; - $this->server->broadcastPacket($this->hasSpawned, $pk); + $this->broadcastEntityEvent(EntityEventPacket::SQUID_INK_CLOUD); } }