Fire FoodLevelChangeEvent when eating cake. Fixes BUKKIT-2242

Remapped by Srg2Source from Bukkit/CraftBukkit@6cfd4a46a753447ee4f088243a1308f8709114a6
Return correct hasLineOfSight value for players. Fixes BUKKIT-4634

Prior to this change when a plugin called Player.hasLineOfSite() the
method would always return false because EntityHuman does not extend
EntityInsentient. This commit changes that by explicitly checking for
line of sight between two entities and returning that value.

Remapped by Srg2Source from Bukkit/CraftBukkit@7773eb7f8f0d26b4cd2cf4214eacbe63aa2ad526
Set current recipe to null when a recipe isn't found. Fixes BUKKIT-2311

This commit restores the diff from 84dbc21aa71b96fd1d2ea40d624b536309118cde
that has since been lost.

Remapped by Srg2Source from Bukkit/CraftBukkit@0cc986036b9a937f311798660b95f884c4e008f5
Fix improperly initialized usernames

Remapped by Srg2Source from Bukkit/CraftBukkit@fdc56564e248dc0797696c8f6463c2ffda781035
Check that a vehicle is a Vehicle before casting. Fixes BUKKIT-4749

When an entity is being moved as the passenger of an entity from one
entity to another, a VehicleExitEvent is fired, but it is assumed that the
current entity is a Vehicle. However, entities can be passengers of more than
just Vehicles, which causes a ClassCastException to be thrown.

This commit fixes the issue by checking that the current entity's vehicle's
bukkitEntity is an instance of Vehicle before casting it to Vehicle.

Remapped by Srg2Source from Bukkit/CraftBukkit@d0911afdca4cd9865ae1d06207c645a9cd366c91
Properly set persistence flag for bred animals. Fixes BUKKIT-4751

Remapped by Srg2Source from Bukkit/CraftBukkit@6f14e29c36521448db54d8f81a1c4668ac979a1c
Correct location of fire from lightning strikes. Fixes BUKKIT-4707

Previously fires spawned by lightning strikes were in the wrong locations.
This introduced the possibility of having blocks replaced when they should
not be.

EntityLightning now uses the correct locations as defined to spawn the
fires when needed.

Remapped by Srg2Source from Bukkit/CraftBukkit@0e17242b4115ec205f95717c09758b7e7bfa854e
Update and add new sound mappings. Fixes BUKKIT-4756

Remapped by Srg2Source from Bukkit/CraftBukkit@a727ae47ede8636efe8688c2454259ba16a82948
Add support for custom Hopper inventories. Fixes BUKKIT-4722

Opening a hopper inventory created by Server.createInventory will
currently have no effect as proper handling code is missing in
CraftEntityHuman for hopper inventories that aren't associated with a tile
entity or minecart. Initialization logic for hoppers is also missing from
CraftContainer, which is necessary for the opening of custom hopper
inventories.

This commit fixes the two aforementioned by adding proper handling to
CraftHumanEntity for opening inventories not associated with a tile
entity, and by adding initialization logic for hoppers to CraftContainer.

Remapped by Srg2Source from Bukkit/CraftBukkit@4a6002147594aaf4153aa05a5f1be933d38150b4