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 */
public $tickRateCounter = 0;
/** @var bool */
private $doingTick = false;
/** @var string|Generator */
private $generator;
@ -528,8 +531,12 @@ class Level implements ChunkManager, Metadatable{
* @param bool $force default false, force unload of default level
*
* @return bool
* @throws \InvalidStateException if trying to unload a level during level tick
*/
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);
@ -697,7 +704,16 @@ class Level implements ChunkManager, Metadatable{
}
$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->sunAnglePercentage = $this->computeSunAnglePercentage(); //Sun angle depends on the current time
@ -818,8 +834,6 @@ class Level implements ChunkManager, Metadatable{
}
$this->chunkPackets = [];
$this->timings->doTick->stopTiming();
}
public function checkSleep(){