Right now, the first option of the jail command completes and checks for
proper permission and all that good stuff. Good way to get started with
commands but that's all that has been completed right now.
Plan is that the command interface will get a tabComplete method which
all the classes that implement it will handle. Then if a tabComplete
happens on that command we'll let the command handle it, so the command
handlers don't get cluttered.
When the plugin reloads fire an event so that other places can know when
it happens, mostly internal. Use that new event for reloading the
plugin's sign lines in the event it happens.
These errors only happen when the plugin didn't load successfully,
you'll need to check further up in the console/server log to see what
actually caused this error.
The variables possible are:
* %player% - the player's last known name
* %uuid% - the player's uuid, or what can fit on a sign
* %reason% - the reason the player was jailed
* %jailer% - the person/thing who jailed this player
* %afktime% - the amount of time the player has been afk
* %timeinminutes% - the amount of remaining time the player has in
minutes
If the player is jailed forever, then it pulls from the language file
`jailedforeversign` property.
1. In the player move event we looped through the jailed players more
than once which really is an issue when you have several hundred jailed
and since the move event is called several times a second, that was a
huge performance hit.
2. Don't save the prisoner data as soon as they are jailed, we take care
of that else where with the shutting down and counting down time.
The cache listens to a lot of events and custom events to ensure the
cache is up to date, this way we don't have to loop through all the
prisoners in a jail every single time they move or something but instead
just check the cache.
While doing this I deleted one method that I shouldn't have, so going to
revert that. Next I have to build a method or two which will allow me to
do last known names lookups, etc. Might switch to using a library to
handle getting names async so we don't block the server up, doing this
will result in us having to recode some of the commands internally.
If you have any suggestions or questions, I'm open.