PVP Stats icon

PVP Stats -----

Keep track of your users' PVP Actions - MySQL or SQLite recommended!




  • v1.11.60 - fix node other.avoidPlayerLookup
  • v1.11.59 - add alt abuse check, IP based, disabled by default for backwards compatibility, also allow to disable Mojang API player lookup and only return valid players for known names
  • v1.11.57 - improve complex abuse check
  • v1.11.56 - introduce complex abuse check which allows for several victims at the same time
  • v1.11.55 - catch null values in some PAPI implementations
  • v1.11.53 - attempt to prevent players damaging and then killing themselves for the win
----------, Feb 17, 2025

  • v1.11.52 - hook into both short and regular placeholders
  • v1.11.51 - address the fact that all stats are not actually world based
----------, Jul 10, 2023

  • v1.11.50 - add getHandlerList for hooking into our event system
  • v1.11.49 - add "currentstreak" logic for placeholders and thus top/flop stats
  • v1.11.48 - add a config setting to announce ELO publicly, and related language nodes
----------, Apr 21, 2023

  • v1.11.47 - add top/flop placeholder specifications for raw values, append _value or _name (or _v and _v respectively for shorthands)
  • v1.11.42 - add %value% placeholder for streak announcements and commands
  • v1.11.41 - add streakBrokenThreshold to require a minimum streak value to announce it being broken
  • v1.11.40 - add broadcast message about broken killstreak - you can set player message or broadcast to empty string to deactivate them
  • v1.11.39 - add player message about broken killstreak
  • v1.11.38 - try supporting topplus and topworld in placeholders, also in shorthands
  • v1.11.37 - try supporting topplus and topworld in placeholders
  • v1.11.36 - introduce /pvpstats topworld [type] [world] [days] {amount} - only works with specific stats - only for databases :p
  • v1.11.35 - properly apply command logic /pvpstats topplus [type] [days] {amount}
  • v1.11.34 - attempt to implement "topplus" which allows for "top players in the last X days"
----------, Dec 31, 2022

  • v1.11.38 - try supporting topplus and topworld in placeholders, also in shorthands
  • v1.11.37 - try supporting topplus and topworld in placeholders
  • v1.11.36 - introduce /pvpstats topworld [type] [world] [days] {amount} - only works with specific stats - only for databases :p
  • v1.11.35 - properly apply command logic /pvpstats topplus [type] [days] {amount}
  • v1.11.34 - attempt to implement "topplus" which allows for "top players in the last X days"
----------, Jun 4, 2022

v1.11.33 - move to HTTPS for Updater [core update]
----------, Mar 4, 2022

  • v1.11.31 - support hex color codes (Core Update)
  • v1.11.30 - properly pre-select top and flop kills when sorting by ratio
----------, Oct 3, 2021

  • v1.11.28 - allow to change default command behavior to show player's stats instead of a list of available commands - general.showCommands
  • v1.11.27 - reload the plugin when changing the config via command, so that all settings actually take effect
  • v1.11.26 - allow to set up streaks and commands "every X streak levels" - there can be only one logic so it will override the former version if activated
  • v1.11.25 - add spacer line breaks before comments for readability [core update]
  • v1.11.24 - someone pushed the wrong button [Documentation commit]
Quick addendum here;

the setting general.showCommands will stay as " true" for a while to account for backwards compatibility, as it has been the default for a while now. But I think that it would be much more handy and a more sturdy design to have a dedicated /pvpstats help command to show available sub commands, and have the old way of "falling back" to "telling players all the commands" only in niche cases.

Most end users probably just want to get their stats [no argument, or "show"] or another player's stats [as the argument, or "show player"] or the top players, easily doable with /pvpstats 10 for example.

I think this solution will be the preferred way of using the plugin.
----------, Aug 11, 2021

  • v1.11.23 - move update task to a later stage
  • v1.11.22 - allow to force reload the database after X seconds for multi-server setups
  • v1.11.21 - reduce priority and generally wait for WorldGuard specifically to allow for PVP cancelling before we care about it
  • v1.11.20 - do no longer count "last damage" for kill after death
----------, Jul 25, 2021

  • v1.11.19 - try supporting %killed% as placeholder for announcements and commands
  • v1.11.18 - fix NullPointer for null names and add short placeholders - this might not work, let's hope it does!
  • v1.11.17 - change pagination logic, needs more testing, use with caution!
----------, Jul 6, 2021

prefixed messages used to be sent to players AND to console - oups!
----------, Jun 23, 2021

  • v1.11.15 - allow multiple lines in announcements
  • v1.11.14 - clear up sorting (top/flop) code
  • v1.11.13 - properly use unit testing, start pagination implementation by allowing a page argument in the top and show commands
  • v1.11.12 - remove deprecated SQL driver, this loading is no longer necessary anyway
----------, Jun 23, 2021

  • v1.11.11 - improve update config setting comment, fix all comments having duplicated comment characters
  • v1.11.10 - only clear caches instead of pre-caching all players who might have stats
  • v1.11.9 - match player names more leniently
  • v1.11.8 - try a more sturdy and database based approach to find OfflinePlayers, for bigger servers
  • v1.11.7 - maybe prevent OfflinePlayer lookups crashing servers
----------, Jun 10, 2021

  • v1.11.6 - support null OfflinePlayers, because that is a thing
  • v1.11.5 - update plugin.yml to reflect version bump
  • v1.11.4 - properly create the language file for new users
  • v1.11.3 - remove debug code
  • v1.11.2 - activate encryption!
  • v1.11.1 - two updates:
    • CHANGE: Move around language nodes
    • FIX: (Core) do not inform people when they use an experimental version
----------, May 23, 2021

  • v1.10.4 - fix language file default values - sorry to new users!
  • v1.10.3 - fix config command tab completion
----------, May 6, 2021

v1.10.2 - improve world column check and support late loading of worlds, this should no longer throw around warnings and errors
----------, Apr 28, 2021

  • v1.10.1 - refactor several features into a library that gets shaded in
  • v1.9.6 - fix issue with mysql table checks with limited permissions
  • v1.9.5 - default the "show" permission to true
----------, Apr 28, 2021

  • v1.9.4 several updates:
    • FIX: Replace hardcoded messages with language messages
    • FEAT: Introduce pvpstats.show to restrict players watching other players' stats
    • FEAT: Add new config setting 'shortHandCommands' to disable exclamation point shorthand functionality
  • v1.9.3 - take minimum and default ELO into account when creating player statistics; fix test logic
  • v1.9.2 - teach K/D interpreter to display a number that makes some sense rather than 0, when dividing by 0
  • v1.9.1 - introduce K/D interpreter - it supports powers x² => (x^2) - thanks to garbagemule for the inspiration
  • v1.8.18 - properly treat the "simple calculation" config node as boolean
  • v1.8.17 - use plugin prefix in more places, this should reduce confusion and clarify who is talking
  • v1.8.16 - hide ELO information in outputs if ELO is not activated
  • v1.8.15 - allow to count pet kills, fix newbie check for deaths not from PVP
  • v1.8.14 - add ability to run multiple commands on a streak
----------, Apr 16, 2021

  • v1.8.13 - run streak commands synchronously!
  • v1.8.12 - shift the logic around to make meta restrictions work
  • v1.8.11 - add configurability for numbered entries, support player meta tags (NPC) to exclude from statistics
----------, Mar 19, 2021

  • v1.8.10 - update version check to work with alpha testing builds
  • v1.8.9 - add debug logs for async or sync
  • v1.8.8 - hotfix: fix crashes for mysql users
----------, Mar 11, 2021

  • v1.8.7 - change default behavior for precise stats to not run. there is an override config setting that will be announced instead of a warning that no-one listens to
  • v1.8.6 - (ci) fixed discord notification for multiline commit messages
  • v1.8.5 - (ci) separate master and pull request ci jobs
  • v1.8.4 - fix server crash when looking up player info on async compatible systems
  • v1.8.3 - bump minor version for the new release system. Thanks to Ffaen for all the help :)
----------, Feb 22, 2021

A player statistic caching function I recently added was prone to spamming the console a lot - sorry for that!
----------, Jan 27, 2021

Wow! For some reason I accidentally removed the hook - that was not supposed to happen!
----------, Jan 24, 2021

There is some documentation about the API, I added an event to hook in and to cancel.

https://github.com/slipcor/PVPStats/blob/master/doc/api.md
----------, Jan 22, 2021

this version includes a proper plugin.yml version. oups :D
----------, Jan 9, 2021

This fixes a small but annoying bug only present in mySQL and only affecting the duplicate check. No player data should be affected.
----------, Jan 9, 2021

  • v1.7.35 - Reintroduce /pvpstats cleanup to remove duplicates
  • v1.7.34 - Create SQL tables properly with new victim logic
  • v1.7.33 - various updates as follows
    • FIX: debugger not closing debug files properly
    • FIX: NPEs related to no-pvp-deaths and more
    • FIX: non-unique config nodes being offered as autocomplete and config set argument
    • FIX: delay kill streak and ELO messages until after the death message has been sent
    • FEAT: player display name feature - uses player names formatted by other plugins
    • FEAT: revamp autocomplete system to allow for partial matches, not only beginning-word-matches
    • FEAT: TextFormatter API that allows for more distinct highlights and information messages, allow information in hover-over, and issuing commands on clicks
----------, Jan 7, 2021

v1.6.32 - Make some entries write-only for safety reasons
----------, Jan 3, 2021

  • v1.6.31 - Rework config command, adjust op messages to provide more information, fix NPE for empty player entry
  • v1.6.30 - Update debugkill, migrate DatabaseAPI to use OfflinePlayer instead of Player
  • v1.6.29 - add "configset" command to set a config setting
  • v1.6.28 - move usage tracking to bStats, defaulting to give some more information about which features are being used
  • v1.6.27 - fix /pvpstats top (showing K/D)
----------, Jan 3, 2021

Sorry for all the latest updates, this is the first one properly fixing the newbie issue we had for a while now. Ffaen and I will be working on a proper warning system which will try to inform admins setting up the plugin why it is not working.
----------, Dec 23, 2020

This is a short term attempt to deal with Permissions plugins handing out permissions too widely, breaking my backwards compatibility, and breaking the plugin's functionality for LuckPerm users for example who do not take away undocumented permissions.

Why would they, they do not know them :)
----------, Dec 23, 2020

  • v1.6.23 - fix npe on first launch
  • v1.6.21 - vanished check actually reversing the logic
  • v1.6.20 - hide vanished players in command tab completion
----------, Dec 23, 2020

  • v1.6.19 - reduce database connections in generally, especially by caching UUIDs and legacy player names
  • v1.6.18 - add "killDeathSimple" config node to use simple kills/deaths instead of a complicated mathematical function
  • v1.6.17 - add "deathsDescending" config node to allow for default mathematical sorting of deaths, round ratios in all places!
----------, Dec 18, 2020

v1.6.16 - only write asynchronously to mySQL
----------, Nov 26, 2020

  • v1.6.15 - change the newbie permission to "pvpstats.nonewbie" to actually work like a permission, defaulting to "true"
  • v1.6.14 - add async runnables
  • v1.6.13 - move some database interaction to async thread

In the future, the newbie status is handled differently. Before, it was handled with a "restricting permission" pvpstats.newbie - some permissions plugins or setups caused issues because admins got ALL permissions. This is fixed now in a way that is backwards compatible:

pvpstats.newbie will continue to work for the time being, but you should change your permissions setup if needed, to give the people who are NOT newbies a permission pvpstats.nonewbie, which is given by default!

In the newbie group, you have to "take away" that permission. How you do this, depends on your permission plugin, I have seen "-" and "^" markings to remove a permission. Or set it to false via command :)
----------, Nov 22, 2020

  • v1.6.12 - add config setting to enable the newbie feature. for backwards compatibility this will stay "true" for a while
  • v1.6.11 - add "flop_*" placeholders to display things like "most killed people" - "flop_deaths_..."
  • v1.6.10 - format placeholder information and other list output by using existing language nodes
  • v1.6.9 - add scoreboards - needs testing ;) check the docs for info on how to set them up
In the future, the newbie protection will be safeguarded against greedy permission plugins. For backwards compatibility, this change is coming in two updates:

1) everyone already using the plugin will receive an update so eventual fixes they did still work
2) in the future the setting will default to "false" so you need to activate the newbie setting AND give newbie players their permission

The "flop" update adds a second way of adding placeholders. Next to "top_deaths_1" you can use "flop_deaths_1" - the former will show the player with the LEAST deaths on top, whereas the latter will show the MOST deaths on top.
----------, Nov 12, 2020

  • v1.5.8 - remove debug outputs that should not have been included in the release version
  • v1.5.7 - add commands and announcements to be issued when a player hits a certain streak value
  • v1.5.6 - repair SQLite never adding any entries, add victim name and UUID to all killstat database logics - adds github issue #28
----------, Oct 7, 2020

I created a discord for my MC plugins, join it: click

These are the fixes of this build:
  • v1.5.5 - Fix Updater throwing an error sometimes
  • v1.5.4 - Prevent NPE when a player damages themselves
----------, Sep 11, 2020


I have sent this to some people to test, and sadly have not had much feedback, so I will upload this but not have it auto update. Use with caution. It should not cause harm, it will work the same way it did before and it is backwards compatible AND old versions will be able to work again if this version fails. Good luck!


  • v1.5.3 - Set specific values asynchronously
  • v1.5.2 - Start preparing the assisting logic by adding last damage history
  • v1.5.1 - Remove Cleanup Command
  • v1.5.0 - Move all internal logic to UUIDs
----------, Aug 26, 2020

  • v1.4.19 - update the preloaded RAM player values when changing the database not by killing
  • v1.4.18 - add placeholders for TOP lists, use with caution!

    Examples:

slipcorpvpstats_top_kills_head_5 - heading ("Top 5 Kills")
slipcorpvpstats_top_kills_1 - Top player entry ("1. SLiPCoR: 100")
slipcorpvpstats_top_kills_2 - Second player entry ("2. garbagemule: 70")
slipcorpvpstats_top_kills_3 - ...
slipcorpvpstats_top_kills_4
slipcorpvpstats_top_kills_5

valid things to put up there:
  • kills
  • deaths
  • streak (maximum streak)
  • elo
  • k-d (kill/death ratio as defined in the config)
----------, May 4, 2020

v1.4.17 - add new config for statistics, 'createOnJoin', defaulting to true

This affects non-SQL-servers. People can turn this off if they have a big server with many players and yet do not work with a proper database ;)
----------, Apr 18, 2020

Well this is unexpected but it was really easy to implement tab completion, and it works all the way down to bukkit 1.8 :)
----------, Apr 10, 2020

  • v1.4.15 - add a debugkill command to manually add a kill for debugging
  • v1.4.14 - add a migrate command to backup or move to a different database implementation
----------, Apr 10, 2020


the ratio placeholder is analog to the rest:

slipcorpvpstats_ratio
----------, Mar 31, 2020

It seems that SQL stats databases never got the initial database entry - sorry for that - everything should work from now on
----------, Nov 24, 2019

  • v1.3.10 - address #21 and allow to use /pvpstats [playername] if the name is valid
  • v1.3.9 - address #20 and add players to database for SQLite databases
  • v1.3.8 - stop displaying warnings for the world column addition - it does not matter
----------, Oct 25, 2019

I think some SQL servers might have trouble updating the database if there are not kill stats present- this build should fix this!

I have not heard back from a tester, so let's just roll with it....
----------, Sep 18, 2019

This stops an error where the database tries to recreate the world column on every server start. Thanks to VoxSolus for notifying me :)
----------, Aug 26, 2019

In order to separate kills per world, I added a world column.

This does not affect the flatfile implementation. Changing this to include worlds would exponentially increase the file size.

If anyone really wants this please give me a shout.
----------, Aug 16, 2019

Thanks to Drc-DEV for the pull and the almost complete second fixing pull. I took the liberty of fixing the remaining errors ;)

What this update basically does is allow for player placeholders to show even if they are offline.
----------, Jul 18, 2019

v1.3.3 - add warning if precise kill stat collection is activated, as these stats show up nowhere in the plugin or API

Yeah this was totally not an update that I pushed early because I messed up the plugin.yml version. No no no.
----------, Jun 20, 2019

  • v1.3.2 - address #15 and update kills and death for other plugins to get the current stats (e.g. placeholders)
  • v1.3.1 - fix various weird issues with the config, causing all sorts of errors
  • v1.3.0 - this will be the last rewrite for a while, a lot of classes have been renamed and a lot of JavaDocs have been added
  • v1.2.1 - new command /pvp set [player] [type] [amount] to set specific player statistics

Sorry this has taken me so long but I really had issues while testing. Things worked on my end for whatever weird reason and testers had problems..

Also I am lacking testers. Spigot needs to add a DEV branch so I can have people test dev builds before I release broken builds.

OH yeah the config has been rewritten big time. I hope the comments make sense and everyone gets used to order :D
----------, Jun 20, 2019

There are some more config nodes you will notice, for flatfile settings, so in case you do not have a database and no SQLite installed, the plugin will create YML files with the set file names.

I have been rewriting some of the internal workings obviously to support multiple database systems, I have been testing YML and SQLite as much as I can, literally every command - but as I do not have a proper SQL server I can not test THAT part. So plase be careful using this version.

It should be fine though :D

I fixed some more bugs about the updater and other things throwing errors. :)
----------, Jun 7, 2019

Check your config for some new nodes to activate SQLite.

I am in the process of adding flat file support, for folks that don't want to even use SQLite but will have to deal with some hot YML action then.

This update silently fixes an Updater messup where it would never return valid updates and throw errors like crazy.

Use SQLite with caution. There is no migration to SQLite if you use mySQL!

The plugin will catch but display all errors, I can not test this myself very much because I am on my own, so good luck and happy hunting :D
----------, Jun 3, 2019

This version bump looks like much but it just is there to qualify the move from legacy to 1.13 API. There has been a big change:

The updater works like in my other plugins now, you now have a config block like this:

update:
mode: both
type: beta

Mode case insensitively supports:
  • off (fallback default)
  • announce - announce updates to OP players when they join the server
  • download - download updates automatically for the next reboot
  • both - do both and simply inform players rather that the update will happen on reboot, rather than asking them to download

Type case insensitively supports:
  • alpha - bleeding edge
  • beta - fairly tested things
  • release (fallback default)
----------, May 17, 2019

I used the wrong identifier, now it should work!
----------, May 13, 2019

This version updates the Placeholder API hook to a non deprecated version.

I am not running a setup where I can test this, so please give it a try. I have at least had verified that it no longer throws warnings or errors so it SHOULD work.

Fingers crossed!
----------, May 13, 2019

thanks to Ken for pointing out a flaw in the code :)
----------, Oct 24, 2018

Resource Information
Author:
----------
Total Downloads: 32,305
First Release: Jul 26, 2018
Last Update: Feb 17, 2025
Category: ---------------
All-Time Rating:
40 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings