ExampleComponents/NetworkTest.cs
public sealed class NetworkTest : Component
{
	[Property] public GameObject HoldRelative { get; set; }

	[Sync]
	GameObject Carrying { get; set; }

	protected override void OnUpdate()
	{
		if ( IsProxy )
			return;

		UpdatePickup();
	}

	protected override void OnPreRender()
	{
		if ( Carrying.IsValid() && !Carrying.IsProxy )
		{
			var offset = new Vector3( 0, 0, 40 );

			var pc = Components.Get<PlayerController>();

			Carrying.WorldPosition = HoldRelative.WorldPosition + HoldRelative.Parent.WorldRotation * offset;
			Carrying.WorldRotation = pc.Body.WorldRotation;
		}
	}

	void UpdatePickup()
	{
		if ( Carrying.IsValid() )
		{
			if ( Carrying.IsProxy )
			{
				Drop();
				return;
			}

			var offset = new Vector3( 0, 0, 40 );

			var pc = Components.Get<PlayerController>();

			Carrying.WorldPosition = HoldRelative.WorldPosition + HoldRelative.Parent.WorldRotation * offset;
			Carrying.WorldRotation = pc.Body.WorldRotation;
			//Carrying.Components.Get<Rigidbody>().Velocity = 0;
			//Carrying.Components.Get<Rigidbody>().AngularVelocity = 0;
		}

		if ( Input.Pressed( "use" ) )
		{
			var pc = Components.Get<PlayerController>();
			var lookDir = pc.EyeAngles.ToRotation();

			if ( Carrying.IsValid() )
			{
				var rb = Carrying.Components.Get<Rigidbody>( true );
				if ( rb.IsValid() )
				{
					rb.Enabled = true;
					rb.Velocity = lookDir.Forward * 300.0f + Vector3.Up * 200.0f;
				}

				Drop();
				return;
			}

			TryPickup();
		}
	}

	void TryPickup()
	{
		var pc = Components.Get<PlayerController>();
		var lookDir = pc.EyeAngles.ToRotation();
		var eyePos = WorldPosition + Vector3.Up * 60;

		var tr = Scene.Trace.WithoutTags( "player" ).Sphere( 16, eyePos, eyePos + lookDir.Forward * 100 ).Run();
		if ( !tr.Hit ) return;

		if ( tr.Body.GameObject is not GameObject go )
			return;

		if ( !go.Tags.Has( "pickup" ) )
			return;

		go.Network.TakeOwnership();

		Carrying = go;
		Carrying.SetParent( GameObject, true );
		Carrying.Tags.Add( "carrying" );

		var rb = Carrying.Components.Get<Rigidbody>( true );
		if ( rb.IsValid() )
		{
			rb.Enabled = false;
		}

		var ca = Components.Get<Sandbox.Citizen.CitizenAnimationHelper>();

		ca.IkLeftHand = Carrying.Children.FirstOrDefault( x => x.Name == "hand_left" ) ?? Carrying;
		ca.IkRightHand = Carrying.Children.FirstOrDefault( x => x.Name == "hand_right" ) ?? Carrying;
	}

	void Drop()
	{
		if ( !Carrying.IsValid() )
			return;

		var rb = Carrying.Components.Get<Rigidbody>( true );
		if ( rb.IsValid() )
		{
			rb.Enabled = true;
		}

		Carrying.SetParent( null, true );
		Carrying.Tags.Remove( "carrying" );
		Carrying.Network.DropOwnership();
		Carrying = null;

		var ca = Components.Get<Sandbox.Citizen.CitizenAnimationHelper>();
		ca.IkLeftHand = null;
		ca.IkRightHand = null;
	}
}