Cleaned up EntityEventPacket handling

This commit is contained in:
Dylan K. Taylor 2017-11-04 18:31:35 +00:00
parent ddb7fd12f2
commit a66a757f56
4 changed files with 14 additions and 16 deletions

View File

@ -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);

View File

@ -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();
}

View File

@ -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
}

View File

@ -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);
}
}