public function sendBlocks(array $target, array $blocks, $flags = UpdateBlockPacket::FLAG_NONE, bool $optimizeRebuilds = false)
{
if ($optimizeRebuilds) {
$chunks = [];
foreach ($blocks as $b) {
if ($b === null) {
continue;
}
$pk = new UpdateBlockPacket();
$first = false;
if (!isset($chunks[$index = Level::chunkHash($b->x >> 4, $b->z >> 4)])) {
$chunks[$index] = true;
$first = true;
}
$pk->x = $b->x;
$pk->z = $b->z;
$pk->y = $b->y;
if ($b instanceof Block) {
$pk->blockId = $b->getId();
$pk->blockData = $b->getDamage();
} else {
$fullBlock = $this->getFullBlock($b->x, $b->y, $b->z);
$pk->blockId = $fullBlock >> 4;
$pk->blockData = $fullBlock & 0xf;
}
$pk->flags = $first ? $flags : UpdateBlockPacket::FLAG_NONE;
Server::broadcastPacket($target, $pk);
}
} else {
foreach ($blocks as $b) {
if ($b === null) {
continue;
}
$pk = new UpdateBlockPacket();
$pk->x = $b->x;
$pk->z = $b->z;
$pk->y = $b->y;
if ($b instanceof Block) {
$pk->blockId = $b->getId();
$pk->blockData = $b->getDamage();
} else {
$fullBlock = $this->getFullBlock($b->x, $b->y, $b->z);
$pk->blockId = $fullBlock >> 4;
$pk->blockData = $fullBlock & 0xf;
}
$pk->flags = $flags;
Server::broadcastPacket($target, $pk);
}
}
}