Because EntityFireball.setDirection() adds a random offset to passed
parameters, it is not appropriate for use in an API method. As such,
the values need to be directly set to remain accurate.
Also, standardise getHandle and clean up in general.
getHandle is now using the 'entity' member variable instead of
super.getHandle, as this reduces the number of chained calls needed.
Many files were added to enable the correct hooking of these events, and a new
event EntityDamageByProjectileEvent. EntityDamageByProjectileEvent adds the
ability to get the projectile entity (such as an egg) and also set if the
projectile 'bounces'. Only two projectiles currently respond to bouncing, Arrow
and Fish - were if the fish bounces it means the fish is not hooked. Bouncing
is independent of any damage caused via the event. In addition, the changes to
EntityDamageEvent that enable setting post-event damage were implemented in all
hooks.
Finally, a bug in CraftArrow was fixed, where the constructor was not declared public.