From f1ddb130b65e20f894deddf56b03c977be462e89 Mon Sep 17 00:00:00 2001 From: Dries C Date: Fri, 14 Jun 2024 14:59:34 +0200 Subject: [PATCH] Revive TickSyncPacket --- ProxyThread.php | 4 +++ data/TickSyncPacket.php | 54 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/ProxyThread.php b/ProxyThread.php index ab024f9..d67574b 100644 --- a/ProxyThread.php +++ b/ProxyThread.php @@ -6,7 +6,9 @@ namespace libproxy; +use libproxy\data\TickSyncPacket; use pmmp\thread\ThreadSafeArray; +use pocketmine\network\mcpe\protocol\PacketPool; use pocketmine\Server; use pocketmine\snooze\SleeperHandlerEntry; use pocketmine\thread\log\AttachableThreadSafeLogger; @@ -97,6 +99,8 @@ protected function onRun(): void require $this->autoloaderPath; } + PacketPool::getInstance()->registerPacket(new TickSyncPacket()); + $proxy = new ProxyServer( $this->logger, $this->createServerSocket(), diff --git a/data/TickSyncPacket.php b/data/TickSyncPacket.php index 3a52923..c3cf043 100644 --- a/data/TickSyncPacket.php +++ b/data/TickSyncPacket.php @@ -7,10 +7,62 @@ use libproxy\ProxyNetworkInterface; use pocketmine\network\mcpe\handler\InGamePacketHandler; use pocketmine\network\mcpe\NetworkSession; +use pocketmine\network\mcpe\protocol\ClientboundPacket; +use pocketmine\network\mcpe\protocol\DataPacket; use pocketmine\network\mcpe\protocol\PacketHandlerInterface; +use pocketmine\network\mcpe\protocol\serializer\PacketSerializer; +use pocketmine\network\mcpe\protocol\ServerboundPacket; -class TickSyncPacket extends \pocketmine\network\mcpe\protocol\TickSyncPacket +class TickSyncPacket extends DataPacket implements ClientboundPacket, ServerboundPacket { + public const NETWORK_ID = 0x17; + + private int $clientSendTime; + private int $serverReceiveTime; + + /** + * @generate-create-func + */ + private static function create(int $clientSendTime, int $serverReceiveTime): self + { + $result = new self; + $result->clientSendTime = $clientSendTime; + $result->serverReceiveTime = $serverReceiveTime; + return $result; + } + + public static function request(int $clientTime): self + { + return self::create($clientTime, 0 /* useless, but always written anyway */); + } + + public static function response(int $clientSendTime, int $serverReceiveTime): self + { + return self::create($clientSendTime, $serverReceiveTime); + } + + public function getClientSendTime(): int + { + return $this->clientSendTime; + } + + public function getServerReceiveTime(): int + { + return $this->serverReceiveTime; + } + + protected function decodePayload(PacketSerializer $in): void + { + $this->clientSendTime = $in->getLLong(); + $this->serverReceiveTime = $in->getLLong(); + } + + protected function encodePayload(PacketSerializer $out): void + { + $out->putLLong($this->clientSendTime); + $out->putLLong($this->serverReceiveTime); + } + public function handle(PacketHandlerInterface $handler): bool { if (!($handler instanceof InGamePacketHandler)) {