27    public const AUDIO_LISTENER_TYPE_CAMERA = 0;
 
   28    public const AUDIO_LISTENER_TYPE_PLAYER = 1;
 
   30    public function __construct(
 
   32        private string $parent,
 
   33        private ?
float $xPosition,
 
   34        private ?
float $yPosition,
 
   35        private ?
float $zPosition,
 
   36        private ?
float $pitch,
 
   38        private ?
float $rotationSpeed,
 
   39        private ?
bool $snapToTarget,
 
   40        private ?
Vector2 $horizontalRotationLimit,
 
   41        private ?
Vector2 $verticalRotationLimit,
 
   42        private ?
bool $continueTargeting,
 
   43        private ?
float $blockListeningRadius,
 
   46        private ?
float $radius,
 
   47        private ?
float $yawLimitMin,
 
   48        private ?
float $yawLimitMax,
 
   49        private ?
int $audioListenerType,
 
   50        private ?
bool $playerEffects,
 
   52        private ?ControlScheme $controlScheme,
 
   55    public function getName() : 
string{ 
return $this->name; }
 
   57    public function getParent() : 
string{ 
return $this->parent; }
 
   59    public function getXPosition() : ?
float{ 
return $this->xPosition; }
 
   61    public function getYPosition() : ?
float{ 
return $this->yPosition; }
 
   63    public function getZPosition() : ?
float{ 
return $this->zPosition; }
 
   65    public function getPitch() : ?
float{ 
return $this->pitch; }
 
   67    public function getYaw() : ?
float{ 
return $this->yaw; }
 
   69    public function getRotationSpeed() : ?
float { 
return $this->rotationSpeed; }
 
   71    public function getSnapToTarget() : ?
bool { 
return $this->snapToTarget; }
 
   73    public function getHorizontalRotationLimit() : ?
Vector2{ 
return $this->horizontalRotationLimit; }
 
   75    public function getVerticalRotationLimit() : ?
Vector2{ 
return $this->verticalRotationLimit; }
 
   77    public function getContinueTargeting() : ?
bool{ 
return $this->continueTargeting; }
 
   79    public function getBlockListeningRadius() : ?
float{ 
return $this->blockListeningRadius; }
 
   81    public function getViewOffset() : ?
Vector2{ 
return $this->viewOffset; }
 
   83    public function getEntityOffset() : ?
Vector3{ 
return $this->entityOffset; }
 
   85    public function getRadius() : ?
float{ 
return $this->radius; }
 
   87    public function getYawLimitMin() : ?
float{ 
return $this->yawLimitMin; }
 
   89    public function getYawLimitMax() : ?
float{ 
return $this->yawLimitMax; }
 
   91    public function getAudioListenerType() : ?
int{ 
return $this->audioListenerType; }
 
   93    public function getPlayerEffects() : ?
bool{ 
return $this->playerEffects; }
 
   97    public function getControlScheme() : ?ControlScheme{ 
return $this->controlScheme; }
 
   99    public static function read(ByteBufferReader $in) : 
self{
 
  100        $name = CommonTypes::getString($in);
 
  101        $parent = CommonTypes::getString($in);
 
  102        $xPosition = CommonTypes::readOptional($in, LE::readFloat(...));
 
  103        $yPosition = CommonTypes::readOptional($in, LE::readFloat(...));
 
  104        $zPosition = CommonTypes::readOptional($in, LE::readFloat(...));
 
  105        $pitch = CommonTypes::readOptional($in, LE::readFloat(...));
 
  106        $yaw = CommonTypes::readOptional($in, LE::readFloat(...));
 
  107        $rotationSpeed = CommonTypes::readOptional($in, LE::readFloat(...));
 
  108        $snapToTarget = CommonTypes::readOptional($in, CommonTypes::getBool(...));
 
  109        $horizontalRotationLimit = CommonTypes::readOptional($in, CommonTypes::getVector2(...));
 
  110        $verticalRotationLimit = CommonTypes::readOptional($in, CommonTypes::getVector2(...));
 
  111        $continueTargeting = CommonTypes::readOptional($in, CommonTypes::getBool(...));
 
  112        $blockListeningRadius = CommonTypes::readOptional($in, LE::readFloat(...));
 
  113        $viewOffset = CommonTypes::readOptional($in, CommonTypes::getVector2(...));
 
  114        $entityOffset = CommonTypes::readOptional($in, CommonTypes::getVector3(...));
 
  115        $radius = CommonTypes::readOptional($in, LE::readFloat(...));
 
  116        $yawLimitMin = CommonTypes::readOptional($in, LE::readFloat(...));
 
  117        $yawLimitMax = CommonTypes::readOptional($in, LE::readFloat(...));
 
  118        $audioListenerType = CommonTypes::readOptional($in, Byte::readUnsigned(...));
 
  119        $playerEffects = CommonTypes::readOptional($in, CommonTypes::getBool(...));
 
  120        $aimAssist = CommonTypes::readOptional($in, fn() => CameraPresetAimAssist::read($in));
 
  121        $controlScheme = CommonTypes::readOptional($in, fn() => ControlScheme::fromPacket(Byte::readUnsigned($in)));
 
  133            $horizontalRotationLimit,
 
  134            $verticalRotationLimit,
 
  136            $blockListeningRadius,
 
  149    public function write(ByteBufferWriter $out) : 
void{
 
  150        CommonTypes::putString($out, $this->name);
 
  151        CommonTypes::putString($out, $this->parent);
 
  152        CommonTypes::writeOptional($out, $this->xPosition, LE::writeFloat(...));
 
  153        CommonTypes::writeOptional($out, $this->yPosition, LE::writeFloat(...));
 
  154        CommonTypes::writeOptional($out, $this->zPosition, LE::writeFloat(...));
 
  155        CommonTypes::writeOptional($out, $this->pitch, LE::writeFloat(...));
 
  156        CommonTypes::writeOptional($out, $this->yaw, LE::writeFloat(...));
 
  157        CommonTypes::writeOptional($out, $this->rotationSpeed, LE::writeFloat(...));
 
  158        CommonTypes::writeOptional($out, $this->snapToTarget, CommonTypes::putBool(...));
 
  159        CommonTypes::writeOptional($out, $this->horizontalRotationLimit, CommonTypes::putVector2(...));
 
  160        CommonTypes::writeOptional($out, $this->verticalRotationLimit, CommonTypes::putVector2(...));
 
  161        CommonTypes::writeOptional($out, $this->continueTargeting, CommonTypes::putBool(...));
 
  162        CommonTypes::writeOptional($out, $this->blockListeningRadius, LE::writeFloat(...));
 
  163        CommonTypes::writeOptional($out, $this->viewOffset, CommonTypes::putVector2(...));
 
  164        CommonTypes::writeOptional($out, $this->entityOffset, CommonTypes::putVector3(...));
 
  165        CommonTypes::writeOptional($out, $this->radius, LE::writeFloat(...));
 
  166        CommonTypes::writeOptional($out, $this->yawLimitMin, LE::writeFloat(...));
 
  167        CommonTypes::writeOptional($out, $this->yawLimitMax, LE::writeFloat(...));
 
  168        CommonTypes::writeOptional($out, $this->audioListenerType, Byte::writeUnsigned(...));
 
  169        CommonTypes::writeOptional($out, $this->playerEffects, CommonTypes::putBool(...));
 
  170        CommonTypes::writeOptional($out, $this->aimAssist, fn(ByteBufferWriter $out, 
CameraPresetAimAssist $v) => $v->write($out));
 
  171        CommonTypes::writeOptional($out, $this->controlScheme, fn(ByteBufferWriter $out, ControlScheme $v) => Byte::writeUnsigned($out, $v->value));