From 1e0f1e5b1a5ff28e05cbdbe4078e3a8bb297b586 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 14 Mar 2019 15:06:13 +0000 Subject: [PATCH] RegionLoader: Stop unnecessarily writing location header on close Any time a region is modified, the location header is written anyway, so this is entirely unnecessary. --- .../format/io/region/RegionLevelProvider.php | 2 +- .../level/format/io/region/RegionLoader.php | 25 ++----------------- 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/src/pocketmine/level/format/io/region/RegionLevelProvider.php b/src/pocketmine/level/format/io/region/RegionLevelProvider.php index da8376226..d0e634bea 100644 --- a/src/pocketmine/level/format/io/region/RegionLevelProvider.php +++ b/src/pocketmine/level/format/io/region/RegionLevelProvider.php @@ -148,7 +148,7 @@ abstract class RegionLevelProvider extends BaseLevelProvider{ $logger = \GlobalLogger::get(); $logger->error("Corrupted region file detected: " . $e->getMessage()); - $region->close(false); //Do not write anything to the file + $region->close(); //Do not write anything to the file $backupPath = $path . ".bak." . time(); rename($path, $backupPath); diff --git a/src/pocketmine/level/format/io/region/RegionLoader.php b/src/pocketmine/level/format/io/region/RegionLoader.php index 8b6c9e9e9..3deb687bb 100644 --- a/src/pocketmine/level/format/io/region/RegionLoader.php +++ b/src/pocketmine/level/format/io/region/RegionLoader.php @@ -40,7 +40,6 @@ use function fwrite; use function is_resource; use function max; use function ord; -use function pack; use function str_pad; use function stream_set_read_buffer; use function stream_set_write_buffer; @@ -102,7 +101,6 @@ class RegionLoader{ public function __destruct(){ if(is_resource($this->filePointer)){ - $this->writeLocationTable(); fclose($this->filePointer); } } @@ -244,16 +242,10 @@ class RegionLoader{ } /** - * Writes the region header and closes the file - * - * @param bool $writeHeader + * Closes the file */ - public function close(bool $writeHeader = true) : void{ + public function close() : void{ if(is_resource($this->filePointer)){ - if($writeHeader){ - $this->writeLocationTable(); - } - fclose($this->filePointer); } } @@ -320,19 +312,6 @@ class RegionLoader{ } } - private function writeLocationTable() : void{ - $write = []; - - for($i = 0; $i < 1024; ++$i){ - $write[] = (($this->locationTable[$i]->getFirstSector() << 8) | $this->locationTable[$i]->getSectorCount()); - } - for($i = 0; $i < 1024; ++$i){ - $write[] = $this->locationTable[$i]->getTimestamp(); - } - fseek($this->filePointer, 0); - fwrite($this->filePointer, pack("N*", ...$write), 4096 * 2); - } - protected function writeLocationIndex(int $index) : void{ fseek($this->filePointer, $index << 2); fwrite($this->filePointer, Binary::writeInt(($this->locationTable[$index]->getFirstSector() << 8) | $this->locationTable[$index]->getSectorCount()), 4);