Major refactor of ChatModerator
Refactor ChatModeratorPlugin.java for clarity

Move Filter and IPFilter around into new packages

Move Filter back (oops)

Refactor ViolationSet and PlayerManager for different data storage

Fix deadlock on IPFilter, some refactoring

Set reasonable defaults for Violation level

Temporary value until we can determine how to calculate the violation score

Change InetAddress[] to Set<InetAddress>

Add helper method to declare all violations and their respective values

Minor cleanup on IPFilter to reflect recent changes

Call the event in addViolation()

Moved around Violation and ServerIPViolation (into tc.oc.violations.core)

Move fixed from Violation into Filter

Make the fixed state configurable via config

Fix spelling on enabled

Change tc.oc --> tc.oc.chatmoderator

Rename tc.oc.tests and various other packages

Adds permission to exempt specific players from filters

Update pom.xml to reflect change in package names

Remove permission based exemption (Bukkit bug, afaik)

Fixed extra tab for @rmsy's 'pedantic self'

Refactor on fixed to Violation

Remove 'fixed' from ViolationAddEvent (oops)

Add defaults for fixed in Violation

Remove configurable option for fixed from config

Remove whitespace
Create WeightedFilter and ProfanityFilter

Add initial specification for the WeightedFilter

Fixed extraneous path name for Filter

Minor refactor of getViolationFor()

Add ProfanityFilter and ProfanityViolation

Skip all filters since the player is exempt

Actually register new violation level

Add configurable weights and regexs for WeightedFilters

Attempt to make FilterConfiguration.build() work

Attempt #2 at fixing FilterConfiguration per @rsmy's suggestions

Correctly parse config, introduce deadlock

Fix ConcurrentModificationException on unregistering all filters on disable

Make filter configuration print if debug mode is enabled

Fix spin-lock on ProfanityFilter :satisfied:

Add temporary weight caluclation to test weight is getting parsed properly

Add documentation to Profanity Filter/Violation

Add documentation to Profanity Filter/Violation
Add RepeatedFilter and RepeatedViolation

Add documentation to Profanity Filter/Violation

Add RepeatedViolation and RepeatedFilter

Run the RepeatedFilter before the ProfanityFilter
This should catch fffffffffuuuuuuuuuuuucccccccccccckkkkkkkkkkkkkk

Fixed infinite loop in RepeatedFilter

Rename RepeatedFilter to RepeatedCharactersFilter

Add permissions
Don't filter already empty messages
Add DuplicateMessageFilter and DuplicateMessageViolation
Add AllCapsFilter and AllCapsViolation
Minor updates and bugfixes

Add more profanity to default configuration file.

Change the priorty of filters to catch all-caps repeated.

Change how the config is reloaded onDisable()

Introduce bug incorrectly parsing values for WeightedFilterBuilder.  Looking into this later.
Many minor changes to address all of @Anxuiz's comments

Remove all default constructors project-wide

Pass PlayerManager instead of ChatModeratorPlugin in all Filters

Remove extra null-check in PlayerViolationManager

Make default violation levels configurable and soft-coded

Cache Instant.now() in DuplicateMessageFilter so it doens't change.

Clean up imports on all Filters

Log to the console on un/registering filters

Reworked logging project-wide

Minor cleanup

Remove extra default constructors

Clean up the `Iterator` when un-registering filters.
Make filter priority configurable
Merge pull request #2 from ttaylorr/priority-filters

Make filter priority configurable
Merge pull request #3 from ttaylorr/refactor

Major refactor of ChatModerator