diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index f0420bf9c..ee7fac6cf 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1768,8 +1768,9 @@ class Server{ * @param Player[] $players * @param DataPacket[]|string $packets * @param bool $forceSync + * @param bool $immediate */ - public function batchPackets(array $players, array $packets, $forceSync = false){ + public function batchPackets(array $players, array $packets, $forceSync = false, bool $immediate = false){ Timings::$playerNetworkTimer->startTiming(); $pk = new BatchPacket(); @@ -1786,25 +1787,34 @@ class Server{ } if(!$forceSync and $this->networkCompressionAsync){ - $task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel); + $task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel, $immediate); $this->getScheduler()->scheduleAsyncTask($task); }else{ $pk->compress($this->networkCompressionLevel); - $this->broadcastPacketsCallback($pk, $targets); + $this->broadcastPacketsCallback($pk, $targets, $immediate); } Timings::$playerNetworkTimer->stopTiming(); } - public function broadcastPacketsCallback(BatchPacket $pk, array $identifiers){ + public function broadcastPacketsCallback(BatchPacket $pk, array $identifiers, bool $immediate){ $pk->encode(); $pk->isEncoded = true; - foreach($identifiers as $i){ - if(isset($this->players[$i])){ - $this->players[$i]->dataPacket($pk); + if($immediate){ + foreach($identifiers as $i){ + if(isset($this->players[$i])){ + $this->players[$i]->directDataPacket($pk); + } + } + }else{ + foreach($identifiers as $i){ + if(isset($this->players[$i])){ + $this->players[$i]->dataPacket($pk); + } } } + } diff --git a/src/pocketmine/network/CompressBatchedTask.php b/src/pocketmine/network/CompressBatchedTask.php index 357790ae5..ba06c168f 100644 --- a/src/pocketmine/network/CompressBatchedTask.php +++ b/src/pocketmine/network/CompressBatchedTask.php @@ -31,11 +31,13 @@ class CompressBatchedTask extends AsyncTask{ public $data; public $final; public $targets; + public $immediate = false; - public function __construct(BatchPacket $data, array $targets, $level = 7){ + public function __construct(BatchPacket $data, array $targets, $level = 7, bool $sendImmediate = false){ $this->data = serialize($data); $this->targets = $targets; $this->level = $level; + $this->immediate = $sendImmediate; } public function onRun(){ @@ -51,6 +53,6 @@ class CompressBatchedTask extends AsyncTask{ } public function onCompletion(Server $server){ - $server->broadcastPacketsCallback(unserialize($this->final), (array) $this->targets); + $server->broadcastPacketsCallback(unserialize($this->final), (array) $this->targets, $this->immediate); } }