I have a hard time grasping the difference between these two events (except that EntityJoinWorld probably is called for any entity).
Would Event.Result.DENY in LivingSpawnEvent have the same result as setCancelled(true) in EntityJoinWorldEvent? Is one called after the other? What effect does denying/cancelling have, is one temporary and the other permanent (i.e. is the entity removed and cleared from memory (eventually) in both or only one of them)?
EDIT: From what I can gather LivingSpawnEvent is called before EntityJoinWorldEvent, it might even be called before some of the constructors (since some variables were not available in the class I was using in LivingSpawnEvent but were available in EntityJoinWorldEvent, but that's entirely dependent on how the entity-class is built).