Allow plugins to enchant already enchanted items. Fixes BUKKIT-1956

This causes the server to generate PrepareItemEnchantEvent even in the
case that an item is already enchanted or otherwise would normally not
be enchantable.
Add missing semicolon

I should try to compile before I say "this change is okay".
I should try to compile before I say "this change is okay".
I should try to compile before I say "this change is okay".
I should try to compile before I say "this change is okay".
for i in range(100)
Improve calling of ProjectileHitEvent. Fixes BUKKIT-3872
Correct missed diff on skeletons. Fixes BUKKIT-3912
Properly copy collection references in ItemMeta.clone(). Fixes BUKKIT-3913

When cloning an item, all references are copied to the new item. For
collections, this makes internal changes become visible in both the old and
new items.

In CraftMetaItem, clone was not making copies of the appropriate collections
and has been fixed for non-null values.

In CraftMetaEnchantedBook and CraftMetaPotion, clone was using possible empty
collection references and has been changed to explicitly null-check instead.
Call appropriate event for zombies igniting players. Adds BUKKIT-3915
Call PotionSplashEvent even for no effects. Fixes BUKKIT-3618

When a splash potion has no applicable effects we currently do not call
PotionSplashEvent. This means plugins are unable to make custom
potions with reliable splash handling as they have to relicate the
functionality themselves.

With this commit we simply make the event fire regardless of the effects
on the potion.
Add Beacon block state for hopper events. Fixes BUKKIT-3932
Special case large chests for hopper events. Fixes BUKKIT-3916

Large chests work in a different fashion as they are a combination of
two other inventories. This causes their getOwner method to always return
null as their is no correct return. To compensate for this for the hopper
events we special case them to use their CraftBukkit counterpart that has
the information we need for the event.
Only call event when turning pressure plate on. Fixes BUKKIT-3881
Include anvil result in inventory size. Fixes BUKKIT-3741
Add BlockHopper from mc-dev for diff visibility.
Limit hopper to valid directions. Fixes BUKKIT-3940
Throw exception for disabled plugin tasks. Fixes BUKKIT-3951

Without this check, any non-null reference to a plugin is considered
'valid' for registering a task in the scheduler. This is obviously
unintentional behavior and has been changed to throw an
IllegalPluginAccessException. It is now consistent with the
SimplePluginManager event registration contract.

This in affect also addresses BUKKIT-3950 for uninitialized plugin
references (ones without a description).
Correct slot types for brewing stand. Fixes BUKKIT-3937
Don't update physics when block place is cancelled. Fixes BUKKIT-3939

When a block placement happens we currently update physics on the
attempted placement and update again if the placement is cancelled.
To correct the first one we simply set the block without applying
physics. To correct the second we have to add a new method to
BlockState that lets us update without applying physics and use
this method method when putting the block back.
Fix mismatched tile entities for new blocks. Fixes BUKKIT-3949
Set world on fixed tile entity to avoid NPE. Addresses BUKKIT-3949
Properly return contents of Inventory. Fixes BUKKIT-3930

When an array of an inventory's contents is requested, we loop through the contents of the NMS inventory's ItemStacks in order to return Bukkit ItemStacks that can be used through the API. However, the NMS ItemStack can, in some cases, be larger than the physical size of the inventory. Using the size of the NMS array as a limit on the loop that follows can result in an ArrayIndexOutOfBoundsException because the Bukkit array's length is the actual size of the inventory, and thus will be smaller.

With this commit we use the smaller of the two arrays' length as the limit in the loop, thus eliminating the possibility that the smaller array will be asked for an index higher than its length.
Add BlockDaylightDetector from mc-dev for diff visibility