From 9c405e9db58f9e07c3bb72fc549441ace96ced15 Mon Sep 17 00:00:00 2001 From: Benedikt05 <60869945+Benedikt05@users.noreply.github.com> Date: Fri, 12 Dec 2025 15:38:38 +0100 Subject: [PATCH 1/2] fix: try to fix the boat movement --- src/pocketmine/Player.php | 13 +++++++- src/pocketmine/entity/vehicle/Boat.php | 42 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 635b6b15..0da4d801 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -188,6 +188,7 @@ use pocketmine\network\mcpe\protocol\types\DisconnectFailReason; use pocketmine\network\mcpe\protocol\types\Experiments; use pocketmine\network\mcpe\protocol\types\GameMode; +use pocketmine\network\mcpe\protocol\types\InputMode; use pocketmine\network\mcpe\protocol\types\inventory\MismatchTransactionData; use pocketmine\network\mcpe\protocol\types\inventory\NormalTransactionData; use pocketmine\network\mcpe\protocol\types\inventory\ReleaseItemTransactionData; @@ -2772,13 +2773,23 @@ public function handlePlayerAuthInput(PlayerAuthInputPacket $packet) : bool{ if($this->isRiding()){ $ent = $this->getRidingEntity(); - $vehicle = $packet->getVehicleInfo(); + /*$vehicle = $packet->getVehicleInfo(); if(!$inputFlags->get(PlayerAuthInputFlags::START_JUMPING)){ if($ent instanceof Boat && $vehicle !== null && $vehicle->getPredictedVehicleActorUniqueId() === $ent->getId()){ $yaw = fmod($packet->getYaw() + 90, 360); $ent->setClientPositionAndRotation($packet->getPosition(), $yaw, 0, 3, true); + */ + if($ent instanceof Boat){ + $inputFlags = $packet->getInputFlags(); + $moveZ = $packet->getMoveVecZ(); + $originalPaddlingLeft = $inputFlags->get(PlayerAuthInputFlags::PADDLING_LEFT); + $originalPaddlingRight = $inputFlags->get(PlayerAuthInputFlags::PADDLING_RIGHT); + if($packet->getInputMode() === InputMode::TOUCHSCREEN){ + $originalPaddlingLeft = $packet->getMoveVecX() > 0; + $originalPaddlingRight = $packet->getMoveVecX() < 0; } + $ent->handleRiderInput($moveZ, $originalPaddlingLeft, $originalPaddlingRight); } } } diff --git a/src/pocketmine/entity/vehicle/Boat.php b/src/pocketmine/entity/vehicle/Boat.php index 1d16ba9a..8c816b57 100644 --- a/src/pocketmine/entity/vehicle/Boat.php +++ b/src/pocketmine/entity/vehicle/Boat.php @@ -88,6 +88,48 @@ public function setBoatType(int $boatType) : void{ $this->propertyManager->setInt(self::DATA_VARIANT, $boatType); } + public function handleRiderInput(float $moveZ, bool $originalPaddlingLeft, bool $originalPaddlingRight) : void{ + $maxSpeed = 0.4; + + $yaw = $this->getYaw(); + $pitch = $this->getPitch(); + $isMovingForward = abs($moveZ) > 0.01; + + if($originalPaddlingLeft xor $originalPaddlingRight){ + $yaw += ($originalPaddlingRight ? 3.0 : -3.0); + $this->setRotation($yaw, $pitch); + } + + $dirX = 0.0; + $dirZ = 0.0; + + if($isMovingForward){ + $radYaw = deg2rad($yaw + 90); + $input = $moveZ; + + $dirX = sin($radYaw) * $input * $maxSpeed; + $dirZ = -cos($radYaw) * $input * $maxSpeed; + } + + $this->setMotion(new Vector3($dirX, $this->getMotion()->y, $dirZ)); + + $isPaddlingLeft = $originalPaddlingLeft; + $isPaddlingRight = $originalPaddlingRight; + + if($isMovingForward){ + $isPaddlingLeft = $isPaddlingRight = true; + } + + $animation_delta = 0.04; + + if($isMovingForward && $moveZ < 0){ + $animation_delta = -0.04; + } + + $this->setPaddleTimeLeft($isPaddlingLeft ? $this->getPaddleTimeLeft() + $animation_delta : 0); + $this->setPaddleTimeRight($isPaddlingRight ? $this->getPaddleTimeRight() + $animation_delta : 0); + } + public function setClientPositionAndRotation(Vector3 $pos, float $yaw, float $pitch, int $clientMoveTicks, bool $immediate) : void{ $riddenByEntity = $this->getRiddenByEntity(); From 568f71297b3b744fbb42af4ce3cd8e1925ab5731 Mon Sep 17 00:00:00 2001 From: Benedikt05 <60869945+Benedikt05@users.noreply.github.com> Date: Sun, 14 Dec 2025 18:24:49 +0100 Subject: [PATCH 2/2] improve --- src/pocketmine/Player.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 0da4d801..6e0ada08 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2786,8 +2786,8 @@ public function handlePlayerAuthInput(PlayerAuthInputPacket $packet) : bool{ $originalPaddlingLeft = $inputFlags->get(PlayerAuthInputFlags::PADDLING_LEFT); $originalPaddlingRight = $inputFlags->get(PlayerAuthInputFlags::PADDLING_RIGHT); if($packet->getInputMode() === InputMode::TOUCHSCREEN){ - $originalPaddlingLeft = $packet->getMoveVecX() > 0; - $originalPaddlingRight = $packet->getMoveVecX() < 0; + $originalPaddlingLeft = $packet->getMoveVecX() > 0.35; + $originalPaddlingRight = $packet->getMoveVecX() < -0.35; } $ent->handleRiderInput($moveZ, $originalPaddlingLeft, $originalPaddlingRight); }