Level: Bail on trying to unload a level during level tick (#2435)

This commit is contained in:
Dylan K. Taylor 2018-09-22 13:40:50 +01:00 committed by GitHub
parent 2712287995
commit 5eeaeb6c3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -241,6 +241,9 @@ class Level implements ChunkManager, Metadatable{
/** @var int */ /** @var int */
public $tickRateCounter = 0; public $tickRateCounter = 0;
/** @var bool */
private $doingTick = false;
/** @var string|Generator */ /** @var string|Generator */
private $generator; private $generator;
@ -528,8 +531,12 @@ class Level implements ChunkManager, Metadatable{
* @param bool $force default false, force unload of default level * @param bool $force default false, force unload of default level
* *
* @return bool * @return bool
* @throws \InvalidStateException if trying to unload a level during level tick
*/ */
public function unload(bool $force = false) : bool{ public function unload(bool $force = false) : bool{
if($this->doingTick and !$force){
throw new \InvalidStateException("Cannot unload a level during level tick");
}
$ev = new LevelUnloadEvent($this); $ev = new LevelUnloadEvent($this);
@ -697,7 +704,16 @@ class Level implements ChunkManager, Metadatable{
} }
$this->timings->doTick->startTiming(); $this->timings->doTick->startTiming();
$this->doingTick = true;
try{
$this->actuallyDoTick($currentTick);
}finally{
$this->doingTick = false;
$this->timings->doTick->stopTiming();
}
}
protected function actuallyDoTick(int $currentTick) : void{
$this->checkTime(); $this->checkTime();
$this->sunAnglePercentage = $this->computeSunAnglePercentage(); //Sun angle depends on the current time $this->sunAnglePercentage = $this->computeSunAnglePercentage(); //Sun angle depends on the current time
@ -818,8 +834,6 @@ class Level implements ChunkManager, Metadatable{
} }
$this->chunkPackets = []; $this->chunkPackets = [];
$this->timings->doTick->stopTiming();
} }
public function checkSleep(){ public function checkSleep(){