MyWarp does everything you mentioned and even more. Disclaimer: I am the author.
The problem I saw is that you introduced the Statement in a way where you (normally) want to use a PreparedStatement. However you did not give any...
First, you are using JDBC witch is a library (that comes bundled with bukkit witch is, again, a library). Second, you absolutely want to use a...
There is the normal PlayerChatEvent. As xTrollxDudex said, the code you posted is not threadsafe for multiple reasons including bukkit-api usage...
You might be able to do so with an absurd amount of reflection, but I highly doubt that it will ever run near-stable (Thread.sleep() would lower...
The wiki is pretty clear: "The Bukkit API, with the exception of the scheduler package, is not thread safe nor guaranteed to be thread safe." That...
Why do you think that calling non-threadsafe methods out of an async event might be a good idea?!
Absolutely. It is a lot simpler to read and less messy to begin with, but the main difference is that your solution needs to do things within Java...
Yes, it is. Line 14 is pretty clear, you tell the database to update the token of the record in question with the new, initially given token. What...
Bukkit bundles Guava, so you can just do the whole thing in two lines: valueComparator =Ordering.natural().onResultOf(Functions.forMap(map)); map...
Java has a build in API for localizations, Resource Bundles. The system is extremely flexible and automatically cached, but a bit more difficult...
I hope you do not mind if I push this. I really like the idea here. Bukkit's current multi threading API is just a pain to work with if things...
I actually prefer @zml2008's version as it can be used for multiple listings. Usage is as simple as this: Collection<Object> collection;...
You need to replace the value before writing it to the file. That is actually pretty basic: String str = "&7Hello, my name is %Player."; str =...
I would suggest reusing the random once it is created. Creating a new instance every time calling the method is not only unneeded, its also a...
Separate names with a comma.