diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index 11ac268de7..ab29ea83f1 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -227,6 +227,7 @@ abstract class Entity extends Location implements Metadatable, EntityIds{ throw new \InvalidStateException("Cannot create entities in unloaded chunks"); } + $this->motion = new Vector3(0, 0, 0); if($nbt->hasTag("Motion", ListTag::class)){ /** @var float[] $motion */ $motion = $nbt->getListTag("Motion")->getAllValues(); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 36258439c1..4ffb989eb8 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -111,6 +111,8 @@ use function trim; use const INT32_MAX; use const INT32_MIN; use const M_PI; +use const PHP_INT_MAX; +use const PHP_INT_MIN; #include @@ -706,7 +708,7 @@ class Level implements ChunkManager, Metadatable{ */ public function sendTime(Player ...$targets){ $pk = new SetTimePacket(); - $pk->time = $this->time; + $pk->time = $this->time & 0xffffffff; //avoid overflowing the field, since the packet uses an int32 if(empty($targets)){ $this->broadcastGlobalPacket($pk); @@ -742,7 +744,12 @@ class Level implements ChunkManager, Metadatable{ protected function actuallyDoTick(int $currentTick) : void{ if(!$this->stopTime){ - $this->time++; + //this simulates an overflow, as would happen in any language which doesn't do stupid things to var types + if($this->time === PHP_INT_MAX){ + $this->time = PHP_INT_MIN; + }else{ + $this->time++; + } } $this->sunAnglePercentage = $this->computeSunAnglePercentage(); //Sun angle depends on the current time