diff --git a/src/pocketmine/level/format/io/region/RegionLoader.php b/src/pocketmine/level/format/io/region/RegionLoader.php index 15b868bf1..082476a93 100644 --- a/src/pocketmine/level/format/io/region/RegionLoader.php +++ b/src/pocketmine/level/format/io/region/RegionLoader.php @@ -198,81 +198,6 @@ class RegionLoader{ } } - public function doSlowCleanUp() : int{ - for($i = 0; $i < 1024; ++$i){ - if($this->locationTable[$i][0] === 0 or $this->locationTable[$i][1] === 0){ - continue; - } - fseek($this->filePointer, $this->locationTable[$i][0] << 12); - $chunk = fread($this->filePointer, $this->locationTable[$i][1] << 12); - $length = Binary::readInt(substr($chunk, 0, 4)); - if($length <= 1){ - $this->locationTable[$i] = [0, 0, 0]; //Non-generated chunk, remove it from index - } - - try{ - $chunk = zlib_decode(substr($chunk, 5)); - }catch(\Throwable $e){ - $this->locationTable[$i] = [0, 0, 0]; //Corrupted chunk, remove it - continue; - } - - $chunk = chr(self::COMPRESSION_ZLIB) . zlib_encode($chunk, ZLIB_ENCODING_DEFLATE, 9); - $chunk = Binary::writeInt(strlen($chunk)) . $chunk; - $sectors = (int) ceil(strlen($chunk) / 4096); - if($sectors > $this->locationTable[$i][1]){ - $this->locationTable[$i][0] = $this->lastSector + 1; - $this->lastSector += $sectors; - } - fseek($this->filePointer, $this->locationTable[$i][0] << 12); - fwrite($this->filePointer, str_pad($chunk, $sectors << 12, "\x00", STR_PAD_RIGHT)); - } - $this->writeLocationTable(); - $n = $this->cleanGarbage(); - $this->writeLocationTable(); - - return $n; - } - - private function cleanGarbage() : int{ - $sectors = []; - foreach($this->locationTable as $index => $data){ //Calculate file usage - if($data[0] === 0 or $data[1] === 0){ - $this->locationTable[$index] = [0, 0, 0]; - continue; - } - for($i = 0; $i < $data[1]; ++$i){ - $sectors[$data[0]] = $index; - } - } - - if(count($sectors) === ($this->lastSector - 2)){ //No collection needed - return 0; - } - - ksort($sectors); - $shift = 0; - $lastSector = 1; //First chunk - 1 - - fseek($this->filePointer, 8192); - $sector = 2; - foreach($sectors as $sector => $index){ - if(($sector - $lastSector) > 1){ - $shift += $sector - $lastSector - 1; - } - if($shift > 0){ - fseek($this->filePointer, $sector << 12); - $old = fread($this->filePointer, 4096); - fseek($this->filePointer, ($sector - $shift) << 12); - fwrite($this->filePointer, $old, 4096); - } - $this->locationTable[$index][0] -= $shift; - $lastSector = $sector; - } - ftruncate($this->filePointer, ($sector + 1) << 12); //Truncate to the end of file written - return $shift; - } - protected function loadLocationTable(){ fseek($this->filePointer, 0); $this->lastSector = 1;