Commit Graph
663 Commits
Author SHA1 Message Date
Philip Cass c8b11a6b15 Add null check for projectile source. Fixes #626 2015-07-17 10:35:55 +01:00
frymaster ce323f5f50 Alter double chest type/location code
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
2015-07-11 17:43:30 +01:00
Ammar Askar 5bac149692 Fix up javadocs 2015-06-23 19:48:20 +05:00
Philip Cass 115e9bd7ac Updated HikariCP version. Should result in more informative errors than in bug #617 2015-06-23 14:11:07 +01:00
Philip Cass 293d180abb Updated CI URL in pom.xml to point to correct repo 2015-04-09 10:46:06 +01:00
Philip Cass d8143a6d89 Add logging implementation for HikariCP. Fixes #606 2015-03-22 22:34:33 +00:00
Philip Cass 54545ac928 Clamp Y values to between 0 and 65535. Fixes #605 2015-03-22 17:37:54 +00:00
Ammar Askar 9f41fffbc3 Reformat the entire project:
Use of braces is now enforced EVERYWHERE
Switched to 4spaces instead of tabs
2015-03-22 20:15:04 +05:00
Philip Cass 7c52c10922 Use "count" var to determine how many rows have been processed 2015-03-22 15:04:27 +00:00
Philip Cass 21a74dc7b2 Merge pull request #602 from ammaraskar/connection_pool
Use HikariCP for connection pooling
2015-03-22 14:50:19 +00:00
Ammar Askar 35cf735141 Set pool's minimum idle connections to 2 and gave the pool a name 2015-03-21 20:46:13 +05:00
Ammar Askar 448b11b35e Use HikariCP for connection pooling 2015-03-21 02:55:28 +05:00
Ammar Askar 51fdff20a7 Added a debug configuration setting for timing and query information 2015-03-20 22:46:01 +05:00
Ammar Askar c3b9784efb Make sure chat logging considers players using /lb hide
Fixes #281
2015-03-20 20:32:23 +05:00
Ammar Askar 1f5b7fed7c Allow explicitly hiding or unhiding with /lb hide <on/off>. Addresses #526 2015-03-20 20:29:08 +05:00
Ammar Askar a719891f74 Update to latest Metrics revision 2015-03-20 20:07:10 +05:00
Philip Cass 47c4ad6264 Merge branch 'build-version-automation' of github.com:frymaster/LogBlock 2015-03-20 19:18:32 +05:00
Ammar Askar 1a0a742daa Clean up encapsulating values in quotes significantly
Added hopefully the first of many unit tests to make maintaining the project easier
2015-03-20 15:39:47 +05:00
Philip Cass 9c558f8a74 Directly set plugin version information from pom.xml. Will include build number
whenever the project version contains anything other than numbers and periods
i.e. has "-SNAPSHOT" in it.
2015-03-16 13:36:28 +00:00
Philip Cass e12b9eee2b Add missing playername index on table creation and make the updater enforce this
for existing tables

Fixes missing change from commit 143bcf6d76
2015-03-16 11:19:03 +00:00
Ammar Askar e2d1349be1 Add proper version info to maven 2015-03-09 22:03:18 +05:00
Philip Cass 27866504c3 Merge branch 'master' into issue-442
- 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 #442
Fixes #470 Fixes #471
2015-03-08 18:50:34 +00:00
Thundaklap 6b4be88181 Fixed bow kills not being traceable 2015-03-08 16:49:10 +00:00
Philip Cass 9d344b9401 Merge pull request #581 from frymaster/merge-rows
Batch execution code and consumer timing optimising - massive DB insertion speedup
2015-03-02 20:30:16 +00:00
Philip Cass 6a38708a32 Merge identically-formed db INSERT rows into a single batch statement
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 #580 Fixes #56
2015-03-02 20:12:49 +00:00
Philip Cass 143bcf6d76 Add missing index on playername column 2015-02-28 12:12:27 +00:00
Philip Cass df8bc51437 Use custom names in block lookups
Currently will search only using block type ie searching for prismarine_brick
will search for all prismarine blocks

Also removed pluralisation of prismarine_brick
2015-02-26 16:44:46 +00:00
Mahagon 1cb32d26ed Check if WorldEdit Version is above WE 5 2015-02-25 11:00:46 +00:00
Philip Cass 32c5e16de6 - Massively expand the friendly names for data values
- 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
2015-02-24 22:53:13 +00:00
Mahagon 951bed3743 Added new material data values 2015-02-24 20:09:08 +00:00
Mahagon 8c232b5997 use getClickedBlock instead of getTargetBlock 2015-02-23 22:40:19 +00:00
Philip Cass 32ef8756f3 Merge branch 'DarkArc-worldedit-6.0.0'
Supports WorldEdit 6 API
Drops support for legacy WorldEdit
2015-02-22 15:03:23 +00:00
Philip Cass d48d042279 Directly use the UUID of the player responsible for event, if possible
Directly get the Bukkit World object of the event, if possible
Move Worldedit World -> Bukkit World conversion to a separate method
2015-02-22 14:55:58 +00:00
Philip Cass 82b4ffc2a2 Support utf8mb4 if the database does. Fixes #535
What MySQL calls "UTF8" is actually a subset of the full unicode specification.
It doesn't accept 4-byte UTF-8 characters.  Proper support is called "utf8mb4"
and is, these days, fairly common (Ubuntu 10.04LTS's bundled MySQL does not
support it, but later ones do)

Detection of utf8mb4: "SHOW CHARACTER SET WHERE charset='utf8mb4';" returns at
least one row

Conversion of pre-existing DBs: this was easy, we already had code in the
updater for this for when we started enforcing utf8. It was version-bumped and
set to update to either utf8mb4 or utf8, depending

Making it use utf8mb4 in the database connection: Actually hard.  Connector/J
5.1.13 or newer should autodetect this, but in my testing it didn't
(http://dev.mysql.com/doc/relnotes/connector-j/en/news-5-1-13.html)

As such, if utf8mb4 has been detected, I've added code that should manually
execute "SET NAMES utf8mb4;" on all new connections.

If a database does not support utf8mb4 (rare these days) I've added code to
strip these characters before DB insertion; they won't be recorded correctly,
but it'll avoid the exception from issue #535
2015-02-20 22:48:40 +00:00
frymaster 3711aa3890 Always update player name even if not logging player info. Fixes #577 2015-02-18 21:02:35 +00:00
frymaster be06056d5f Corrected very broken Actor equality check 2015-02-17 20:44:56 +00:00
Philip Cass ed5e40f469 Merge branch 'worldedit-6.0.0' of https://github.com/DarkArc/LogBlock into DarkArc-worldedit-6.0.0
Conflicts:
	src/main/java/de/diddiz/LogBlock/LogBlock.java
	src/main/java/de/diddiz/LogBlock/listeners/ExplosionLogging.java
	src/main/java/de/diddiz/worldedit/LogBlockEditSession.java

Update Worldedit 6.0 hook to support UUIDs
2015-02-17 20:25:02 +00:00
Philip Cass a4e4c35371 Bukkit API version bump for projectile source 2015-02-16 20:09:58 +00:00
Mahagon 4effd8c9fe log fire by playerinteractevent only on leftclick 2015-02-16 19:54:16 +00:00
Mahagon f46751aecd Also log the deletion of fire by a player 2015-02-16 19:54:16 +00:00
Mahagon a9ff27a2a0 fireball logging did not work with 1.8 2015-02-16 19:30:44 +00:00
Philip Cass c3f5ce9a5b Get the UUID column when summing by players 2015-02-16 15:25:02 +00:00
Philip Cass 7e49094699 Revert "Reduce UUID migration batch size. Fixes #576"
As per https://github.com/LogBlock/LogBlock/issues/576#issuecomment-74503498 the limit is confirmed at 100 names per request.

This reverts commit b3977d3e00.
2015-02-16 14:13:43 +00:00
Philip Cass b3977d3e00 Reduce UUID migration batch size. Fixes #576 2015-02-15 21:59:37 +00:00
Philip Cass e07038acee Missed version bump 2015-02-15 03:06:55 +00:00
Philip Cass 050a17506a UUID migrration fixes
Firstly, remove incorrect unique index on playername (and UUID, just in case) columns, and add a non-unique index on the UUID column

Secondly, account for setups not logging onlinetime - in that case, try to look up ALL names, and give any not found the log_ prefix rather than the noimport_ prefix
2015-02-15 02:50:12 +00:00
Philip Cass 543c55e32b Merge pull request #574 from frymaster/uuid
UUID integration
2015-02-14 14:11:50 +00:00
Philip Cass e3dc430931 Identify players by UUID and migrate existing databases to include this. Fixes #538, fixes #568
This creates a new column in the lb-players table called UUID. If this is in the form of a UUID,
it's assumed to be a player. If not, it's assumed to be a server entity (zombie, sheep, or
WaterFlow, LavaFlow etc.). LogBlock will set the UUID of entities to "log_" plus their name
(i.e. log_zombie or log_sheep)

To assist this is a new class Actor, which wraps a name/UUID pair, with constructors that will
generate one from server entities, or SQL results. Every listener and every class in Consumer
needed to be updated to deal with this

As of yet, only the playername is displayed in results (although the queries do return UUID data).
Similarly, you can only query by name (the database stores the last name they have logged in as).
In addition, the WorldEdit hook has been disabled (is not compiled) since LB needs to be updated
to use their new API, and the LB code hook has to extract UUID information for insertion.

The UUID importer assumes any player with an onlinetime of 0 is a server-generated source, and set
the UUID as above (log_sheep etc.).  For everything else, it sends 100 names at a time to Mojang's
name->UUID service, and records them if available.  If no result is found, it records their UUID as
noimport_theirname.  As this is more likely than other updates to be interrupted mid-way, the
importer is tolerant of e.g. the column already being added, and will resume where it left off.
2015-02-14 14:01:21 +00:00
Ammar Askar 6e12d159b4 Verbose logging for PreparedStatements 2015-02-08 16:34:46 +05:00
Dark Arc fa1e1b777a Updated for WorldEdit 6.0 2014-09-01 23:19:57 -04:00