From 4f47dac8ec4e36f652b583d91d50331ec1dfa860 Mon Sep 17 00:00:00 2001 From: Alejandro Liu Date: Fri, 13 Mar 2015 06:23:32 +0100 Subject: [PATCH 1/2] Fix some Chunk corrumption due to Chunk overlap --- src/pocketmine/level/format/mcregion/RegionLoader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pocketmine/level/format/mcregion/RegionLoader.php b/src/pocketmine/level/format/mcregion/RegionLoader.php index 6a1142d28..2735683fa 100644 --- a/src/pocketmine/level/format/mcregion/RegionLoader.php +++ b/src/pocketmine/level/format/mcregion/RegionLoader.php @@ -189,8 +189,8 @@ class RegionLoader{ $sectors = (int) ceil(($length + 4) / 4096); $index = self::getChunkOffset($x, $z); if($this->locationTable[$index][1] < $sectors){ + $this->locationTable[$index][0] = $this->lastSector+1; $this->lastSector += $sectors; //The GC will clean this shift "later" - $this->locationTable[$index][0] = $this->lastSector; } $this->locationTable[$index][1] = $sectors; $this->locationTable[$index][2] = time(); From 59e9446fe5711215a09537dfc420ba4fa349afe2 Mon Sep 17 00:00:00 2001 From: Alejandro Liu Date: Fri, 13 Mar 2015 08:19:47 +0100 Subject: [PATCH 2/2] Added another place where the same happens --- src/pocketmine/level/format/mcregion/RegionLoader.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/level/format/mcregion/RegionLoader.php b/src/pocketmine/level/format/mcregion/RegionLoader.php index 2735683fa..ec833c242 100644 --- a/src/pocketmine/level/format/mcregion/RegionLoader.php +++ b/src/pocketmine/level/format/mcregion/RegionLoader.php @@ -247,7 +247,8 @@ class RegionLoader{ $chunk = Binary::writeInt(strlen($chunk)) . $chunk; $sectors = (int) ceil(strlen($chunk) / 4096); if($sectors > $this->locationTable[$i][1]){ - $this->locationTable[$i][0] = $this->lastSector += $sectors; + $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));