public function batchPackets(array $players, array $packets, $forceSync = false)
{
Timings::$playerNetworkTimer->startTiming();
$str = "";
foreach ($packets as $p) {
if ($p instanceof DataPacket) {
if (!$p->isEncoded) {
$p->encode();
}
$str .= Binary::writeUnsignedVarInt(strlen($p->buffer)) . $p->buffer;
} else {
$str .= Binary::writeUnsignedVarInt(strlen($p)) . $p;
}
}
$targets = [];
foreach ($players as $p) {
if ($p->isConnected()) {
$targets[] = $this->identifiers[spl_object_hash($p)];
}
}
if (!$forceSync and $this->networkCompressionAsync) {
$task = new CompressBatchedTask($str, $targets, $this->networkCompressionLevel);
$this->getScheduler()->scheduleAsyncTask($task);
} else {
$this->broadcastPacketsCallback(zlib_encode($str, ZLIB_ENCODING_DEFLATE, $this->networkCompressionLevel), $targets);
}
Timings::$playerNetworkTimer->stopTiming();
}