Spelling error.
Fixed a bug that would clear the debug listeners on "add".

This was caused by a bug in the abstract interval tree class that would
clear the entire tree instead of the subtree whenever a new entry was
added.

Never roll your own custom collection implementation ...
Damn typos.
Fixed the update feature (hopefully for the last time).

The problem is that ProtocolLib is using a different naming convention 
where each release has a version suffix. So, while we can't use the
update folder to replace the JAR file, it's also not needed since
we can simply add it to the plugins directory directly and remove
the old version on shutdown.
Add the ability to clone a watchable object.
Log the plugin version too.
Added the ability to enable or disable the background compiler.
Add the error reporter to the background compiler.
Use a separate asynchronous sending queue for every online player.

This ensures that packets intended for player A doesn't have to wait
for the packets of player B to be finished processing.
Correct the concurrent initialization pattern.
Always generate classes with legal identifiers.

Certain types, such as ItemStack[], would cause the StructureCompiler
to generate classes with the name CompiledStructure@ParentItemStack[],
which are not legal names.

Instead, we'll replace the brackets with the word Array.

In addition, to accomodate classes with identical names, we'll use
the following naming convention instead:
CompiledStructure$[Canonical name of target]$Canonical name of type],
where the canonical name (net.minecraft.server.ItemStack[]) is 
transformed to a legal name by replacing "." to "_" and "[]" to array.

In our example, that would result in the following class name:
    net_minecraft_server_ItemStackArray
Fixed writing private fields with a compiled structure modifier.

Incredibly hard to track down. Lucked out by randomly removing a
semicolon. 
Fixed error reporter not being assigned properly.
Fixed a number of minor bugs.
Small fix for OpenJDK (FindBugs).
Add a warning message when trying to correct invalid configuration.
Implement equals() and hashCode(), since we've implemented compareTo.
Fixed a range of smaller bugs discovered by FindBugs.
Structure compiler shouldn't be public.
Added synchronous packet processing.

Client packets are typically processed asynchronously (in a client's
reader thread), and should never access the Bukkit API directly,
with a few exceptions. This is problematic if you need to cancel a
packet as a response to the Bukkit API, such as the permission system.

Currently, you will have to either cancel the packet - which is 
discuraged - sync with the main thread and then re-transmit it outside
the filters, or use an asynchronous thread with callSyncMethod and 
wait on the returned future. A better method is needed.

Synchronous processing allows you to run light-weight packet listeners
on the main thread without having to deal with synchronization, 
concurrency or the overhead of an additional thread. It can also
process multiple packets per tick with a configurable timeout.

This, along with 7b9d97123888b86c31ab135347ac8d4f0771c3ac, makes it
easy to delay light-weight packets to be synchronously processed.