Skip to content

Commit

Permalink
Update field order and fix enum values in CorrectPlayerMovePrediction…
Browse files Browse the repository at this point in the history
…Packet (#259)
  • Loading branch information
TobiasGrether authored Aug 13, 2024
1 parent 5db8d10 commit a871e12
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions src/CorrectPlayerMovePredictionPacket.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,45 @@

namespace pocketmine\network\mcpe\protocol;

use pocketmine\math\Vector2;
use pocketmine\math\Vector3;
use pocketmine\network\mcpe\protocol\serializer\PacketSerializer;

class CorrectPlayerMovePredictionPacket extends DataPacket implements ClientboundPacket{
public const NETWORK_ID = ProtocolInfo::CORRECT_PLAYER_MOVE_PREDICTION_PACKET;

public const PREDICTION_TYPE_VEHICLE = 0;
public const PREDICTION_TYPE_PLAYER = 1;
public const PREDICTION_TYPE_PLAYER = 0;
public const PREDICTION_TYPE_VEHICLE = 1;

private Vector3 $position;
private Vector3 $delta;
private bool $onGround;
private int $tick;
private int $predictionType;
private ?Vector2 $vehicleRotation;

/**
* @generate-create-func
*/
public static function create(Vector3 $position, Vector3 $delta, bool $onGround, int $tick, int $predictionType) : self{
private static function internalCreate(Vector3 $position, Vector3 $delta, bool $onGround, int $tick, int $predictionType, ?Vector2 $vehicleRotation) : self{
$result = new self;
$result->position = $position;
$result->delta = $delta;
$result->onGround = $onGround;
$result->tick = $tick;
$result->predictionType = $predictionType;
$result->vehicleRotation = $vehicleRotation;
return $result;
}

public static function create(Vector3 $position, Vector3 $delta, bool $onGround, int $tick, int $predictionType, ?Vector2 $vehicleRotation) : self{
if($predictionType === self::PREDICTION_TYPE_VEHICLE && $vehicleRotation === null){
throw new \LogicException("CorrectPlayerMovePredictionPackets with type VEHICLE require a vehicleRotation to be provided");
}

return self::internalCreate($position, $delta, $onGround, $tick, $predictionType, $vehicleRotation);
}

public function getPosition() : Vector3{ return $this->position; }

public function getDelta() : Vector3{ return $this->delta; }
Expand All @@ -52,20 +63,33 @@ public function getTick() : int{ return $this->tick; }

public function getPredictionType() : int{ return $this->predictionType; }

public function getVehicleRotation() : ?Vector2{ return $this->vehicleRotation; }

protected function decodePayload(PacketSerializer $in) : void{
$this->predictionType = $in->getByte();
$this->position = $in->getVector3();
$this->delta = $in->getVector3();
if($this->predictionType === self::PREDICTION_TYPE_VEHICLE){
$this->vehicleRotation = new Vector2($in->getFloat(), $in->getFloat());
}
$this->onGround = $in->getBool();
$this->tick = $in->getUnsignedVarLong();
$this->predictionType = $in->getByte();
}

protected function encodePayload(PacketSerializer $out) : void{
$out->putByte($this->predictionType);
$out->putVector3($this->position);
$out->putVector3($this->delta);
if($this->predictionType === self::PREDICTION_TYPE_VEHICLE){
if($this->vehicleRotation === null){ // this should never be the case
throw new \LogicException("CorrectPlayerMovePredictionPackets with type VEHICLE require a vehicleRotation to be provided");
}

$out->putFloat($this->vehicleRotation->getX());
$out->putFloat($this->vehicleRotation->getY());
}
$out->putBool($this->onGround);
$out->putUnsignedVarLong($this->tick);
$out->putByte($this->predictionType);
}

public function handle(PacketHandlerInterface $handler) : bool{
Expand Down

0 comments on commit a871e12

Please sign in to comment.