Hello Ariyo,
I'd like to help you if it's possible.
Can you explain something more about what kind of problem are you having?
Have you tried to communicate with the Photon addon developers first?
Then, while not being able to run your code, I've read it and I've noticed a few things that you may check.
1. StartGrapple(). Adding a new component not only with every click but continuously.
Check this line:
joint = player.gameObject.AddComponent<SpringJoint>();
You're calling StartGrapple in every frame while your mouse button is down.
I suspect that you're not controlling that your player will have only one joint component active at the moment and that you're creating and adding multiple SpringJoint components to your player. Non stop. Possibly, you may need to control that and allow only one joint at one moment.
2. StopGrapple(). Destroying a joint without disconnecting,
Here I have not so much experience and I may be wrong, but I think that the connected objects to the joint may be looked after before destroying the link/joint. ("looked after before destroying", english is so funny sometimes...) Not sure here, but destroying the joint without looking may give wonky results in the physics system.
What about just disconnecting and reconnecting instead of destroying and creating SpringJoint components? Maybe that could help.
3. Try to keep your code clean the best you can.
I know it's only one, but you left this little guy...
private Vector3 currentGrapplePosition;
... lonely and abandoned between methods, being bullied down the alley, while you have all your other variables on the top of the page, what is a good thing, but not for the little guy.
Sorry for not being able to help you more at the moment.
Good luck!