--- Sync ----Added the Sync and SyncServer protocol.  If enabled and set
upcorrectly, this will attempt to Sync bans across a network of any
amountof servers.

--- Requirements ---A Bukkit server may be configured to be the
"SyncServer", or just a"Syncer". Additionally, SyncServer.class may be
run as a standaloneserver (without needing a Bukkit server to host it)
using a commandlike:java org.maxgamer.maxbans.sync.SyncServer -pass
PASSWD -port PORT#

A sync setup requires exactly one server and any amount of clients.

--- Protocol ---The sync server protocol is relatively easy, and uses
sockets. Stringsare converted to bytes using the ISO-8859-1 CharSet
(E.g. "HelloWorld".getBytes("ISO-8859-1");). The bytes are then sent
through thesocket, and received, and converted back to String form using
theISO-8859-1 CharSet again.  The CharSet is important, otherwise
specialcharacters can break!

A typical conversation goes something like this:(Client makes connection
request to server through a regular socket)[Client => Server] @connect
-pass MY_ENCRYPTED_PASSWORD //Sends passwd[Server => Client] @connect
//Receiving @connect from the server means success![Client => Server]
@ban -name NewGuy -reason Potty mouth -banner MrGrumpyGills
-broadcast[Server => OTHER_CLIENTS] @ban -name NewGuy -reason Potty
mouth -banner MrGrumpyGills[Client => Server] @disconnect -reason Plugin
is being disabled(Client drops connection, server drops connection)

More formally:* All requests must start with the @ symbol. Requests not
having this will fail as a malformed packet.* Each argument must begin
with the name of the argument ("reason", "banner", etc) prefixed by a
space, and then a dash. If it has a value, it then must be given one by
placing a space and thenthe value (Values are allowed spaces).* If any
value has a - in it, the - should be escaped by replacing it with the
sequence \-(Example: String unescaped = "some -string".replace("-",
"\\-");. This is a double-backslashbecause two backslashes in a string
equals one actual backslash. 

--- Webpages ---Using this, a webpage may ban/unban a player.  **Simply
deleting a players recordfrom the database will NOT delete them (It will
only cause issues), UNLESS the serveris offline!)**.  See the above
conversation for an example of protocol.

NOTE: If you have TWO OR MORE servers running off THE SAME database, it
is IMPERATIVE that youset ALL BUT ONE of the databases to read-only mode
using the config option in config.yml! This will cause errors if you
have two servers banning to the same database, because of CACHING(The
reason MaxBans is so fast!).

--- Encryption ---Passwords are encrypted before they are sent over the
internet. Therefore, if you wishto connect using a webpage, you will
need to encrypt the password in your @connect request.The encryption
works like this (I'm trying to write it in PHP, but I haven't coded it
fora while)

function encrypt($pass){    $pass = MD5($pass); //Encrypt the password
once using MD5    $pass = $pass . "fuQJ7_q#eF78A&D"; //Append the salt
to the pass. Currently, salt is "fuQJ7_q#eF78A&D", cannot be changed.   
$pass = MD5($pass); //Encrypt the result once again    return $pass;
//This is the final result.}

--- BanManager API ---The BanManager will not request syncs with other
servers. Only the commands etc. So, if youdecide to use the BanManager
in another plugin to ban someone, the ban WILL NOT SYNC with
otherservers, unless you send the appropriate request using the
MaxBans.instance.getSyncer() object.
*Disclaimer