diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 435cd41ce..46a2c1bcf 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1479,22 +1479,23 @@ class Server{ throw new \InvalidArgumentException("Cannot broadcast empty list of packets"); } - $ev = new DataPacketBroadcastEvent($players, $packets); + /** @var NetworkSession[] $recipients */ + $recipients = []; + foreach($players as $player){ + if($player->isConnected()){ + $recipients[] = $player->getNetworkSession(); + } + } + if(empty($recipients)){ + return false; + } + + $ev = new DataPacketBroadcastEvent($recipients, $packets); $ev->call(); if($ev->isCancelled()){ return false; } - - /** @var NetworkSession[] $targets */ - $targets = []; - foreach($ev->getPlayers() as $player){ - if($player->isConnected()){ - $targets[] = $player->getNetworkSession(); - } - } - if(empty($targets)){ - return false; - } + $recipients = $ev->getTargets(); $stream = new PacketStream(); foreach($ev->getPackets() as $packet){ @@ -1502,14 +1503,14 @@ class Server{ } if(NetworkCompression::$THRESHOLD < 0 or strlen($stream->getBuffer()) < NetworkCompression::$THRESHOLD){ - foreach($targets as $target){ + foreach($recipients as $target){ foreach($ev->getPackets() as $pk){ $target->addToSendBuffer($pk); } } }else{ $promise = $this->prepareBatch($stream); - foreach($targets as $target){ + foreach($recipients as $target){ $target->queueCompressed($promise); } } diff --git a/src/pocketmine/event/server/DataPacketBroadcastEvent.php b/src/pocketmine/event/server/DataPacketBroadcastEvent.php index d42d6ea3f..46bb4ea57 100644 --- a/src/pocketmine/event/server/DataPacketBroadcastEvent.php +++ b/src/pocketmine/event/server/DataPacketBroadcastEvent.php @@ -25,8 +25,8 @@ namespace pocketmine\event\server; use pocketmine\event\Cancellable; use pocketmine\event\CancellableTrait; +use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\ClientboundPacket; -use pocketmine\Player; /** * Called when a list of packets is broadcasted to 1 or more players. @@ -34,32 +34,32 @@ use pocketmine\Player; class DataPacketBroadcastEvent extends ServerEvent implements Cancellable{ use CancellableTrait; - /** @var Player[] */ - private $players; + /** @var NetworkSession[] */ + private $targets; /** @var ClientboundPacket[] */ private $packets; /** - * @param Player[] $players + * @param NetworkSession[] $targets * @param ClientboundPacket[] $packets */ - public function __construct(array $players, array $packets){ - $this->players = $players; + public function __construct(array $targets, array $packets){ + $this->targets = $targets; $this->packets = $packets; } /** - * @return Player[] + * @return NetworkSession[] */ - public function getPlayers() : array{ - return $this->players; + public function getTargets() : array{ + return $this->targets; } /** - * @param Player[] $players + * @param NetworkSession[] $targets */ - public function setPlayers(array $players) : void{ - $this->players = $players; + public function setTargets(array $targets) : void{ + $this->targets = $targets; } /** diff --git a/src/pocketmine/event/server/DataPacketReceiveEvent.php b/src/pocketmine/event/server/DataPacketReceiveEvent.php index 946cd7ee9..7b25a28c7 100644 --- a/src/pocketmine/event/server/DataPacketReceiveEvent.php +++ b/src/pocketmine/event/server/DataPacketReceiveEvent.php @@ -25,24 +25,24 @@ namespace pocketmine\event\server; use pocketmine\event\Cancellable; use pocketmine\event\CancellableTrait; +use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\ServerboundPacket; -use pocketmine\Player; class DataPacketReceiveEvent extends ServerEvent implements Cancellable{ use CancellableTrait; /** @var ServerboundPacket */ private $packet; - /** @var Player */ - private $player; + /** @var NetworkSession */ + private $origin; /** - * @param Player $player + * @param NetworkSession $origin * @param ServerboundPacket $packet */ - public function __construct(Player $player, ServerboundPacket $packet){ + public function __construct(NetworkSession $origin, ServerboundPacket $packet){ $this->packet = $packet; - $this->player = $player; + $this->origin = $origin; } /** @@ -53,9 +53,9 @@ class DataPacketReceiveEvent extends ServerEvent implements Cancellable{ } /** - * @return Player + * @return NetworkSession */ - public function getPlayer() : Player{ - return $this->player; + public function getOrigin() : NetworkSession{ + return $this->origin; } } diff --git a/src/pocketmine/event/server/DataPacketSendEvent.php b/src/pocketmine/event/server/DataPacketSendEvent.php index c14b16037..6de229482 100644 --- a/src/pocketmine/event/server/DataPacketSendEvent.php +++ b/src/pocketmine/event/server/DataPacketSendEvent.php @@ -25,24 +25,24 @@ namespace pocketmine\event\server; use pocketmine\event\Cancellable; use pocketmine\event\CancellableTrait; +use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\ClientboundPacket; -use pocketmine\Player; class DataPacketSendEvent extends ServerEvent implements Cancellable{ use CancellableTrait; /** @var ClientboundPacket */ private $packet; - /** @var Player */ - private $player; + /** @var NetworkSession */ + private $target; /** - * @param Player $player + * @param NetworkSession $target * @param ClientboundPacket $packet */ - public function __construct(Player $player, ClientboundPacket $packet){ + public function __construct(NetworkSession $target, ClientboundPacket $packet){ $this->packet = $packet; - $this->player = $player; + $this->target = $target; } /** @@ -53,9 +53,9 @@ class DataPacketSendEvent extends ServerEvent implements Cancellable{ } /** - * @return Player + * @return NetworkSession */ - public function getPlayer() : Player{ - return $this->player; + public function getTarget() : NetworkSession{ + return $this->target; } } diff --git a/src/pocketmine/network/mcpe/NetworkSession.php b/src/pocketmine/network/mcpe/NetworkSession.php index 2a8f1da8f..d23aa1f1c 100644 --- a/src/pocketmine/network/mcpe/NetworkSession.php +++ b/src/pocketmine/network/mcpe/NetworkSession.php @@ -268,7 +268,7 @@ class NetworkSession{ $this->server->getLogger()->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": " . bin2hex($remains)); } - $ev = new DataPacketReceiveEvent($this->player, $packet); + $ev = new DataPacketReceiveEvent($this, $packet); $ev->call(); if(!$ev->isCancelled() and !$packet->handle($this->handler)){ $this->server->getLogger()->debug("Unhandled " . $packet->getName() . " received from " . $this->getDisplayName() . ": " . bin2hex($packet->getBuffer())); @@ -287,7 +287,7 @@ class NetworkSession{ $timings = Timings::getSendDataPacketTimings($packet); $timings->startTiming(); try{ - $ev = new DataPacketSendEvent($this->player, $packet); + $ev = new DataPacketSendEvent($this, $packet); $ev->call(); if($ev->isCancelled()){ return false;