Mojang enforce a very restricted set of characters for names, however offline servers can be sent a much wider set of characters.
Also, fix not using UTF8mb4 on table creation if possible.
Fixes#630
If it detects a version number of the form 1.xy in the config, it will change that to 1.x.y, so we should make sure we always use e.g. 1.10.0 for version 1.10
Fixes#629
This alters the behaviour of the ``getInventoryHolderLocation`` and ``getInventoryHolderType`` methods in a way which should have identical behaviour for double chests but which should also not raise an exception if there are triple (or larger) chests. The type will be correct; the location will at least return *something* which is the location of one of the chests involved, but it'll probably be semi-arbitrary what coordinates are returned.
Fixes#563 - note issue #533 which this does **not** address
- Update PR to use Actor system
- Amend actorFromProjectileSource to choose a friendly name when a block is the source of a projectile
- Added util method to try to suggest an appropriate item as the "weapon" in a projectile kill
Closes#442Fixes#470Fixes#471
This increases insert speed by up to 6 times when the DB server is on the same
box as the minecraft server, and many HUNDREDS of times when it is accessed via
a network connection.
This creates a new kind of BlockRow which is a collection of many similar rows, each
of which uses the same PreparedStatement. As such, when asked to run, it can
use the executeBatch() method. It also adds code to BlockRow to see if they are mergeable
(it won't if they have sign or chest actions associated) and to merge two rows into one of
these new objects. The consumer processing loop is altered to check for merges, and do so if
possible.
Also, prevent consumer race condition on shutdown
On shutdown, LogBlock invokes the consumer's run() method up to twn times on
the main thread. However, the consumer may still be running from the last
scheduled task, and this could result in two threads running the run() code
simultaneously, resulting in inconsistent row insertion order.
Another scenario is that the consumer has just started processing the last
row in the queue. With the queue empty, the server will terminate, but the
consumer could still not have fully executed the databse query.
To solve this, the run() method is syncronized, so it can only be run on the
object by one thread at a time, and is made to run at least once (to force LB
to wait on any already processing run)
Also, the pause between consumer runs was altered to be in ticks (50ms) rather than
in seconds, to prevent needless pauses between runs.
Fixes#580Fixes#56
Currently will search only using block type ie searching for prismarine_brick
will search for all prismarine blocks
Also removed pluralisation of prismarine_brick
- Print warning if the pre-existing file doesn't contain one of the new names
- Make name lookup in plugin startup to force the MaterialName static code to be run