From 1bf08022751c96bca2df16f7ac7b0e634a64e480 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 26 Mar 2019 16:38:35 +0000 Subject: [PATCH] LevelEventPacket: added create() to reduce boilerplate code --- src/pocketmine/level/Level.php | 6 +----- src/pocketmine/level/particle/DestroyBlockParticle.php | 7 +------ .../level/particle/DragonEggTeleportParticle.php | 8 ++------ src/pocketmine/level/particle/GenericParticle.php | 7 +------ src/pocketmine/level/particle/MobSpawnParticle.php | 8 ++------ src/pocketmine/level/sound/LevelEventSound.php | 7 +------ src/pocketmine/network/mcpe/protocol/LevelEventPacket.php | 8 ++++++++ 7 files changed, 16 insertions(+), 35 deletions(-) diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 2e9a202e7..51d02b6de 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -507,14 +507,10 @@ class Level implements ChunkManager, Metadatable{ * @param int $data */ public function broadcastLevelEvent(?Vector3 $pos, int $evid, int $data = 0){ - $pk = new LevelEventPacket(); - $pk->evid = $evid; - $pk->data = $data; + $pk = LevelEventPacket::create($evid, $data, $pos); if($pos !== null){ - $pk->position = $pos->asVector3(); $this->broadcastPacketToViewers($pos, $pk); }else{ - $pk->position = null; $this->broadcastGlobalPacket($pk); } } diff --git a/src/pocketmine/level/particle/DestroyBlockParticle.php b/src/pocketmine/level/particle/DestroyBlockParticle.php index cb278a4ed..98126e7ce 100644 --- a/src/pocketmine/level/particle/DestroyBlockParticle.php +++ b/src/pocketmine/level/particle/DestroyBlockParticle.php @@ -37,11 +37,6 @@ class DestroyBlockParticle implements Particle{ } public function encode(Vector3 $pos){ - $pk = new LevelEventPacket; - $pk->evid = LevelEventPacket::EVENT_PARTICLE_DESTROY; - $pk->position = $pos; - $pk->data = $this->data; - - return $pk; + return LevelEventPacket::create(LevelEventPacket::EVENT_PARTICLE_DESTROY, $this->data, $pos); } } diff --git a/src/pocketmine/level/particle/DragonEggTeleportParticle.php b/src/pocketmine/level/particle/DragonEggTeleportParticle.php index 65b2e7540..96bb822c8 100644 --- a/src/pocketmine/level/particle/DragonEggTeleportParticle.php +++ b/src/pocketmine/level/particle/DragonEggTeleportParticle.php @@ -50,17 +50,13 @@ class DragonEggTeleportParticle implements Particle{ } public function encode(Vector3 $pos){ - $pk = new LevelEventPacket(); - $pk->evid = LevelEventPacket::EVENT_PARTICLE_DRAGON_EGG_TELEPORT; - $pk->position = $pos; - $pk->data = - ($this->zDiff < 0 ? 1 << 26 : 0) | + $data = ($this->zDiff < 0 ? 1 << 26 : 0) | ($this->yDiff < 0 ? 1 << 25 : 0) | ($this->xDiff < 0 ? 1 << 24 : 0) | (abs($this->xDiff) << 16) | (abs($this->yDiff) << 8) | abs($this->zDiff); - return $pk; + return LevelEventPacket::create(LevelEventPacket::EVENT_PARTICLE_DRAGON_EGG_TELEPORT, $data, $pos); } } diff --git a/src/pocketmine/level/particle/GenericParticle.php b/src/pocketmine/level/particle/GenericParticle.php index 2731eaba7..892dad64a 100644 --- a/src/pocketmine/level/particle/GenericParticle.php +++ b/src/pocketmine/level/particle/GenericParticle.php @@ -38,11 +38,6 @@ class GenericParticle implements Particle{ } public function encode(Vector3 $pos){ - $pk = new LevelEventPacket; - $pk->evid = LevelEventPacket::EVENT_ADD_PARTICLE_MASK | $this->id; - $pk->position = $pos; - $pk->data = $this->data; - - return $pk; + return LevelEventPacket::create(LevelEventPacket::EVENT_ADD_PARTICLE_MASK | $this->id, $this->data, $pos); } } diff --git a/src/pocketmine/level/particle/MobSpawnParticle.php b/src/pocketmine/level/particle/MobSpawnParticle.php index 87c971aa5..5955a2c88 100644 --- a/src/pocketmine/level/particle/MobSpawnParticle.php +++ b/src/pocketmine/level/particle/MobSpawnParticle.php @@ -33,16 +33,12 @@ class MobSpawnParticle implements Particle{ protected $height; public function __construct(int $width = 0, int $height = 0){ + //TODO: bounds checks $this->width = $width; $this->height = $height; } public function encode(Vector3 $pos){ - $pk = new LevelEventPacket; - $pk->evid = LevelEventPacket::EVENT_PARTICLE_SPAWN; - $pk->position = $pos; - $pk->data = ($this->width & 0xff) + (($this->height & 0xff) << 8); - - return $pk; + return LevelEventPacket::create(LevelEventPacket::EVENT_PARTICLE_SPAWN, ($this->width & 0xff) | (($this->height & 0xff) << 8), $pos); } } diff --git a/src/pocketmine/level/sound/LevelEventSound.php b/src/pocketmine/level/sound/LevelEventSound.php index 710567fa4..37c6ee316 100644 --- a/src/pocketmine/level/sound/LevelEventSound.php +++ b/src/pocketmine/level/sound/LevelEventSound.php @@ -49,11 +49,6 @@ abstract class LevelEventSound implements Sound{ } public function encode(Vector3 $pos){ - $pk = new LevelEventPacket; - $pk->evid = $this->getLevelEventId(); - $pk->position = $pos; - $pk->data = (int) $this->pitch; - - return $pk; + return LevelEventPacket::create($this->getLevelEventId(), (int) $this->pitch, $pos); } } diff --git a/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php b/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php index 73510dca7..d44d1fa4a 100644 --- a/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php +++ b/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php @@ -119,6 +119,14 @@ class LevelEventPacket extends DataPacket implements ClientboundPacket{ /** @var int */ public $data; + public static function create(int $evid, int $data, ?Vector3 $pos) : self{ + $pk = new self; + $pk->evid = $evid; + $pk->data = $data; + $pk->position = $pos !== null ? $pos->asVector3() : null; + return $pk; + } + protected function decodePayload() : void{ $this->evid = $this->getVarInt(); $this->position = $this->getVector3();