[C] Brief summary. Fixes BUKKIT-4561

https://bukkit.atlassian.net/browse/BUKKIT-4561

The Issue:

During a RespawnEvent if anything that pertains the the getOnlinePlayers() is called the player in the re-spawn will be missing from the list. This breaks calls such as server.getPlayer(playerName)/getPlayerExact or other things that use the online list from inside the re-spawn event.

To bypass this up to this date people have had to use a minimum 1 tick delay inside of the re-spawn event. Obviously this is not how it is intended to work.

Justification for this PR:

In the PlayerList nms class the respawn event is called. However it is called between a point where the player is removed then added back to the online list. Because of this fact, anything in that call will show the player as offline. This PR will move the event to after the player is added back into the list. Doing this does come with the cost of not being able to use setRespawnLocation. Right now I don't see any way of fixing this without a new event called PreRespawnEvent that is depreciated because of the problems from the original, but would still allow the setRespawnLocation.

PR Breakdown:

The PR comments out the old code for being able to reference how it worked before. A new boolean is added to say weather or not to call the respawn event. This is set to true in the same if area that the old event was in. The new respawn event is added after the player is added back to the list of players on the server.

Testing Results and Materials:

Compiled and tested and fixed all of the errors that were occurred with getting the Player object. It used to return null, but now it wont.

JIRA Ticket:

BUKKIT-4561 - https://bukkit.atlassian.net/browse/BUKKIT-4561