World.getNearbyEntities API

Adds much needed API for getting entities by location and not an entity base point.
Allow plugins to set spawn reason
Disable UUID conversion and do it on login
Misc Utils

Adds Misc Util functions to be used by future commits
LivingEntityArmorProtectEvent

To control if armor should protect entity, how much if so, and how much item damage to give.
GetArmorProtectionValueEvent

Lets plugins control how much protection value an item should provide.

Allows dynamic protection values and nullifying ability.
EntityKnockbackEvent

Control knockback power of entity attacks
ZombieReinforcementEvent

Control when a zombie reinforcement event should occur (modify chance)
also makes it run on all difficulty levels
Add LivingEntity.getLoot()

Get the common loot this entity might drop on death.
Cancel Vehicle/Passenger if spawn is cancelled

Otherwise lots of chickens
All blocks extinguish at same rate

Previously "Flammable" blocks would burn for ages, this makes them burn out the same as non flammable.
This is so that blocks that have ignite/burn events cancelled will actually burn out.
Store EntityMetaData by EntityId

Currently unloading then reloading an Entity is making the TempMetaData persist across these transitions.

This makes hard to use TempMeta to know if something needs to be initialized or not (listeners) and is carrying
over old listeners to the old entity that no longer exists.

Using the EntityId + world name is guaranteed unique per server session and therefor will be unique to the living entity's object.
Don't throttle block place
Allow all horses to be leashed
Improve the AutoSave mechanism

Only save modified chunks, or chunks with entities after 4 auto save passes
Move WorldSaveEvent to proper location

calling CraftWorld.save() currently does not call WorldSaveEvent, and WorldSaveEvent could fire on worlds that have saving disabled.

New location will always fire during a world save and only during an actual save.
Change Authentication Servers Down Message

State it is not this servers fault, and direct them to a status page.
Add Player.spigot().getFishingHook() API
Track TNT Source Block

This patch will keep track of the exact source block location that TNT was spawned from.
This will either be:
1) The block the TNT was placed and then ignited on
2) The the top most parent block a chain reaction of TNT was placed from
3) The Dispenser block that fired TNT
4) The block a plugin spawned TNT came from

Useful for storing who is likely responsible for igniting TNT.
Improvements to Player Lookup

Minecraft and CraftBukkit both use Arrays to store online players,
and any time a player needs to be looked up by name or UUID,
the system iterates all online players and does a name or UUID comparison.

This is very ineffecient and can reduce performance on servers with high player count.

By using a map based approach for player lookups, player lookup should
be consistent in performance regardless of how many players are online.