BeardStat

BeardStat is statistics tracking plugin for bukkit. It tracks a wide variety of user statistics and makes them available to your playerbase and plugins.
Recorded stats
- last Login and logout time
- Total playtime
- block placement and breaking (including sub/metadata blocks like wool, logs etc)
- Items picked up/dropped
- Damage dealt and recieved
- Kills and deaths
- Food consumed
- Sheep sheared and dyed
- TNT detonated
- Distance travelled on foot/boat/cart/horse/pig
- Items crafted
- Animals tamed
- Teleports
- Fishing
Web interface (under development)
BeardStat also comes with a web interface for stats, this allows players to view their own and friends stats on your servers website. the Web interface also includes a scoreboard system to rank players based on various statistics (playtime, creepers killed)
Commands
Stats are recorded per world, and you can blacklist worlds/gamemodes from tracking. BeardStat also has a number of commands: * /stats - access to all stats information * /played - shows a players playyime. * /laston - Returns the last time the player was on * /statpage - Allows showing a selection of player stats, useful with Bukkit's command aliasing
Dev builds
Development builds of this project can be acquired at the provided continuous integration server.
These builds have not been approved by the BukkitDev staff. Use them at your own risk.
(Please note, zips in dev builds currently contain a broken implementation of the web interface, please instead download the .jar file instead. The web interface available on the right of this page) Development builds fresh from Jenkins
Issues
BeardStat has an issue tracker on github, https://github.com/tehbeard/beardstat/issues.
For error reports please include the following: * full stacktrace of the error * plugin version (inc. build number if using one from CI) * Bukkit version * Database type used (SQLite / MySQL)
Plugin integration
BeardStat provides a rich API for plugin developers to hook into BeardStat and read / record statistics.
For Developers
BeardStat stats are identifiable by a unique Id generated from 4 sub components: * Domain * World * Category * Statistic
Domain is the primary namespace for a collection of stats, the "default" domain is used by BeardStat, I ask that you use your own unique domain for your plugin (i.e. if you make a PvP arena plugin, you could use the domain "pvparena").
World represents the world in which this stat was recorded, these are for the most part the name of the world.
Two special cases exist however. "__global__" is a reserved world name, meant for stats that do not pertain to a world. The second case is "__imported__", this is a reserved world for stats that have been imported from an older version of BeardStat before per world storage was implemented.
While not intended, you can use the world id for a unique area that is not a whole world (Going back to our pvp arena example, you could use the arena names instead, such as old_forge, broken_bow instead of a world name)
Current plugins that are known to integrate BeardStat: * BeardAch - Achievements plugin * SimpleSpleef Evolution
Metrics
BeardStat includes the plugin metrics code developed by Hidendra (author of LWC), which collects anonymous information about the plugins deployment (minecraft, server, plugin version, assumed server location at country level and database type used by BeardStat, aggregated into graph form.) More information on this system, including how to disable it can be found here
-
View User Profile
-
Send Message
Posted Jan 30, 2013@MsPtibiscuit
hmm, the only correlation between those two lines seems to be event.getPlayer() , are you by chance running some sort of npc plugin, or something that is firing those events with blank player data?
Also I am looking into how to get defered (library BeardStat uses to load stats async so that it doesn't lockup the server on player join) to compile for java 6.
-
View User Profile
-
Send Message
Posted Jan 30, 2013The plugin works for 1 day, but then, the logs are spammed by:
Thanks for the awesome plugin ! =)
Edit: Try to compile the plugin with an older version of Java (6 is enough old):
-
View User Profile
-
Send Message
Posted Jan 30, 2013Is there anyway i can set the stats to show up like dynmap (which has a built in server webpage)?
Enjin does not support php files so i cant show the players playtime/stats etc..
-
View User Profile
-
Send Message
Posted Jan 30, 2013Hey, I'm rather new at messing with code and I'm not sure how to set up formatting for the stats displayed in MC. I can't make heads or tails of the example custom format that was given and the distance moved is not showing up with 'meters' on it anywhere. I'd love to know how to add that to the displayed move stat and how to format the seconds in total play time and last login to make a little more sense at a glance.
In other news I am loving this mod and after I get this part sorted out I will move onto BeardAch. This will make my server a lot more fun and maybe encourage people to try out a few random things they haven't before.
-
View User Profile
-
Send Message
Posted Jan 27, 2013@timsavage
I've fixed the lastlogin field in my latest dev version afaik, will go back and double check.
Will have a look at /laston and figure out whats causing it.
@AssRealm
I can't find errors on my local system, and the errors could be pointing at any one of a dozen things on those lines, Will release 0.5.1 soon, and separate out the lines where these errors are to try and get a better indication of what's going wrong.
0.5.0 code line - entry.getValue().getStat(statName).increment(); error could be any function call
plan to find the bug for next version StatBlob blob = entry.getValue(); Stat stat = blob.getStat(statName); stat.increment(); One operation per line = Know exactly where it fails
-
View User Profile
-
Send Message
Posted Jan 27, 2013Ok, I upgraded my java, and all is good. In fact, it's great! This is a fantastic plugin!
I'm using the 0.5 beta, with Bukkit-1.4.7-R0.1-b2602, and I have noticed a couple of issues.
1. the field 'lastlogin' never gets updated in the database (I'm using mysql backend). 2. /laston command creates database entries for non-existant users. So, if I make a typo or type a name that isn't somebody who's ever been on my server, a listing for that name is created.
That's it so far. Thanks for the awesome plugin!
-
View User Profile
-
Send Message
Posted Jan 25, 20136:16:00 AM [WARNING] [BeardStat] Task #31 for BeardStat v0.5.0-SNAPSHOT-ASync Ambrosia-git-jenkins-BeardStat-84 generated an exception
java.lang.NullPointerException
at me.tehbeard.BeardStat.containers.PlayerStatManager.saveCache(PlayerStatManager.java:53)
at me.tehbeard.BeardStat.BeardStat$dbFlusher.run(BeardStat.java:278)
at org.bukkit.craftbukkit.v1_4_R1.scheduler.CraftTask.run(CraftTask.java:53)
at org.bukkit.craftbukkit.v1_4_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345)
at net.minecraft.server.v1_4_R1.MinecraftServer.r(MinecraftServer.java:530)
at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:224)
at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
Got this error when using 1.4.7 R0.1, BeardStat 0.5, BeardAch 0.4.6
-
View User Profile
-
Send Message
Posted Jan 25, 2013@timsavage
Yes, one of the libraries it uses is compiled for Java 7
-
View User Profile
-
Send Message
Posted Jan 25, 2013Does this plugin require java 1.7? I'm getting the following error with CraftBukkit Beta Build (1.4.7-R0.1):
[SEVERE] Error occurred while enabling BeardStat v0.5.0-SNAPSHOT-ASync Ambrosia-git-jenkins-BeardStat-84 (Is it up to date?)
java.lang.UnsupportedClassVersionError net/dragonzone/promise/Promise : Unsupported major.minor version 51.0
-
View User Profile
-
Send Message
Posted Jan 24, 2013@AssRealm
There is a transfer mechanism built in, use the config at this url https://gist.github.com/4630499 as an example of how it is done, once transferred, set stats.database to the new provider. As always, backup before doing this, and if possible do so during downtime.
I will attempt to hunt down whats causing these bugs this weekend assRealm
-
View User Profile
-
Send Message
Posted Jan 24, 2013An error with BeardStat.. Weird
2013-01-24 16:00:52 [SEVERE] Error executing resolve callback with Deferred: {RESOVLED,null} java.lang.NullPointerException at me.tehbeard.BeardStat.listeners.DelegateIncrement.invoke(DelegateIncrement.java:29) at me.tehbeard.BeardStat.listeners.DelegateIncrement.invoke(DelegateIncrement.java:7) at net.dragonzone.promise.Deferred.run(Deferred.java:487) at net.dragonzone.promise.Deferred.doCallbacks(Deferred.java:228) at net.dragonzone.promise.Deferred.onResolve(Deferred.java:363) at me.tehbeard.BeardStat.listeners.StatPlayerListener.onPlayerMove(StatPlayerListener.java:155) at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477) at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462) at net.minecraft.server.v1_4_6.PlayerConnection.a(PlayerConnection.java:219) at net.minecraft.server.v1_4_6.Packet10Flying.handle(SourceFile:136) at net.minecraft.server.v1_4_6.NetworkManager.b(NetworkManager.java:290) at net.minecraft.server.v1_4_6.PlayerConnection.d(PlayerConnection.java:112) at net.minecraft.server.v1_4_6.ServerConnection.b(SourceFile:39) at net.minecraft.server.v1_4_6.DedicatedServerConnection.b(SourceFile:30) at net.minecraft.server.v1_4_6.MinecraftServer.r(MinecraftServer.java:598) at net.minecraft.server.v1_4_6.DedicatedServer.r(DedicatedServer.java:224) at net.minecraft.server.v1_4_6.MinecraftServer.q(MinecraftServer.java:494) at net.minecraft.server.v1_4_6.MinecraftServer.run(MinecraftServer.java:427) at net.minecraft.server.v1_4_6.ThreadServerApplication.run(SourceFile:849)
-
View User Profile
-
Send Message
Posted Jan 23, 2013Is there a way to transfer data in the stats.sqlite file to the stats.yml file?
-
View User Profile
-
Send Message
Posted Jan 13, 2013Uploaded bug fix to blog, same link as before
http://www.tehbeard.com/blog/beardstat-0-5-beta/
Uploading and awaiting file approval on dev bukkit at the moment.
-
View User Profile
-
Send Message
Posted Jan 11, 2013Thanks for the beta!
-
View User Profile
-
Send Message
Posted Jan 10, 2013@rudolf323
Thanks, found the problem, fixing.
-
View User Profile
-
Send Message
Posted Jan 10, 2013I am using 1.4.6 R.3
"10.01 20:32:57 [Server] SEVERE at java.lang.Thread.run(Thread.java:722) 10.01 20:32:57 [Server] SEVERE at me.tehbeard.BeardStat.DataProviders.MysqlStatDataProvider$1.run(MysqlStatDataProvider.java:229) 10.01 20:32:57 [Server] SEVERE at net.dragonzone.promise.Deferred.resolve(Deferred.java:451) 10.01 20:32:57 [Server] SEVERE java.lang.IllegalStateException: Promise already finished 10.01 20:32:57 [Server] SEVERE Exception in thread "Thread-218" "
-
View User Profile
-
Send Message
Posted Jan 10, 2013thinks ! I test immediatly
-
View User Profile
-
Send Message
Posted Jan 10, 20130.5 till DBO approves.
http://www.tehbeard.com/blog/beardstat-0-5-beta/
-
View User Profile
-
Send Message
Posted Jan 10, 2013Can you put the version on your site please?
-
View User Profile
-
Send Message
Posted Jan 9, 2013@rudolf323
Waiting on file approval