mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-05 11:27:07 +00:00
Merge branch 'stable'
This commit is contained in:
commit
5fa4e284bf
@ -25,7 +25,6 @@ namespace pocketmine\build\make_release;
|
|||||||
|
|
||||||
use pocketmine\utils\VersionString;
|
use pocketmine\utils\VersionString;
|
||||||
use pocketmine\VersionInfo;
|
use pocketmine\VersionInfo;
|
||||||
use function defined;
|
|
||||||
use function dirname;
|
use function dirname;
|
||||||
use function fgets;
|
use function fgets;
|
||||||
use function file_get_contents;
|
use function file_get_contents;
|
||||||
@ -86,6 +85,4 @@ function main(array $argv) : void{
|
|||||||
system('git push origin HEAD ' . $currentVer->getBaseVersion());
|
system('git push origin HEAD ' . $currentVer->getBaseVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!defined('pocketmine\_PHPSTAN_ANALYSIS')){
|
main($argv);
|
||||||
main($argv);
|
|
||||||
}
|
|
||||||
|
@ -26,7 +26,6 @@ namespace pocketmine\build\server_phar;
|
|||||||
use pocketmine\utils\Git;
|
use pocketmine\utils\Git;
|
||||||
use function array_map;
|
use function array_map;
|
||||||
use function count;
|
use function count;
|
||||||
use function defined;
|
|
||||||
use function dirname;
|
use function dirname;
|
||||||
use function file_exists;
|
use function file_exists;
|
||||||
use function getcwd;
|
use function getcwd;
|
||||||
@ -175,6 +174,4 @@ STUB
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!defined('pocketmine\_PHPSTAN_ANALYSIS')){
|
main();
|
||||||
main();
|
|
||||||
}
|
|
||||||
|
@ -267,7 +267,5 @@ namespace pocketmine {
|
|||||||
exit($exitCode);
|
exit($exitCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!defined('pocketmine\_PHPSTAN_ANALYSIS')){
|
\pocketmine\server();
|
||||||
\pocketmine\server();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -149,10 +149,7 @@ class RegionLoader{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($length > ($this->locationTable[$index]->getSectorCount() << 12)){ //Invalid chunk, bigger than defined number of sectors
|
if($length > ($this->locationTable[$index]->getSectorCount() << 12)){ //Invalid chunk, bigger than defined number of sectors
|
||||||
\GlobalLogger::get()->error("Chunk x=$x,z=$z length mismatch (expected " . ($this->locationTable[$index]->getSectorCount() << 12) . " sectors, got $length sectors)");
|
throw new CorruptedChunkException("Chunk length mismatch (expected " . ($this->locationTable[$index]->getSectorCount() << 12) . " sectors, got $length sectors)");
|
||||||
$old = $this->locationTable[$index];
|
|
||||||
$this->locationTable[$index] = new RegionLocationTableEntry($old->getFirstSector(), $length >> 12, time());
|
|
||||||
$this->writeLocationIndex($index);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$chunkData = fread($this->filePointer, $length);
|
$chunkData = fread($this->filePointer, $length);
|
||||||
@ -175,6 +172,23 @@ class RegionLoader{
|
|||||||
return $this->isChunkGenerated(self::getChunkOffset($x, $z));
|
return $this->isChunkGenerated(self::getChunkOffset($x, $z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function disposeGarbageArea(RegionLocationTableEntry $oldLocation) : void{
|
||||||
|
/* release the area containing the old copy to the garbage pool */
|
||||||
|
$this->garbageTable->add($oldLocation);
|
||||||
|
|
||||||
|
$endGarbage = $this->garbageTable->end();
|
||||||
|
$nextSector = $this->nextSector;
|
||||||
|
for(; $endGarbage !== null and $endGarbage->getLastSector() + 1 === $nextSector; $endGarbage = $this->garbageTable->end()){
|
||||||
|
$nextSector = $endGarbage->getFirstSector();
|
||||||
|
$this->garbageTable->remove($endGarbage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($nextSector !== $this->nextSector){
|
||||||
|
$this->nextSector = $nextSector;
|
||||||
|
ftruncate($this->filePointer, $this->nextSector << 12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws ChunkException
|
* @throws ChunkException
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
@ -218,20 +232,7 @@ class RegionLoader{
|
|||||||
$this->writeLocationIndex($index);
|
$this->writeLocationIndex($index);
|
||||||
|
|
||||||
if($oldLocation !== null){
|
if($oldLocation !== null){
|
||||||
/* release the area containing the old copy to the garbage pool */
|
$this->disposeGarbageArea($oldLocation);
|
||||||
$this->garbageTable->add($oldLocation);
|
|
||||||
|
|
||||||
$endGarbage = $this->garbageTable->end();
|
|
||||||
$nextSector = $this->nextSector;
|
|
||||||
for(; $endGarbage !== null and $endGarbage->getLastSector() + 1 === $nextSector; $endGarbage = $this->garbageTable->end()){
|
|
||||||
$nextSector = $endGarbage->getFirstSector();
|
|
||||||
$this->garbageTable->remove($endGarbage);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($nextSector !== $this->nextSector){
|
|
||||||
$this->nextSector = $nextSector;
|
|
||||||
ftruncate($this->filePointer, $this->nextSector << 12);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,8 +241,12 @@ class RegionLoader{
|
|||||||
*/
|
*/
|
||||||
public function removeChunk(int $x, int $z) : void{
|
public function removeChunk(int $x, int $z) : void{
|
||||||
$index = self::getChunkOffset($x, $z);
|
$index = self::getChunkOffset($x, $z);
|
||||||
|
$oldLocation = $this->locationTable[$index];
|
||||||
$this->locationTable[$index] = null;
|
$this->locationTable[$index] = null;
|
||||||
$this->writeLocationIndex($index);
|
$this->writeLocationIndex($index);
|
||||||
|
if($oldLocation !== null){
|
||||||
|
$this->disposeGarbageArea($oldLocation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,8 +21,6 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
define('pocketmine\_PHPSTAN_ANALYSIS', true);
|
|
||||||
|
|
||||||
if(!defined('LEVELDB_ZLIB_RAW_COMPRESSION')){
|
if(!defined('LEVELDB_ZLIB_RAW_COMPRESSION')){
|
||||||
//leveldb might not be loaded
|
//leveldb might not be loaded
|
||||||
define('LEVELDB_ZLIB_RAW_COMPRESSION', 4);
|
define('LEVELDB_ZLIB_RAW_COMPRESSION', 4);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user