Cleanup ProjectileImpactEvent hooks and add tests for non-default cases.
Cleans up the ProjectileImpactEvent by moving where it is fired into the hitTargetOrDeflectSelf which it was guarding before. Implemented the result types in one place which make it functional for all types of projectiles not just arrows. Added GameTests for arrows impacting entities/blocks. Added some helpers to game test. Not a fan of the name Flag, for the class, so open to suggestions on that.
As well as open to ideas on more game tests to add. I didn't add any for non-arrows, because they all should work the same. But if someone has a better idea on how to test let me know.
This will need to be rebased once #10338 is merged.
@LexManos, this pull request has conflicts, please resolve them for this PR to move forward.