diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index d294567dd..8a4536dc3 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -116,6 +116,7 @@ use pocketmine\network\mcpe\protocol\BlockEntityDataPacket; use pocketmine\network\mcpe\protocol\BlockEventPacket; use pocketmine\network\mcpe\protocol\ChangeDimensionPacket; use pocketmine\network\mcpe\protocol\ChunkRadiusUpdatedPacket; +use pocketmine\network\mcpe\protocol\ClientToServerHandshakePacket; use pocketmine\network\mcpe\protocol\CommandStepPacket; use pocketmine\network\mcpe\protocol\ContainerClosePacket; use pocketmine\network\mcpe\protocol\ContainerOpenPacket; @@ -157,6 +158,7 @@ use pocketmine\network\mcpe\protocol\ResourcePacksInfoPacket; use pocketmine\network\mcpe\protocol\ResourcePackStackPacket; use pocketmine\network\mcpe\protocol\RespawnPacket; use pocketmine\network\mcpe\protocol\RiderJumpPacket; +use pocketmine\network\mcpe\protocol\ServerToClientHandshakePacket; use pocketmine\network\mcpe\protocol\SetCommandsEnabledPacket; use pocketmine\network\mcpe\protocol\SetDifficultyPacket; use pocketmine\network\mcpe\protocol\SetEntityDataPacket; @@ -1966,6 +1968,14 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade return false; } + public function handleServerToClientHandshake(ServerToClientHandshakePacket $packet) : bool{ + return false; + } + + public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool{ + return false; //TODO + } + public function handleDisconnect(DisconnectPacket $packet) : bool{ return false; } diff --git a/src/pocketmine/network/Network.php b/src/pocketmine/network/Network.php index f29cc153b..8dff1ebd4 100644 --- a/src/pocketmine/network/Network.php +++ b/src/pocketmine/network/Network.php @@ -38,6 +38,7 @@ use pocketmine\network\mcpe\protocol\BlockEntityDataPacket; use pocketmine\network\mcpe\protocol\BlockEventPacket; use pocketmine\network\mcpe\protocol\ChangeDimensionPacket; use pocketmine\network\mcpe\protocol\ChunkRadiusUpdatedPacket; +use pocketmine\network\mcpe\protocol\ClientToServerHandshakePacket; use pocketmine\network\mcpe\protocol\CommandStepPacket; use pocketmine\network\mcpe\protocol\ContainerClosePacket; use pocketmine\network\mcpe\protocol\ContainerOpenPacket; @@ -77,6 +78,7 @@ use pocketmine\network\mcpe\protocol\ResourcePackClientResponsePacket; use pocketmine\network\mcpe\protocol\ResourcePacksInfoPacket; use pocketmine\network\mcpe\protocol\RespawnPacket; use pocketmine\network\mcpe\protocol\RiderJumpPacket; +use pocketmine\network\mcpe\protocol\ServerToClientHandshakePacket; use pocketmine\network\mcpe\protocol\SetCommandsEnabledPacket; use pocketmine\network\mcpe\protocol\SetDifficultyPacket; use pocketmine\network\mcpe\protocol\SetEntityDataPacket; @@ -321,6 +323,7 @@ class Network{ $this->registerPacket(ProtocolInfo::BLOCK_EVENT_PACKET, BlockEventPacket::class); $this->registerPacket(ProtocolInfo::CHANGE_DIMENSION_PACKET, ChangeDimensionPacket::class); $this->registerPacket(ProtocolInfo::CHUNK_RADIUS_UPDATED_PACKET, ChunkRadiusUpdatedPacket::class); + $this->registerPacket(ProtocolInfo::CLIENT_TO_SERVER_HANDSHAKE_PACKET, ClientToServerHandshakePacket::class); $this->registerPacket(ProtocolInfo::COMMAND_STEP_PACKET, CommandStepPacket::class); $this->registerPacket(ProtocolInfo::CONTAINER_CLOSE_PACKET, ContainerClosePacket::class); $this->registerPacket(ProtocolInfo::CONTAINER_OPEN_PACKET, ContainerOpenPacket::class); @@ -358,6 +361,7 @@ class Network{ $this->registerPacket(ProtocolInfo::RESOURCE_PACKS_INFO_PACKET, ResourcePacksInfoPacket::class); $this->registerPacket(ProtocolInfo::RESPAWN_PACKET, RespawnPacket::class); $this->registerPacket(ProtocolInfo::RIDER_JUMP_PACKET, RiderJumpPacket::class); + $this->registerPacket(ProtocolInfo::SERVER_TO_CLIENT_HANDSHAKE_PACKET, ServerToClientHandshakePacket::class); $this->registerPacket(ProtocolInfo::SET_COMMANDS_ENABLED_PACKET, SetCommandsEnabledPacket::class); $this->registerPacket(ProtocolInfo::SET_DIFFICULTY_PACKET, SetDifficultyPacket::class); $this->registerPacket(ProtocolInfo::SET_ENTITY_DATA_PACKET, SetEntityDataPacket::class); diff --git a/src/pocketmine/network/mcpe/NetworkSession.php b/src/pocketmine/network/mcpe/NetworkSession.php index bb86fe2d8..89b91b488 100644 --- a/src/pocketmine/network/mcpe/NetworkSession.php +++ b/src/pocketmine/network/mcpe/NetworkSession.php @@ -37,6 +37,7 @@ use pocketmine\network\mcpe\protocol\BlockEntityDataPacket; use pocketmine\network\mcpe\protocol\BlockEventPacket; use pocketmine\network\mcpe\protocol\ChangeDimensionPacket; use pocketmine\network\mcpe\protocol\ChunkRadiusUpdatedPacket; +use pocketmine\network\mcpe\protocol\ClientToServerHandshakePacket; use pocketmine\network\mcpe\protocol\CommandStepPacket; use pocketmine\network\mcpe\protocol\ContainerClosePacket; use pocketmine\network\mcpe\protocol\ContainerOpenPacket; @@ -76,6 +77,7 @@ use pocketmine\network\mcpe\protocol\ResourcePacksInfoPacket; use pocketmine\network\mcpe\protocol\ResourcePackStackPacket; use pocketmine\network\mcpe\protocol\RespawnPacket; use pocketmine\network\mcpe\protocol\RiderJumpPacket; +use pocketmine\network\mcpe\protocol\ServerToClientHandshakePacket; use pocketmine\network\mcpe\protocol\SetCommandsEnabledPacket; use pocketmine\network\mcpe\protocol\SetDifficultyPacket; use pocketmine\network\mcpe\protocol\SetEntityDataPacket; @@ -101,9 +103,9 @@ interface NetworkSession{ public function handlePlayStatus(PlayStatusPacket $packet) : bool; - //public function handleServerToClientHandshake(ServerToClientHandshakePacket $packet) : bool; //TODO + public function handleServerToClientHandshake(ServerToClientHandshakePacket $packet) : bool; - //public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool; //TODO + public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool; public function handleDisconnect(DisconnectPacket $packet) : bool; diff --git a/src/pocketmine/network/mcpe/protocol/ClientToServerHandshakePacket.php b/src/pocketmine/network/mcpe/protocol/ClientToServerHandshakePacket.php new file mode 100644 index 000000000..dcb1d7a49 --- /dev/null +++ b/src/pocketmine/network/mcpe/protocol/ClientToServerHandshakePacket.php @@ -0,0 +1,44 @@ + + + +use pocketmine\network\mcpe\NetworkSession; + +class ClientToServerHandshakePacket extends DataPacket{ + const NETWORK_ID = ProtocolInfo::CLIENT_TO_SERVER_HANDSHAKE_PACKET; + + public function decode(){ + //No payload + } + + public function encode(){ + $this->reset(); + //No payload + } + + public function handle(NetworkSession $session) : bool{ + return $session->handleClientToServerHandshake($this); + } +} diff --git a/src/pocketmine/network/mcpe/protocol/ServerToClientHandshakePacket.php b/src/pocketmine/network/mcpe/protocol/ServerToClientHandshakePacket.php new file mode 100644 index 000000000..5ef9583f1 --- /dev/null +++ b/src/pocketmine/network/mcpe/protocol/ServerToClientHandshakePacket.php @@ -0,0 +1,49 @@ + + + +use pocketmine\network\mcpe\NetworkSession; + +class ServerToClientHandshakePacket extends DataPacket{ + const NETWORK_ID = ProtocolInfo::SERVER_TO_CLIENT_HANDSHAKE_PACKET; + + public $publicKey; + public $serverToken; + + public function decode(){ + $this->publicKey = $this->getString(); + $this->serverToken = $this->getString(); + } + + public function encode(){ + $this->reset(); + $this->putString($this->publicKey); + $this->putString($this->serverToken); + } + + public function handle(NetworkSession $session) : bool{ + return $session->handleServerToClientHandshake($this); + } +} \ No newline at end of file