=====      PREFACE     =====

This is my first plugin, keep that in mind. I can only hope that this will work accordingly on the majority of MC servers.
If this doesn't work, PLEASE be polite and try to be helpful. Try to include console errors (if any, please say so if there are none).
Also, it may be useful if you'd tell me what version of CraftBukkit you're using and version of Java if you know.
If you are a dev and you know how to do this better, please don't be rude, but I'm up for constructive criticism.

This readme file will be persistent and rewrite itself if it is deleted. I have it here in case you forget something about Blip
and find yourself with the need to look up the website, and I thought this file would be a bit more convenient in some cases.

This document is just to go over a few of the commands in a bit more detail since
I didn't want to include the mess of function and argument combinations in the "/blip" command.

This plugin was compiled with Java 1.6, but should work if you're using JRE1.6 or 1.7 at least.
When 1.7 gains more headway, I can recompile with it if necessary.

Huge thanks to Jacek from betterPHP for helping me with quite a lot of this plugin.
His site is http:betterphp.co.uk -- Go there for some great tutorials (way more than just Java) and very useful forums.

===== COMMANDS SECTION =====

-----   What to know   -----
Arguments wrapped in greater-than/lesser-than signs <> are required arguments
Arguments wrapped in Square brackets [] are optional arguments.
For example: /bkick <player> [message]
                       ^         ^
                required         optional
                
Do not include the symbols <> or [] in your arguments unless they are part of a name (if that's even possible).

Arguments show below that have multiple items inside seperated by the pipe symbol(|) are to be used one at a time. 
For example: /blip ip [name|IP] => Use name OR IP, never both.

With the exception for "/blist [users|ips]", the arguments wrapped in <> or [] are placeholders, not exactly what the argument should be.
For example: /blip ip [name|IP] => Should be "/blip ip herobrine" or "/blip ip 127.0.0.1"
In the case of /blist [users|ips], the command should be "/blist", "/blist users", or "/blist ips"

Arguments are not case sensitive. As far as the Blip is concerned, herobrine, HEROBRINE, and HeRoBrInE are all the same.

Firstly, the /blip command. Without any arguments, this returns the list of registered commands.

There are a few arguments you can append to this for more functionality:

-----     Commands     -----
- /blip ip
- - If there is no name or IP specified, it will return a list of IPs registered to your name.
- - As long as there are no arguments after "ip", this command will work for everyone except the console, even non-OP players.

- /blip ip [name|IP]
- - If a username is specified, it will return the IPs for the specified user. This only works for OPs.
- - If and IP is specefied, it will return the list of names for the given IP, also only for OPs.
- - This must be a valid IP, or the plugin will interperet it as a name.

- /blip aip
- - This will return all IPs for all users if the command sender is an OP or is the console.
- - I recommend only using this command when using a MC 1.2.4 server (scrollable text), or use it in the console.
- - The list may become too long to read even in 1.2.4 rather quickly.

- /blip ne
- - Toggle name enforcing (See Notes below)

- /blip ab
- - Toggles auto-banning.

- /blip wf
- - Toggles word filtering.

- /blip filter <add|remove> <word>
- - Adds or remove a word to be filtered by Blip.

- /bkick <player> [message] -OR- /bk <player> [message]
- - Kicks the player and allows them to immediately rejoin.
- - The optionally specified message is displayed on the kick screen.
- - If the message is not specified, it uses "kickmsg" from the config.

- /bmute <player|IP> -OR- /bm <player|IP>
- - Mutes the player or IP. Tells them "Hush!" when they speak.
- - Use the command again to unmute them.

- /bban <player> [message] -OR- /bb <player> [message]
- - Bans the player, showing the optionally specified message.
- - If no message is specified, it uses "banmsg" from the config.
- - It is possible to ban offline users.

- /bunban <player> -OR- /bu <player> [message]
- - Unbans a previously banned player.
- - This will not work if the specified player is not found in the bans list.

- /bbanip <IP> [message] -OR- /bbip <IP> [message]
- - Bans the IP and kicks all users associated with the IP.
- - The optionally specified message is show to all those who are kicked after being IP banned.
- - This will not work if the IP address is in an invalid format.

- /bunbanip <IP> -OR- /buip <IP> [message]
- - Unbans a previously banned IP.
- - The IP specified must be valid and already banned or this will return an error.

- /blist
- - Lists all currently banned and muted users and IPs.

- /blist users
- - Lists currently banned users

- /blist ips
- - Lists currently banned IPs

- /blist muted
- - Lists currently muted users and IPs

= Config.yml =

== What to Know ==
Several options in the config CANNOT be changed with commands! This is to prevent hackers from banning other admins. These options can't be altered via command:
* exemptips
* exemptusers
* unbannableips
* unbannableusers
* doombanips
* doombanusers
* enable-op-kicking

Here are some commands you CAN alter via command:
* enforce-naming-standards (/blip ne)
* autoban-enabled (/blip ab)
* kickmsg (/blip kickmsg [message])
* banmsg (/blip banmsg [message])
* banjoinmsg (/blip bjmsg [message])
* doombanmsg (/blip dbmsg [message])
* enable-word-filtering (/blip wf)
* filtered-words (/blip filter <add|remove> <word>)

== Config Options ==
* autoban-enabled will ban associated IPs if you ban a name, or associated names if you ban an IP (disabled by default).
* enforce-naming-standards will block users with nonstandard names. (See notes below)
* enable-op-kicking will allow OPs to kick other OPs. The console can kick OPs irregardless.
* kickmsg is what is displayed if you do not specify a message when you kick a player.
* banmsg is what is displayed if you do not specify a message when you ban a player.
* banjoinmsg is what is displayed when someone who is banned attempts to join the server.
* doombanmsg is what is displayed when somone is banned for trying to ban a user or IP on the doombans lists.
* exemptips is a list of IPs that will not be banned even if they attempt to connect with a banned user's name.
* exemptusers is just like exempt IPs, it will not ban that user for logging in from a banned IP.
* unbannableips is where you can put IPs that cannot be banned from console commands.
* unbannableusers is a list of users that cannot be banned using console commands.
* doombanusers is a list of names that will backfire if a user tries to ban them, in turn banning the user.
* doombanips, like the doombanusers, if someone tries to ban an IP on this list, they will be banned instead.
* enable-word-filtering simple enables word filtering.
* filtered-words is the list of words that Blip will filter and replace with "&k&#@$!*"
* version is for system use only. Altering this may erase or rewrite certain parts of the config.

== Notes ==
* The autoban feature does several things. Here's a list:
--- When you ban someone by name, it bans all their IPs as well. (The command will return how many IPs were banned)
--- When you ban someone by IP, it bans all usernames associated with that IP. (The command will also return how many names were banned)
--- When a user joins with a new IP, but an old name, the new IP will be added to the ban list.
--- When a user joins with a new name and old IP, the name gets added to the ban list.

* A "valid" minecraft username only has alpha-numeric characters and underscores. Up to 16 characters. Only worry about this option if your server is in offline mode.
* Keeping allow-nonstandard-names set to false will help ensure invalid entries are not inserted into yml files. (Recommended)
* Ban messages may not work, and may be replaced instead with by, "The Ban Hammer has spoken!" (Probably Essentials)
* exemptips and exemptusers will NOT unban currently banned IPs or users and will not prevent them from being banned with the ban commands.
* It is recommended to remove the unbannableips and unbannableusers before using this plugin heavily, it's only there as an example
* The exempt, unbannable, and doomban config options cannot be altered via command, it's intended to keep fake OPs from banning other admins.
* The doombans will ban ANYONE who attempts to ban a listed user or IP, regardless if they are an OP, on this list, or another list, except if a user tries to ban themselves.
* Bans sent from the console are the only way to override doombans.
* This plugin is not designed to interfere with other user management plugins. The options in the config will not prevent other plugins from banning people.
* The plugin processes a ban in this order: self-ban? => doomban? => unbannable?
* If an IP/Username is on the doomban AND unbannable list, it'll process as a doomban first.