Plan | Player Analytics

Plan | Player Analytics 5.6 build 2965

5.4 build 1489 - feature patch "Further"

Hi! This update has been in the making for quite a while, but it's here now. It has a bunch of new exciting features as well as, maybe exciting bugfixes? There's now a little over 5000 commits! Pretty good pace for ~5 years of development.

This feature patch was codenamed "Further" as it attempts to bring more to the already existing features.

Special thanks to untuned, PerchunPak, Shadowhackercz, HexedHero, Kopo, rymiel, Vankka, DrexHD, zisunny104, SkipM4, MAXOUXAX, adhg6 and BratishkaErik for their contributions to this update!

Change log
  • Notice: A warning is now emitted on enable with JVM version < 11. Plan will require Java 11 or newer from version 5.5 onwards.
Fabric support
Kopo, DrexHD, Vankka and rymiel implemented fabric server support for Plan. Big thanks to the ton of work that was put into porting the abstraction layer, listeners and command logic to support fabric servers.

  • Fabric is distributed separately as PlanFabric.jar, see Github or Curseforge if you need to install it. Thanks to Kopo for implementing a release pipeline that automatically deploys the fabric version to CurseForge to avoid extra work.
Website
Added Performance tab to Network page

[IMG]

This new performance tab can be used to compare server performance of multiple servers as well as view the performance data gathered by proxy server. You can find it under /network > Servers > Performance

Added server uptime
[IMG]

Network as numbers, Quick view and Server as numbers now show the current uptime of the server. The uptime shows time since last server start. It is calculated from latest plan_tps entry or from time stored in memory at startup.

Query page additions
  • Added View selector for servers
    You can now select one or multiple servers to view the result data from. This is useful if you want to know players who have played the most on specific servers
    [IMG]
  • Added has played on server filter to only see players who have joined certain servers.
    [IMG]
  • Added plugin boolean group filter
    You can now filter players by booleans defined by Extensions.
    [IMG]
    Multiple-select performs players in both (OR-operation). Adding a 2nd 'Has plugin boolean value' -filter allows AND-operation
Other website changes
  • Added server name to kill lists
  • Fixed active session not appearing or affecting numbers on the /player page
  • Kopo fixed query page graphs not showing in light mode
  • Kopo fixed accordions not opening properly due to missing bootstrap attributes
  • Hexedhero changed /player page player head image to include the helm of the skin.
  • Kopo updated HighCharts to 9.2.2
    • Due to an open bug in HighCharts the line graphs may look slightly odd if you have gaps in data and Display_options.Graphs.Show_gaps_in_data is false - as the gaps will now appear as long lines without points. I think this bug will be fixed some time next week as fix for it is in review
  • Kopo added /v1/version (for getting information about current version) and /v1/user (for getting information about logged in user) endpoints preparing for future removal of server side html rendering
Added web developer mode
  • Customized_files.Path can now be used to choose where Html Customized files are placed
    (Change this to "<absolute path to git repo>/Plan/common/src/main/resources/assets/plan/web"
    for easy time developing)
  • Customized_files.Enable_web_dev_mode can be used to enable modifications of all files
    as well as bypass resource caching for instant updates on browser refresh.
Adding new files still needs recompiling the plugin, but this should speed up
modifications to existing parts of the website considerably.

Html Customization
  • Enabled Plan web resources are now exported during Plan enable so you no longer need to visit the page after enabling.
  • rymiel implemented a task that checks the modify dates of your custom html files against the ones in the jar and warns if you're using files that are older. (Old files usually cause confusing webpage errors so it's good to have some warning about it on the console.) If you have old files, rename them and reload Plan to generate new versions, then apply your modifications to the new file.
    • Note that files generated after modifications made on github are not detected due to lack of data on what version the generated files are. (The last modified date is used)
Config
  • Added World_aliases.Regex-setting that allows defining a regex to use for grouping world names under same alias. (Note that you can also use the existing list to group worlds under the same alias). This feature helps servers where plugins generate large amounts of worlds manage their Plan config - any world that matches a regex won't be added back to the list.
  • Incorrect Buycraft secret link was corrected by untuned
  • rymiel made it possible to set Display_options.Graphs.TPS.High_threshold and Medium_threshold as decimal numbers (eg 19.5) to allow finer control over these thresholds.
Locale
  • RU Locale was updated by PerchunPak and BratishkaErik
  • CS Locale was updated by Shadowhackercz
  • CN Locale was updated by SkipM4
  • zh_TW Locale was updated by zisunny104
Extensions
  • Vankka made an Extension for LibertyBans
  • Fixed issues with Logblock Extension not working (Now it should finally work)
  • Fixed issue with newer Quests version and Quests Extension
  • MAXOUXAX fixed ViaVersion extension on Velocity & it changed support to 4.x.x versions of ViaVersion.
  • Ignored Floodgate related exception
Placeholders
  • Added player kill related placeholders
    • %plan_player_player_caused_deaths%
    • %plan_player_deaths%
    • %plan_player_mob_caused_deaths%
    • %plan_player_kdr%
    • %plan_player_mob_kdr%
    • %plan_player_recent_kill_<1-10>%
    • %plan_player_recent_death_<1-10>%
  • Added %plan_top_{category}_{timespan}_{i}% placeholders
    • categories: playtime, active_playtime
    • timespans: month, week, day, total
    • i: 1 to 10
    • Example: %plan_top_playtime_month_1% shows name of the player with highest playtime in last 30 days
  • All placeholders that don't start with plan_player_ now support server identifier at the end to show data from another server. Use plan servers command for identifiers. Examples:
    • %plan_tps_day:Skyblock%
    • %plan_ping_day
      :p
      roxy%
    • %plan_sessions_afk_time_day:Lobby%
    • %plan_sessions_afk_time_day:Server 1%
    • %plan_tps_day:ed568cd3-f5ab-4893-996b-90fa3b9a9e64% (supports server uuids too)
Other
  • Vankka implemented database driver downloading to reduce jar size below Cloudburst and Ore limits
  • Fixed NPE on 1.7 servers related to ping method
  • Fixed issue with plan db move command when a server had been uninstalled
  • Fixed an issue with plan db uninstalled not being able to set Proxy as uninstalled
  • Plugin startup should no longer perform a query related to export system on the server thread during enable. (now async)
  • Building Plan now requires JDK 16 - NOTE that this does not mean Java 16 is needed to run Plan since it is still compiled to Java 8.
  • rymiel fixed Velocity implementation using wrong component serializer for legacy text
  • rymiel added a Ore version checker for Sponge to comply with Ore guidelines.
  • Fixed NPE when Plan was reloaded at the same time as website was accessed
5.4 build 1366
This update brings some more bugfixes!

Special thanks to rymiel, Kopo & mbax for contributions to this update
Change log
Website
  • Kopo fixed registration modal not opening after pressing register [builds 1354+]
  • rymiel fixed Player page plugin tabs not switching with multiple servers having the same plugin
  • rymiel changed login and registration to use Request body instead of query parameters - This is more secure as the query parameters could end up in browser history. Previous authentication still works to not break discord bots written by community members, but it is recommended that you move to POST /auth/login with the same previously used query parameters in request body.
  • Login page now looks proper (I was getting some uncomfortable feeling about it being slightly different than before)
Extensions
  • Kopo fixed ProtectionStones extension causing a chunk load and as result a lag spike (Not a problem in ProtectionStones)
  • Fixed Logblock throwing world: null errror
  • Fixed Registration of Floodgate extension with Floodgate 2.0 (1.0 no longer supported)
  • This was already in previous release, but I forgot to mention it: mbax fixed FactionsUUID extension breaking with newer version of FactionsUUID
Other
  • Removed two exception logging calls accidentally left in during debugging
  • Started using the new github issue forms
  • Moved to a new workflow for implementing issues, separating the tasks of figuring out what needs doing, and doing it.
Change log 5.4 build 1354
This update contains bugfixes and an upgrade to bootstrap 5.

If you got 5 seconds, please answer this one question poll about Html customization https://strawpoll.com/cq5e7vuw6

Special thanks to Kopo for contributions to this update.

Change log

Website
  • Kopo updated Plan to use Bootstrap 5, this was a large update, a lot of effort was put to keep appearance of the page the same
  • Kopo fixed dark theme not applying to query page table properly
  • Kopo removed horizotal scrollbar from players tables so it should look a lot cleaner if you have a lot of plugin data there.
  • Some or all Performance graph labels are now hidden depending on the screen width so that the graph is still viewable on mobile.
Bugfixes
  • Kopo moved Velocity support to version 3.0.0.
  • Fixed session shutdown save exception on spigot 1.17 related to class loading
  • Fixed network page breaking due to loadServerPie going missing with some locales
  • Fixed ping not being available on 1.17 Spigot
  • Fixed AdvancedBan Extension running to NPE when player name doesn't have an UUID
5.4 build 1330 - Java 16 support
This update adds Java 16 support, removes H2, updates many locales and fixes various bugs.
Special thanks to Kopo, 4drian3d, EyuphanMandiraci, 10935336, 洛伊, Sander0542 and portlek for contributing to this update.
Change log
Java 16 support
Runtime dependencies are no longer downloaded, so the reflection error goes away, and with it Java 16 is now compatible.
Removed H2 support
H2 has been deprecated for a while now, and the database drivers are removed in this update.
If you still haven't migrated despite the big warning during enable, do so with /plan db move h2 <sqlite / mysql> before updating. This database was very prone to corruption and that's the main reason it was phased out.
Option to warm up Plan placeholders
'Plugins.PlaceholderAPI.Load_these_placeholders_on_join' setting allows warming up Plan placeholders in case you are using some plugins that run placeholder replacement on server thread. This should reduce the need to replace things twice, but you need to add the specific placeholders to this list.
Removed SQLite drivers for android-arm and DragonflyBSD
To keep jar under size limits these two drivers had to be removed (I hope nobody runs Plan on a phone or TV).
Metrics said there were 2 FreeBSD users, but they are unaffected since drivers for that is still included.
Locale
  • Added Traditional Chinese (ZH_TW) locale by 洛伊
  • Added Dutch (NL) locale by Sander0542
  • Simplified Chinese locale updated by 10935336
  • Turkish locale updated by EyuphanMandiraci
  • Spanish locale updated by 4drian3d
Website
  • Added /errors and /v1/errors to view recent Plan error logs in the browser
  • Fixed tab navigation going under the "close sidebar" area on some phones [all builds]
  • Fixed South Korea not getting color on the map [all builds]
Extensions
  • Fixed LogBlock Extension not getting any data [all builds]
  • Fixed PlotSquared Extension throwing error sometimes [builds 1284+]
  • Possibly fixed Tebex Extension throwing error sometimes [builds 1284+]
  • portlek fixed a NPE related to DiscordSRV Extension [all builds?]
Other
  • Kopo updated Plan to build with Gradle 7
  • jQuery is now served via CDN to reduce jar size.
5.3 build 1284 - Extension Bonanza
This version brings a new builder based API to the DataExtension API and with it support for 13 new plugins. In addition to this a lot of bugs were fixed. At least 35 tickets were closed for this release.
Special thanks to hallo1142, Aurelien30000, BruilsiozPro, WolverStones, BrainStone, Kopo942 and AppleMacOS for their contributions to this update. Thanks y'all!
Change log
DataExtensions
New DataExtensions
Added support for 13 plugins:
  • AuthMe
  • FastLogin
  • Heroes
  • KingdomsX
  • Lands
  • LogBlock (Diamonds / stone mined and other metrics)
  • MarriageMaster
  • MyPet
  • PlaceholderAPI (Track any placeholders by adding them to the Plan config)
  • PlotSquared
  • ProtectionStones
  • React (Actions performed by React)
  • Quests
Note that if you're not seeing data from a plugin, make sure the player has joined the server after the update and check plugins tab of their player page before asking about it, thanks :)
Updates to existing DataExtensions
  • AdvancedBan
    • now records data again [unknown impact]
  • BentoBox
    • now has AOneBlock and MagicCobblestoneGenerator data
  • DKBans
    • Fixed NPE [all builds]
  • Floodgate
    • Fixed UNIQUE constraint violation [all builds]
  • Litebans
    • Added datapoint for player names of players who connected using same IP (No IPs displayed though)
  • Tebex
    • now fetches full purchase history with the paginated API and shows player's purchases on their pages.
  • ViaVersion
    • Velocity support
  • Tables over 10 rows now show search bar and pagination (Previous limit 50 rows)
  • It is now possible to sort extension tables by value or date when they have over 25 rows (Previously only alphabetical)
  • Optimized transaction that updates tables for dataextensions
    • old: delete all + insert (2n operations)
    • new: overwrite + insert/delete remaining (n operations)
DataExtension Builder API
The thing that made a lot of this possible:
  • Added a builder based API for defining data of other plugins https://github.com/plan-player-analytics/Plan/wiki/DataExtension-API-Builders
    • Allows dynamic data definition at runtime (Like that of PlaceholderAPI via configuration).
    • Beneficial for plugins that use one class to hold all their data, as only one fetch is needed.
    • IDEs have better auto-completion support compared to annotations.
  • The annotation based API was refactored to use the builder API in its implementation.
Website
  • Updated SB Admin 2 css to newer version
  • Player links now use UUIDs instead of names to support viewing duplicate names in some cases. Note that names still work in the URL.
  • Added average TPS to "During low tps spikes"
  • Fixed server page calendar not appearing. [builds 1174+]
  • Fixed 'Plan' showing as server name on session accordion [builds 1115+]
  • Fixed server page showing join address pie for the whole network [builds 1115+]
  • Kopo942 fixed HighCharts scrollbar not swapping color with Nightmode without refresh [all builds]
  • Fixed /players page player links going to wrong place when using reverse-proxy via /plan/ subdirectory
  • Fixed flickering of extension cards when using Chrome
  • AppleMacOS fixed login page logo being stretched when using Safari
  • Removed "Servers" divider from player page in case to make it clearer that those are also about the player.
Locale
  • Deutch locale updated by hallo1142
  • French locale updated by Aurelien30000
  • Turkish locale updated by BruilsiozPro
  • Czech locale updated by WolverStones
Placeholder API
  • BrainStone added a bunch of <placeholder>_raw placeholders that return milliseconds instead of formatted time value
  • BrainStone fixed Plan not supporting OfflinePlayers and Kopo942 fixed an NPE when %plan_(non_existing_placeholder)% was given
Other Bugfixes
  • {Java} Sorted out illegal reflective access warning during dependency loading [builds 1108+]
  • {Join addresses} Stopped using Paper specific method that was returning bad data in some cases [builds 1124+]
  • {Config} Prevented use of &, / and ? in server names.
  • {Export} Fixed exported player pages not loading json. [builds 1056+]
  • {Database} Possibly fixed locking time exceeded and deadlock issues with extension related transactions [all builds]
  • {Operator status} Fixed operator status not being updated during first join [all builds]
  • {Plugin enable} Fixed plugin not enabling when /plugins/Plan folder was a symlink
5.2 build 1174
This update brings a bunch of small improvements and bugfixes to prepare for the next leg of the development of new features - a lot of extension related work is planned for 5.3.

Bugfixes in change log now have the earliest affected version in square brackets so you know if your version is affected.

Special thanks to Creeperface01 and WolverStones for their contributions to this update.

Change log
Data gathering
  • (New) End crystal caused kills are now counted as PvP kills when a player caused the crystal to blow up.
  • (Critical) Fixed World times not being gathered properly [builds 1097+]
    A missing "update world state" call from session end event lead to sessions missing the last played world's data completely
  • Fixed CPU usage related UnsatisfiedLinkError when running inside a container [all versions]
Website
  • (New) Added Geolocations filter to the Query page
  • (New) Join address pie is now displayed as text if there is only single join address in the database.
  • Fixed JSON cache fetching the wrong thing for sessions json sometimes [builds 1062+]
  • Fixed HTTP 500 on Query page when using MySQL (mariadb not affected) [builds 1147+]
    • Prevented single broken filter breaking all filters in the future
  • Fixed JSON cache related NPE when website was accessed before plugin fully enabled [builds 1062+]
  • Fixed player page sessions calendar having a spinner despite having loaded [builds 1147+]
Database
  • SQLite now waits for queries to finish on shutdown due to the potential for JVM crash when the connection is shut down by another thread than the one doing the query. This does not cause delays if the website is not accessed near the server shutdown. [all versions]
  • Added more messages to plugin shutdown to let users know what Plan is waiting for before disabling
Language
  • Few typos in Czech locale fixed by WolverStones
  • Fixed a bunch of typos
  • Locale files on the repository updated with new language lines
Other
  • PlaceholderAPI (nukkit) version updated by Creeperface01
  • Test coverage increased from 41% to 53%
    • Largest impact comes from a test that checks 200 different variations so that all web endpoints are returning correct access codes instead of being broken.
5.2 build 1147
This update contains a few quality of life improvements as well as bugfixes.
Security vulnerability with cookies not being invalidated properly upon logout was also fixed.
Special thanks to Kopo942 for three contributions to this update.
Change log
New features
Servers dropdown
dropdown servers
Network page servers dropdown now has links to all servers in it. If you got loads of servers there is a scrollbar, so no worries. Thanks to Kopo942 for implementing this.
Persistent cookies
Login cookies now persist across restarts, so that you don't need to log back in after scheduled reboot. If you still need some way to log everyone out, /plan logout * command was added with plan.logout.other permission.
Cookie expiry time can now be set in the config under 'Webserver.Security.Cookie_expires_after'.
During implementation a security vulnerability was discovered where due to the Request headers not being passed inside the code properly, the cookie was not found during logout and was never invalidated. If a rogue actor got access to the cookie they would have been able to use it for the 2 hours cookies were valid in the previous versions.
Join address filter to the Query page
join addresses
You can now filter players in the Query based on what address they have joined with.
Bugfixes
MySQL driver trouble ("Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY")
Issues with Plan mysql driver overriding driver of other plugins has been resolved by unregistering the driver after it has been loaded.
Join address gathering
  • Made all addresses lowercase to make it easier to read the pie
  • Fixed network join address pie counting one address multiple times when player had joined multiple game servers with the same address
Website
  • Kopo942 fixed URL hash breaking when clicking "Day by Day" or any other graph button on the Network overview tab
  • Kopo942 fixed loader spinner not being centered
Other
  • Fixed a bug where AFK time was gathered for someone with plan.ignore.afk permission when they used the /afk command.
  • Added a warning when database clean task timer is longer than extension data removal threshold (Stops disabled extension data from being cleaned)
  • Wrote more tests and enabled old disabled tests, test coverage increased from 35% to 41%.
5.2 build 1124
Sorry for releasing that mess yesterday. I was way too tired to be making a release in the first place, and it only got worse as issues started pouring in. Well, live and learn. Today's a new day and I have spent 2 hours sorting out issues and testing the join address gathering.
Change log
  • Fixes to join address gathering
    • "Hostname" renamed to "Join addresses" to be more clear
    • This update applies a patch that removes all hostnames gathered by builds 1115-1120 since they are wrong kind of data.
    • Started using proper method on Spigot (PlayerLoginEvent#getHostname). This was tested to be returning the correct thing on my test server
    • Started using proper method on Paper (Player#getVirtualHost#getHostString). This was also tested on my test server.
    • Removed the method call from nukkit since there was no proper method available to gather this data.
    • Moved the hostname pie to its proper location on the server page (It was leaving a gap in the middle of the page)
Change log 5.2 build 1120
  • [Hotfix] Fixed StackOverflowError related to ActiveSession after the page was viewed while a session was active
Change log 5.2 build 1119
  • Made player's join-address update when they join even if they have registered before
  • Use proper methods for getting the hostname on spigot (Probably fixes hostnames for spigot)
Top