Changelog

v 1.1:
	- Fixed users being able to use 'manuadd' to add users to higher groups than their own.
	- Added SuperPerms support so GM will update and provide the permissions to plugins which only support Bukkit Perms.
	- Added more helpful output to errors on argument lengths.
	- GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect <world>'.
	- Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead.
	- Fix for Users.yml containing only 'users:' causing a crash.
	- GroupManager will now generate a fresh Users and Groups yml if either file is empty.
	- Fix for an infinite loop bug with the new Bukkit Perms during a new user creation.
    - Fixed BukkitPerms population. Wasn't correctly setting superperms.
    - Push updates to superperms for all valid GM commands.
    - All GroupManager commands issued by players are now echoed in the console.
    - Reverted WorldHolder static change to maintain backward plugin compatibility.
    - Update to handle 'getDescription().getPermissions(') returning a list (CB 1172).
    - Fix for null in PLAYER_TELEPORT for bukkit perms.
    - Fixed wasteful updating of perms on a manload.
    - manulistp now accepts an additional + to list ALL Superperms effective permissions (/manulistp <name> +).
    - manucheckp also outputs superperms results.
    - Removed superperms update on plugins unloading. Unneeded and created undesired lag on shutdown.
    - Added a BukkitPermsUpdateTask to only update superperms once on a load/reload.
    - Fix for GM not checking inheritance for known superperms nodes.
    - Optimized getAllPlayersPermissions and fixed pushing unknown perms to superperms.
v 1.2:
	- Changed priority of Registered events to lowest.
	- Fixed an issue with superperms where plugins define perms with inheritance after the root perms
v 1.3:
	- Rewrote Config loading to use Bukkits Configuration features
	- Added an opOverride setting in config.
	  If present and set to false, op's will not get overriding permissions in GroupManager.
	  (one op will not be able to alter another op's settings)
	- GM will now create all relevant world data files for non mirrored worlds.
	  (for all worlds named in config.yml)
	- Attempt to stop GM wiping groups/users yml's on a bad shut down.
	- Added event handling to manage new world creation at runtime.
	- Added the ability to handle unknown worlds at server start.
	  (GM will create the data files for any worlds it finds which are not in the config.yml)
	- Fix for Bukkit passing a null To location on a player Portaling
	- Fixed manudelsub not correctly selecting the group to remove.
	- Added two new permission nodes - groupmanager.notify.self & groupmanager.notify.other
	  These allow players/admins to be notified when players are moved between groups.
v 1.4:
	- Updated for Bukkits new YamlConfiguration.
	- Cleared remaining Cast errors cause by object cloning.
	- Removed extra notification messages for the player issuing the group move command.
	- Added a config setting - bukkit_perms_override: false
	  Enable to allow default Bukkit based permissions to remain enabled, unless directly negated within GroupManager.
	- Fixed reading world mirrors from the config.
	- Simplified config.yml while retaining backwards compatibility.
	- Added data.save.hours setting to config. This allow control over how long backups are retained.
v 1.5:
	- Fixed opOverrides and bukkit_perms_override to read the correct entries.
	- Better commenting in config.yml
	- Fixed GM to recognize Superperm child nodes.
	  If you add a node like Towny.admin GM will now correctly report on all child nodes.
	- Fixed GM loading world data files twice at startup.
	- Improved error reporting for invalid groups.yml
	- Added Global Groups
	  Defined in groupmanager/globalgroups.yml.
	  Create groups in the yml with a g: prefix, then inherit in the worlds groups files.
	- Added Info node support to Global Groups.
	- Fixed an error on 'manucheckv'. If the users doesn't have the variable it fell through causing an exception.
	- Added checking of subgroups for Info nodes.
	- Expanded 'canUserBuild()' to include inheritance and subgroups.
	- Added a config.yml setting of 'validate_toggle' for those who prefer 'mantogglevalidate' to always be off.
	- Prevent setting 'minutes' in the config to zero causing an error.
	- GM will now check to see if it's data files have been changed at each scheduled save.
	  If the files have been altered (on disc) it will reload, so long as the in-memory data hasn't changed.
	  If the files on Disc have changed AND there have been changes to it's in-memory data it will show a warning.
	  You then MUST issue a '/mansave force' to overwrite the disc files, or a '/manload' to overwrite the memory data.
	- Fix for an error in checkFullUserPermission caused by players disconnecting mid perms update.
	- Notification of being moved to the default group only happens if it's a demotion/promotion (not on join).
	- Fixed GM holding files open and causing the time stamp to be incorrect. This caused GM to require a '/mansave force' when it shouldn't be needed.
	- Fixed a crash on reload due to bukkit not unloading plugins before reloading.
v 1.6:
	- Prevent Group.equals tests throwing a NullPointerException for GlobalGroups.
	- Stop throwing errors on an empty users file.
	- Optimize sorting to speedup permission tests.
	- Fix superperms to pass all tests http://dev.bukkit.org/server-mods/superpermstest/
	- Optimizations include changing the return of comparePermissionString.
	- Added file details in error messages for loading groups/users.
v 1.7:
	- GM now supports offline players without having to mantogglevalidate
	- Offline player checks now support partial name matches.
	- Added custom events so plugins can now be notified of changes within GroupManager.
	- GM now registers with Bukkits ServicesManager.
	- deleting the contents of GlobalGroups.yml will no longer thrown a NullPointerException.
	- Removed op permissions from admins in the default GloblaGroups.yml.
v 1.8:
	- Changed ServicesManager registration to lowest from normal.
	- Fixed 'manucheckp' returning a null for the searched node when it's a group/subgroup.
	- 'manpromote' and 'mandemote' now correctly send the notification to the console if the command was issued there.
	- Expanded GlobalGroups.yml and Groups.yml to include Towny permissions.
	- Delayed GroupManager events so Superperms will be fully updated before plugins receive the events.
	- Changed the way events are raised to prevent variable corruption.
	- Reload GlobalGroups when you perform a world load.
	- Changed GlobalGroups to save/load before local groups in the scheduled data saving/loading
	- Fix 'manucheckp' to correctly report if a permission is available from GroupManager or Bukkit.
	- Changed over to a reflection method for populating superperms as Bukkit lags when you handle permissions one at a time.
	- Major, MAJOR changes to support partial/full world mirroring.
	  You can now mirror groups.yml, users.yml or both files between different worlds.
	- Catch NullPointerErrors generated by blank permission nodes.
	- Removed '- bukkit.command' form the globalgroups permission nodes.
v 1.9:
	- Optimize populating Bukkit perms so we no longer calculate the child nodes (Bukkit already does this).
	- Added a tidy error message for invalid permission entries in GlobalGroups.
	- Better optimize assembling of a players permissions and allow the * node to populate all registered superperms.
	- Fixed text when adding a subgroup to not say the player was moved.
	- Update to new Bukkit Event system.
	- Update GroupManagerBridge for new event system.
	- Fixed a random null error upon a player portaling.
	- Fixed infinite loop error on player join.
	- Optimized code to only update the player logging in instead of all players online.
	- Added recursive loop detection for World mirroring (you may not set the main world as a mirror of another).
	- Fixed fetching world data so it no longer returns the mirrored world for groups. Each world data holder now points to the correct data set, so can be returned as an object.
	- Changed addSubGroup() to only add the group if it doesn't already exist (no need to update an already existing group).
	- addSubGroup now returns a boolean for success/failure.
	- '/manuaddsub' now correctly reports if it was able to add the sub group.
	- Allow negation to the * permission node when populating superperms.
	- Fix trying to modify an unmodifiable collection breaking superperms.
	- Fixed subgroups (I broke earlier).
	- Check for a null player object in the PlayerTeleportEvent.
	- Trap errors in fetching the mirrors map.
	- Fixed an infinite loop error when using '/manudel' on a logged in player. It caused setDefaultGroup to trigger a bukkit update when no GM User existed yet.
	- do not allow inherited permissions to negate higher perms.
	- Fixed a bug when pushing superperms in the wrong order.
	- Fix players retaining permissions when demoted.
	- Auto sort permissions on load to speed up population of superperms.
	- Negating a parent node after adding all nodes with * will now correctly remove all child nodes of that parent before populating superperms.
	  eg.
	      - '*'
	      - -vanish.*
	      - vanish.standard
	- Track the 'onPlayerChangeWorld' event as some teleports seem to not be triggering a world move.
	- Catch all errors in badly formatted groups.
	- Fix a bug with getWorldData return the main world data for all mirrors, instead of the worlds parent data.
	- Prevent getAllPlayersPermissions() processing a group more than once. Improves performance when using complex inheritance structures.
	- Fix world mirroring so it correctly creates data files and data sources for partially mirrored worlds.
	- Fixed world mirroring so it returns the correct data for the requested world.
	- Change Service registration to register WorldsHolder instead of AnjoPermissionsHandler. This is the correct entry point for all data.
	- Depreciate PlayerTeleportEvent, PlayerRespawnEvent and PlayerPortalEvent as it's all handled in PlayerChangedWorldEvent.
	  This also means we no longer update permissions before we change worlds.
	- A command of '/manload' with no world arguments now performs a full reload of GM.
	- Update for Bukkit R5 compatability.
	- Removed BukkitPermsOverride as this is now the default with bukkit handling child nodes.
	- Prevent adding inheritances and info nodes to globalgroups. These are permissions collections, not player groups.
	- Prevent promoting players to, and demoting to GlobalGroups.
	- Make 'manload' reload the config correctly.