From c869a7f099237ca189dc574fe3df6e7630eeec51 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 24 Apr 2020 23:18:29 +0100 Subject: [PATCH] HandshakePacketHandler no longer depends on NetworkSession --- src/network/mcpe/NetworkSession.php | 6 +- .../mcpe/handler/HandshakePacketHandler.php | 17 +++-- src/world/biome/BiomeRegistry.php | 69 +++++++++++++++++++ 3 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 src/world/biome/BiomeRegistry.php diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 85863b12f..be754503f 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -548,7 +548,9 @@ class NetworkSession{ $this->cipher = new NetworkCipher($encryptionKey); - $this->setHandler(new HandshakePacketHandler($this)); + $this->setHandler(new HandshakePacketHandler(function() : void{ + $this->onLoginSuccess(); + })); $this->logger->debug("Enabled encryption"); })); }else{ @@ -557,7 +559,7 @@ class NetworkSession{ } } - public function onLoginSuccess() : void{ + private function onLoginSuccess() : void{ $this->loggedIn = true; $this->sendDataPacket(PlayStatusPacket::create(PlayStatusPacket::LOGIN_SUCCESS)); diff --git a/src/network/mcpe/handler/HandshakePacketHandler.php b/src/network/mcpe/handler/HandshakePacketHandler.php index 451351941..ed64da49f 100644 --- a/src/network/mcpe/handler/HandshakePacketHandler.php +++ b/src/network/mcpe/handler/HandshakePacketHandler.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\handler; -use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\ClientToServerHandshakePacket; /** @@ -31,15 +30,21 @@ use pocketmine\network\mcpe\protocol\ClientToServerHandshakePacket; */ class HandshakePacketHandler extends PacketHandler{ - /** @var NetworkSession */ - private $session; + /** + * @var \Closure + * @phpstan-var \Closure() : void + */ + private $onHandshakeCompleted; - public function __construct(NetworkSession $session){ - $this->session = $session; + /** + * @phpstan-param \Closure() : void $onHandshakeCompleted + */ + public function __construct(\Closure $onHandshakeCompleted){ + $this->onHandshakeCompleted = $onHandshakeCompleted; } public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool{ - $this->session->onLoginSuccess(); + ($this->onHandshakeCompleted)(); return true; } } diff --git a/src/world/biome/BiomeRegistry.php b/src/world/biome/BiomeRegistry.php new file mode 100644 index 000000000..83e4023ea --- /dev/null +++ b/src/world/biome/BiomeRegistry.php @@ -0,0 +1,69 @@ + + */ + private $biomes; + + public function __construct(){ + $this->biomes = new \SplFixedArray(Biome::MAX_BIOMES); + + $this->register(Biome::OCEAN, new OceanBiome()); + $this->register(Biome::PLAINS, new PlainBiome()); + $this->register(Biome::DESERT, new DesertBiome()); + $this->register(Biome::MOUNTAINS, new MountainsBiome()); + $this->register(Biome::FOREST, new ForestBiome()); + $this->register(Biome::TAIGA, new TaigaBiome()); + $this->register(Biome::SWAMP, new SwampBiome()); + $this->register(Biome::RIVER, new RiverBiome()); + + $this->register(Biome::ICE_PLAINS, new IcePlainsBiome()); + + $this->register(Biome::SMALL_MOUNTAINS, new SmallMountainsBiome()); + + $this->register(Biome::BIRCH_FOREST, new ForestBiome(TreeType::BIRCH())); + } + + public function register(int $id, Biome $biome) : void{ + $this->biomes[$id] = $biome; + $biome->setId($id); + } + + public function getBiome(int $id) : Biome{ + if($this->biomes[$id] === null){ + $this->register($id, new UnknownBiome()); + } + + return $this->biomes[$id]; + } +} \ No newline at end of file