Process block cleanup first. Fixes BUKKIT-4103

When setting a block the server sets the new block ID, calls the cleanup
on the old block, then calls the placement logic for the new block. This
would normally work correctly but we have logic to prevent errors that is
causing one here. When trying to clean up the old block we notice the block
ID has changed and try to fix things, this causes the cleanup logic to
fail. To ensure cleanup happens correctly we now do all the cleanup before
changing the block which avoids triggering the fixup code.
Only delay removing containers. Fixes BUKKIT-5238

In commit f94b7af8 I delay removing the block until after running the
block's cleanup code to avoid errors. However, this causes problems of
its own due to blocks not being written with this in mind. To avoid blocks
getting recursively removed we now only delay removing containers since
they are the only ones we had problems with to begin with.
Add failing unit test for ItemMeta-repairability
Consider repair cost when checking ItemMeta emptiness. Fixes BUKKIT-5304
[Bleeding] Implement setIdleTimeout and getIdleTimeout. Addresses BUKKIT-4932.
Implement UnsafeValues for give command. Addresses BUKKIT-5286
Add StatisticManager.java for diff visibility.
[Bleeding] Fix Achievements and Statistics API. Fixes BUKKIT-5305
[Bleeding] Implement methods for /achievement command. Addresses BUKKIT-4932
[Bleeding] Check that vanilla recipes actually exist. Fixes BUKKIT-5277

When falling back to vanilla recipes in the iteration of recipes,
a check is necessary to ensure that vanilla recipes are present.
RecipeIterator has been modified to account for the multi-map setup.
[Bleeding] Account for null in EntityDamageEvent handling. Fixes BUKKIT-5317

Damage caused by explosions will return null for the event as of
6588d6f72bbca74bf150de65593ac575b846111b. As such, a null check is
now necessary when handling non-living entity damage events.
 [Bleeding] Properly handle EntityBreakDoor event canceling. Fixes BUKKIT-5318

The method being called was renamed during the 1.4.2 update process
but the function call was not replaced accordingly, leading to a
missed diff from 314051580a0a8e4745d3a539f232b552916eb302.
Implement API for ServerListPingEvent. Adds BUKKIT-5121, BUKKIT-2465
Fix stacking for items after setting empty meta. Fixes BUKKIT-5331

ItemStacks do not stack if one has null for a tag, while the other has an
empty tag. In CraftItemStack, if you set an item to an empty ItemMeta, it
will create an empty tag for the internal ItemStack.

This changes the setItemMeta function to check for empty meta, and then
use null for the tag instead of an empty NBTTagCompound.
Readd connection throttle
Relocate NaN check on PacketPlayInFlying.
Add BlockPressurePlateWeighted.java for diff visibility
[Bleeding] Fire interact events for Weighted Pressure Plates. Fixes BUKKIT-5053

In 1.7, Minecraft changed Weighted Pressure Plates to allow players and
entities to interact with them, rather than simply changing redstone signal
based on the number of items on the pressure plate. This commit adds calls to
PlayerInteractEvent or EntityInteractEvent for every entity that steps on the
plate.
[Bleeding] Instantiate logger earlier in CraftServer. Fixes BUKKIT-4253.

Previously, if an error occurred during CraftServer initialization before the
logger was instantiated, it would cause an NPE and the server would never
finish loading properly. By instantiating the logger before attempting to
load anything else in CraftServer, we ensure that a logger will always be
available in the case of any errors.
[Bleeding] Add support for ThrownExpBottle and Fish to launchProjectile(...). Fixes BUKKIT-1536

Previously, trying to launch a ThrownExpBottle or Fish projectile would
result in an IllegalArgumentException. This commit adds support for both
ThrownExpBottle and Fish, which means that all current projectiles are
now properly supported by this method.