Send block updates in batches

This commit is contained in:
Dylan K. Taylor 2017-06-06 00:40:56 +01:00
parent 29e88d8592
commit 87e54d7a3a

View File

@ -839,6 +839,7 @@ class Level implements ChunkManager, Metadatable{
* @param bool $optimizeRebuilds * @param bool $optimizeRebuilds
*/ */
public function sendBlocks(array $target, array $blocks, $flags = UpdateBlockPacket::FLAG_NONE, bool $optimizeRebuilds = false){ public function sendBlocks(array $target, array $blocks, $flags = UpdateBlockPacket::FLAG_NONE, bool $optimizeRebuilds = false){
$packets = [];
if($optimizeRebuilds){ if($optimizeRebuilds){
$chunks = []; $chunks = [];
foreach($blocks as $b){ foreach($blocks as $b){
@ -853,23 +854,22 @@ class Level implements ChunkManager, Metadatable{
$first = true; $first = true;
} }
$pk->x = $b->x;
$pk->y = $b->y;
$pk->z = $b->z;
if($b instanceof Block){ if($b instanceof Block){
$pk->x = $b->x;
$pk->z = $b->z;
$pk->y = $b->y;
$pk->blockId = $b->getId(); $pk->blockId = $b->getId();
$pk->blockData = $b->getDamage(); $pk->blockData = $b->getDamage();
$pk->flags = $first ? $flags : UpdateBlockPacket::FLAG_NONE;
}else{ }else{
$fullBlock = $this->getFullBlock($b->x, $b->y, $b->z); $fullBlock = $this->getFullBlock($b->x, $b->y, $b->z);
$pk->x = $b->x;
$pk->z = $b->z;
$pk->y = $b->y;
$pk->blockId = $fullBlock >> 4; $pk->blockId = $fullBlock >> 4;
$pk->blockData = $fullBlock & 0xf; $pk->blockData = $fullBlock & 0xf;
$pk->flags = $first ? $flags : UpdateBlockPacket::FLAG_NONE;
} }
$this->server->broadcastPacket($target, $pk);
$pk->flags = $first ? $flags : UpdateBlockPacket::FLAG_NONE;
$packets[] = $pk;
} }
}else{ }else{
foreach($blocks as $b){ foreach($blocks as $b){
@ -877,25 +877,27 @@ class Level implements ChunkManager, Metadatable{
if($b === null){ if($b === null){
continue; continue;
} }
$pk->x = $b->x;
$pk->y = $b->y;
$pk->z = $b->z;
if($b instanceof Block){ if($b instanceof Block){
$pk->x = $b->x;
$pk->z = $b->z;
$pk->y = $b->y;
$pk->blockId = $b->getId(); $pk->blockId = $b->getId();
$pk->blockData = $b->getDamage(); $pk->blockData = $b->getDamage();
$pk->flags = $flags;
}else{ }else{
$fullBlock = $this->getFullBlock($b->x, $b->y, $b->z); $fullBlock = $this->getFullBlock($b->x, $b->y, $b->z);
$pk->x = $b->x;
$pk->z = $b->z;
$pk->y = $b->y;
$pk->blockId = $fullBlock >> 4; $pk->blockId = $fullBlock >> 4;
$pk->blockData = $fullBlock & 0xf; $pk->blockData = $fullBlock & 0xf;
$pk->flags = $flags;
} }
$this->server->broadcastPacket($target, $pk);
$pk->flags = $flags;
$packets[] = $pk;
} }
} }
$this->server->batchPackets($target, $packets, false, false);
} }
public function clearCache(bool $full = false){ public function clearCache(bool $full = false){