Plan - Player Analytics, Sponge/Bukkit/Bungee/Velocity support

A new version has been released for Plan, it is available for download here.


Change log 5.1 build 768 - Command Rework

image

This update contains reworked command system and permissions.

Special thanks to Shadowhackercz and Vankka for their contributions to this update.

If you would like to affect Plan development priorities, fulfill this survey. It might take around 5-10 minutes.
https://forms.gle/w9ZniR8vfe1U1aHm6

Major changes

Command system rewrite

  • All platforms now use same permissions for same commands
  • All platforms now have all of the commands that have been available
  • When using commands as a player the help menu now has more information on hover
  • Actions that remove data now ask for confirmation instead of -a argument
  • Some commands that previously did not have a specific permission now have a permission (such as /plan register)
  • /planbungee and /planvelocity now called /planproxy (They still work as aliases though). Another alias /planp

See Commands & Permissions ¡ plan-player-analytics/Plan Wiki ¡ GitHub for updated permission & command information

Website

  • Login page now logs in when Enter is pressed
  • Login page now uses a <button> instead of <a> (might help password managers)

DataExtensions

  • Vankka contributed a FactionsUUID Extension that should support FactionsUUID and forks eg. SaberFactions (and the now dead SavageFactions)
  • EssentialsX Extension no longer stores economy information due to large amount of “Economy lag” messages.

Locale

  • Shadowhackercz contributed a Czech locale, use it by setting locale to CS
  • Lots of the command related messages had to be updated so some messages might be in English because they have not been translated yet.

If you run into any issues, please open a ticket at http://bugs.playeranalytics.net

A new version has been released for Plan, it is available for download here.


5.1 build 770 - Command Rework

Hotfix for build 768

  • Fixed NoClassDefFoundError: TextStringBuilder

image

This update contains reworked command system and permissions.

Special thanks to Shadowhackercz and Vankka for their contributions to this update.

If you would like to affect Plan development priorities, fulfill this survey. It might take around 5-10 minutes.
https://forms.gle/w9ZniR8vfe1U1aHm6

Major changes

Command system rewrite

  • All platforms now use same permissions for same commands
  • All platforms now have all of the commands that have been available
  • When using commands as a player the help menu now has more information on hover
  • Actions that remove data now ask for confirmation instead of -a argument
  • Some commands that previously did not have a specific permission now have a permission (such as /plan register)
  • /planbungee and /planvelocity now called /planproxy (They still work as aliases though). Another alias /planp

See Commands & Permissions ¡ plan-player-analytics/Plan Wiki ¡ GitHub for updated permission & command information

Website

  • Login page now logs in when Enter is pressed
  • Login page now uses a <button> instead of <a> (might help password managers)

DataExtensions

  • Vankka contributed a FactionsUUID Extension that should support FactionsUUID and forks eg. SaberFactions (and the now dead SavageFactions)
  • EssentialsX Extension no longer stores economy information due to large amount of “Economy lag” messages.

Locale

  • Shadowhackercz contributed a Czech locale, use it by setting locale to CS
  • Lots of the command related messages had to be updated so some messages might be in English because they have not been translated yet.

If you run into any issues, please open a ticket at http://bugs.playeranalytics.net

A new version has been released for Plan, it is available for download here.


5.1 build 791 - Change log

This update brings lots of improvements made by contributors, as well as bugfixes.
Special thanks to Vankka, FluxCapacitor2 & antonok-edm for their contributions!

Thank you for the numerous answers to the feedback survey. I have looked at the 54 answers and did some analysis of them on discord.
You can also find answers to some of the questions posted on the survey here https://github.com/plan-player-analytics/Plan/issues/1624.

Change log

Website

  • Added things that stop search engine spiders like Google from crawling the Plan website. This should stop your Plan appearing on google search in the future. (thanks FluxCapacitor2) Please note that exported files don’t contain robots.txt.
  • FullCalendar updated to v5 and the style to go with it (thanks FluxCapacitor2)
  • Browser back button goes to the previous page instead of the previous tab. Reduces the amount of back button clicks by a ton (thanks FluxCapacitor2)
  • Night mode can now be set as default in theme.yml by setting DefaultColor to night (thanks FluxCapacitor2)
  • Fixed DefaultColor setting in theme.yml. (thanks FluxCapacitor2) Note: If you missed 4.x.x to 5.0 migration the panel might appear light green after the update instead of Plan green
  • Removed special error case for Brave browser adblock as /v1/performance endpoint should no longer be blocked by adblockers. (easylist was updated) (thanks antonok-edm)
  • Removed scroll to top button (it was broken)

Commands

  • Fixed db move subcommand clearing the source database and failing to move data
  • Register command now says “Registration failed, try again (code expires in 15 minutes)” instead of “User not found” when the register code is not found.

Webserver

  • Webserver no longer displays warnings on console related to 204 HTTP response (thanks FluxCapacitor2)
  • Future proofed cookies by adding SameSite=Lax; Secure; to them as Firefox was warning that they might break soon.

Export

  • Fixed player links on exported server pages on networks going to /server/player instead of /player

Extensions

  • Added Floodgate / geysermc extension (thanks Vankka)
  • Added mcMMO extension (supports the new mcMMO and mcMMO classic) (thanks Vankka)
  • Fixed FactionsUUID extension throwing an error with SaberFactions

For some reason /help does not work.

A new version has been released for Plan, it is available for download here.


5.1 build 808

This build contains a few bugfixes.

Special thanks to Shadowhackercz for updating Czech locale.

Change log

Commands

  • Fixed /help causing NPE on Sponge
  • Fixed /plan command not working on 1.8 servers (they use old version of the chatcomponent library)
  • Fixed in game links working on 1.8 servers

Plugin Enable

More information is stored in ServerInfoFile.yml to speed up plugin enable when database is busy

  • Proxy servers now also store the information in the file (Note: manually changing the file might lead to issues)
  • Fixes a few NPEs that occurred when website was accessed before Plan had fully enabled

Locale

  • Czech locale was updated by Shadowhackercz

Extensions

  • Fixed SQL syntax error in FloodGate Extension
  • Fixed mcMMO Extension giving warnings from mcMMO modern
  • Fixed mcMMO Extension not showing data on server pages
  • Fixed mcMMO Extension throwing an error when player left

A new version has been released for Plan, it is available for download here.


5.1 build 810 - hotfix for build 808

  • hotfix Fixed Plan not enabling on Bungeecord after second enable

This build contains a few bugfixes.

Special thanks to Shadowhackercz for updating Czech locale.

Change log

Commands

  • Fixed /help causing NPE on Sponge
  • Fixed /plan command not working on 1.8 servers (they use old version of the chatcomponent library)
  • Fixed in game links working on 1.8 servers

Plugin Enable

More information is stored in ServerInfoFile.yml to speed up plugin enable when database is busy

  • Proxy servers now also store the information in the file (Note: manually changing the file might lead to issues)
  • Fixes a few NPEs that occurred when website was accessed before Plan had fully enabled

Locale

  • Czech locale was updated by Shadowhackercz

Extensions

  • Fixed SQL syntax error in FloodGate Extension
  • Fixed mcMMO Extension giving warnings from mcMMO modern
  • Fixed mcMMO Extension not showing data on server pages
  • Fixed mcMMO Extension throwing an error when player left

A new version has been released for Plan, it is available for download here.


5.1 build 813 - hotfix

  • hotfix Fixed Plan not enabling on Bungeecord after second enable
  • hotfix Fixed Plan not storing Server ID in the ServerInfoFile.yml leading to infinite redirect to “/server/Server null” when server name was not set.

This build contains a few bugfixes.

Special thanks to Shadowhackercz for updating Czech locale.

Change log

Commands

  • Fixed /help causing NPE on Sponge
  • Fixed /plan command not working on 1.8 servers (they use old version of the chatcomponent library)
  • Fixed in game links working on 1.8 servers

Plugin Enable

More information is stored in ServerInfoFile.yml to speed up plugin enable when database is busy

  • Proxy servers now also store the information in the file (Note: manually changing the file might lead to issues)
  • Fixes a few NPEs that occurred when website was accessed before Plan had fully enabled

Locale

  • Czech locale was updated by Shadowhackercz

Extensions

  • Fixed SQL syntax error in FloodGate Extension
  • Fixed mcMMO Extension giving warnings from mcMMO modern
  • Fixed mcMMO Extension not showing data on server pages
  • Fixed mcMMO Extension throwing an error when player left

In 4 days Plan will be a 4-years-old project. In previous years I have posted an update with a year-in-review, but it looks like there is no update to post, so I am writing that here.

This year in numbers

  • From build 335 to 813: 478 commits released as updates
  • From #30 to #8 in top spigot plugins by rating: Thank you for all the kind words
  • From 1000 servers to over 2500 servers
  • From 45k lines of code to 49k lines (not counting extensions or web files)
  • From 43.7% test coverage to 32.0% coverage

Unlike previous years, this year only had two rewrites, the command system and error handling.
Instead the features that came in this year trickled in one small feature at the time, perhaps difficult to notice. New settings, placeholder api support, login page, night mode by default, as well as optimizations to the tps task, small UX improvements and a bunch of errors fixed.

What some of those numbers say tell a troubling story of a storm brewing in the horizon. It is already here, and I am unable to keep all of the code in my head. The test code is suffering from code where everything depends on everything else. Because of this each feature takes longer to build, and bugs are harder to catch.

I am going to take a small break from development for December, and will get to tackling that technical debt first thing in January - to get back to making new useful features instead of having to use all my time tracking bugs. Until then, take care :slight_smile:

A new version has been released for Plan, it is available for download here.


Change log 5.2 build 1115

Fancy new join-address pie, bugfixes, jar size optimization and large refactoring work, that’s what this is update contains.

Special thanks to vacoup for implementing player join-address gathering.

Previous update jar was too large for Ore, please see further below for change logs of updates that have not been posted on Ore.

Change log

Player join-address gathering

Some servers like to use different addresses for different advertising campaigns or server listings. Now the join-address player’s use when they join the server (eg “play.server.com”) for the first time is gathered. This information is shown on the playerbase overview tab on both network and server pages. Database schema updates.

Special thanks to vacoup for implementing this feature.

Shutdown session save now less disruptive

Sessions are saved on shutdown. Previously this might stop the server from shutting down if the MySQL was too busy or slow to respond. Now the attempt times out after 4 seconds and the unsaved sessions are stored on the next server start instead.

Website

  • Fixed Regular → Inactive metric being reversed (instead showing Inactive → Regular, essentially the amount of current regular players)
  • Removed /debug page

Extensions

  • Reduced calls to mcMMO extension due to concerns for performance impact of fetching offline player data.
    • Removed leaderboard table from mcMMO extension
  • BanManager extension updated (Now supports sponge too)
  • BentoBox extension now supports AOneBlock gamemode
  • Removed support for GriefPreventionPlus (I could not find the jar to build it when re-releasing the extensions)

Dependency downloading (jar size optimization)

Now Plan will download the database drivers from maven central first time it enables. This reduces the jar size to 9.9 MB. This had to be done to get under the 20MB limit of Ore and Cloudburst for plugin size. Those release platforms have change log for previous versions in the same update. If you limit outbound connections with a firewall, you need to allow connections to Central Repository:

Refactoring

3 large scale refactorings were done

  • Session was split into ActiveSession and FinishedSession since the old data type was both and thus trying to fulfill too many roles at once.
  • ServerUUID data-type added when previously UUID was used. This makes code a lot easier to read in cases where both player and server UUIDs are processed at the same time.
  • Replaced Abstract Plugin Framework with Platform Abstraction Layer (rewritten abstraction). This was for dependency downloading at runtime.
    • Removed debug logging
    • Removed benchmarking (Enable timing was removed, it might return in the future.)

Project building

Due to bintray shutting down, all Extensions had to be moved to another repository. They’re now located in a self-hosted reposilite instance.


Change log 5.2 build 1062

This is a large large update with a bunch of new features and even more bugfixes. As you may notice, I have changed my username to AuroraLS3 (so the developer hasn’t changed, don’t worry).

Special thanks to Guinness_Akihiko, galexrt, QuakyCZ & MrFriggo for their contributions to this update.

Change log

A quick peek

  • Important H2 database has been deprecated, migrate away from it as soon as possible.
  • Fixed 3 security vulnerabilities
  • Query-page for insights into groups of players.
  • Fixed “Request timed out” issues by adding a disk-based cache, and optimizing some queries
  • 6 other features or improvements
  • 19 other bugfixes

Main features

Query-page

Have you ever wanted to know who played the most in a specific month or week? How about knowing how active your donators are? Or who was online during a lag-spike? Now it’s all possible, with the /query page!

Showcase of the feature: Video

  • Select any dates as a data-range
  • Dynamically choose who you want the data to be about with multiple filters to choose from: play dates, register dates, operators, banned status, current activity group, plugin groups (such as permissions)
  • Share query results with other admins via URL

Disk-based caching (Remedy to timeout issue)

Sometimes database queries are slow and waiting for results takes a while. Now the pages display previously calculated results until the queries complete instead of timing out.

Because of this it is now also possible to update parts of the page by clicking the little refresh icon instead of reloading the whole page.

Main improvements

Extension data to /players page

Players page now contains the same extension data as the /servers pages, so that those on networks can also view the Extension data from bungeecord in a neat table.

Player list: Playtime replaced with Active playtime

In order to make it more useful for servers where players AFK a lot, the players table now uses active playtime instead of playtime.

Performance graph optimizations

Test payload .json was reduced from 24MB to 3.35MB

  • Reduced the amount of queried performance graph points
    • Data for 30 days: 1 point / minute (like before)
    • Data older than 30 days: 1 point / 5 minutes
    • Data older than 60 days: 1 point / 20 minutes
  • Reduced duplicate data (The point dates) in the .json by changing transmit data format

Locale

  • Guinness_Akihiko has contributed a Korean locale, use it with Locale: KO
  • galexrt fixed a typo in German locale
  • QuakyCZ & MrFriggo updated Czech locale
  • Locale files updated to add missing language

Security

Fixed 3 security vulnerabilities

  • Fixed redirection to another page after login
  • Fixed XSS vulnerability in 500 Error page
  • Wrong pass and user not existing now treated the same (To avoid exposing registered usernames)

IP Whitelist for reverse-proxy users

A new setting under Webserver.Security now allows use of X-Forwarded-For header to determine the connecting IP.

This setting is disabled by default, it is important when you use this setting that the reverse-proxy can not be bypassed as otherwise spoofing IPs is possible.

Main bugfixes

MySQL connection reliability improved (Fixed “HikariCP Datasource is closed”)

A MySQL connection hiccup should no longer causes Plan to close the connection pool. A bug in the code caused the pool to be closed and opening it again always failed.

Fixed Timezone oddities on the page

  • Graphs on the website now respond properly to minutes in timezones (For example GMT+3:30)
  • Server calendar should no longer move data -1 day in negative timezones.

Other features

  • Added MySQL max connections setting to limit Plan connection pool size if needed
  • Clean tasks no longer run at the same time across the entire network, reducing spikes in MySQL CPU usage.
  • Added %plan_player_activity_index% and %plan_player_activity_group% placeholders
  • Placeholders now safely replaced off server thread with a cache (Note that the placeholder needs to be replaced at least twice for it to show up if using server thread for replacement). This is to avoid server crashes.

Other improvements

  • Proxy servers now properly detected even if server config was copied to a proxy server before installation
  • Login now properly redirects to tabs if sharing links to specific tab (like performance)
  • MySQL launch options are now more lenient to allow custom certificate definition
  • Table styling for player tables has been updated
  • bStats now available for Velocity

Other bugfixes

  • Fixed Day to day and Hour to hour graphs disappearing with Display_gaps setting
  • Fixed Server Preference Pie on /network page
  • Fixed [object Object] showing on Kill history when Player name was not in the database
  • Updated bStats to fix a Crash on SpongeForge
  • Fixed dark mode on exported files
  • Fixed + being decoded as a space in player names
  • Fixed HPE_UNEXPECTED_CONTENT_LENGTH with reverse-proxies
  • Fixed CPU null constraint violation when CPU Usage was reported as NaN (Mac OS)

DataExtensions

  • mcMMO extension: Fixed Optional around player names(The old data might still have that for a while)
  • Vault extension: Fixed UnsupportedOperationException not being caught
  • AAC extension: Disabled AAC Extension on AAC versions 5+ due to no data being available in the new API
  • ProtocolSupport extension: Fixed IllegalStateException: Access to implementation before detect
  • Fixed ViaVersion error on Velocity

A new version has been released for Plan, it is available for download here.


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)

A new version has been released for Plan, it is available for download here.


Change log 5.2 build 1120

  • [Hotfix] Fixed StackOverflowError related to ActiveSession after the page was viewed while a session was active

A new version has been released for Plan, it is available for download here.


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)

A new version has been released for Plan, it is available for download here.


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%.

A new version has been released for Plan, it is available for download here.


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.

A new version has been released for Plan, it is available for download here.


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 :slight_smile:

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 DataExtension API Builders ¡ plan-player-analytics/Plan Wiki ¡ GitHub
    • 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

A new version has been released for Plan, it is available for download here.


5.4 build 1485 - feature patch “Further”

Due to size limit of Ore, new versions have been skipped on Ore for the last 7 months - The main change log has changes from version 5.4 build 1366, all changes other from 5.3-build-1284 are listed at the bottom - You can find version specific release notes from Releases ¡ plan-player-analytics/Plan ¡ GitHub

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

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

uptime

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
    image
  • Added has played on server filter to only see players who have joined certain servers.
    image
  • Added plugin boolean group filter
    You can now filter players by booleans defined by Extensions.
    example query
    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:Proxy%
    • %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
  • 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

Changes from build 5.3 build 1284

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.

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)
  • 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.
  • 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

  • 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
  • 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?]

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

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.
  • Kopo moved Velocity support to version 3.0.0.
  • Fixed session shutdown save exception on 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

A new version has been released for Plan, it is available for download here.


5.4 build 1490 - Bugfixes to “Further”

  • Fixed Ore version checker giving 403 error due to missing User-Agent
  • Released version now the same on all release platforms

A new version has been released for Plan, it is available for download here.


5.4 build 1494 - Hotfix to previous build

  • Fixed plugins using MySQL that started after Plan from breaking due to Plan unregistering the MySQL driver (Thanks for the fix Vankka!)

There were three things that lead to this issue not being caught:

  • The driver unregistering previously dealt with other plugins using Plan driver was forgotten when writing driver download code
  • The driver downloading changed so that the mysql driver was not relocated to plan.com.mysql.driver.Driver which caused the main MySQL driver to be unregistered instead
  • There was no test environment in which a plugin using MySQL started after Plan

Sorry for any trouble this may have caused.

A new version has been released for Plan, it is available for download here.


5.4 build 1516 - Year-in-review

Hello! So, today marks 5 years since Plan development started. That’s a pretty long time to be honest. As has become customary, there’s a survey and a year-in-review post below this updates change log. Thanks for being awesome!

Special thanks to zax71, KairyByte & OLEGSHA for contributions to this update!

Change log

  • Updated HighCharts to newer version since they have fixed performance issue, in addition I removed ordinal: false workaround in Plan that was used to avoid the performance issue. If you liked the odd gaps in your data that may have been present due to the workaround, you can set Display_options.Graphs.Show_gaps_in_data to true in the Plan config to have them visible.
  • Fixed NPE related to null gamemode on some platforms
  • Kairubyte added version number to javascript file loading addresses so that they are no longer cached by cloudflare between updates. (Which caused issues in the past)
  • zax71 and OLEGSHA added some missing plugin dependencies to softdepend in plugin.yml

Survey

Here’s a link to this year’s survey: https://forms.gle/cpc6trn6wfJCpg8E9

Read on below for a look back on what has been going on with Plan this year & what’s in store in the future.

Year-in-review: Year 5

This year I started working as a full-time developer so the updates have been less frequent. Non-the-less, surprising to me, the development speed has not really slowed that much. Thanks to the past years of structuring the code, it is still easy to maintain and add new features to Plan.

Here are the “main” features that landed in the last year.

  • The Query page
  • Player join address gathering
  • 15+ new Extensions
  • Fabric support
  • Network performance tab
  • Server uptime
  • Database driver downloading

In terms of features I’d say this year has been very good compared to previous years. I can’t claim all the credit, since a lot of this has been made possible by the numerous contributors!
I decided to list all the contributors from 2021 (in order of appearance) here, thank you to: Guinness_Akihiko, galexrt, QuakyCZ, MrFriggo, vacoup, Kopo, Creeperface01, WolverStones, hallo1142, Aurelien30000, BruilsiozPro, WolverStones, BrainStone, AppleMacOS, 4drian3d, EyuphanMandiraci, 10935336, 洛伊, Sander0542, portlek, rymiel, mbax, untuned, PerchunPak, Shadowhackercz, HexedHero, Vankka, DrexHD, zisunny104, SkipM4, MAXOUXAX, adhg6 and BratishkaErik, zax71, KairyByte and OLEGSHA.

This year in numbers

  • From build 1062 to 1515: 457 commits released as updates
  • From #8 to #11 in top spigot plugins by rating: The reduced update frequency has likely impacted relative score compared to other plugins
  • From 2500 servers to over 4000 servers
  • From 49k lines to 59k lines of code (not counting extensions or web files)
  • From 43,7% test coverage to 51.3% coverage

Last year around this time I thought there was a storm brewing in terms of maintainability, but this year has been rather smooth sailing - probably thanks to the reduced update frequency allowing longer testing times for dev builds catching more bugs before they end up in a main release.

Even though a bunch of tickets get closed all the time (260 tickets closed this year), they never run out. Luckily the new project tracker has turned out to be successful in reducing the ticket mass to manageable chunks that can be worked on whenever I have the extra energy to do so.

To turn towards the future, and adding a slight personal note, I have found a functional balance where things progress, but in bit smaller chunks than before. That said, I don’t have nearly as much time for Plan as I used to before I got a job (25h/week vs ~3h/week now), so larger features take quite a long time. In an ideal world I would love to work on Plan full-time, but since Plan covers 1.5% of my monthly living expenses, it is simply not feasible.
Right now I’m also writing a Master’s thesis, so Plan development will likely stay on the a backseat at least until I have finished that endeavor. Don’t worry though - as you can see from the releases this year, being on the backseat has not really slowed things down :slight_smile:

Thanks for reading, and for using Plan! I hope you have a wonderful Christmas and Happy new year!

A new version has been released for Plan, it is available for download here.


5.4 build 1581 - Bugfixes

This build contains a heck of a lot of bugfixes and a bunch of small features.
Special thanks to HexedHero and Kopo for contributions to this update & thanks to everyone who has been reporting issues!

Change log

Data gathering

  • Kopo fixed not logging deaths on fabric when killer was not a player

Config

  • Throw more detailed error when Unit of setting is incorrect
  • Added Display_options.Player_head_img_url config setting for the player page head image

Stability

  • Fixed SpongeForge crashing with Plan on enable. This was caused by a bug in SQLite.
  • Possibly fixed OutOfMemory crash where server ran out of threads. Amount of tasks registered by Plan over time was reduced.
  • Possibly fixed error on server shutdown related to class loading (“zip file closed”)
  • Possibly fixed duplicate servers being stored in the database when database is busy during enable.

Website

  • Added Join address to /player pages
  • Fixed player pages with 2 different UUIDs showing same player’s data when both players had same name (In cases where offline and online UUIDs are present due to user error)
  • Fixed ISO code for South Korea and North Korea so that they show up properly on the map
  • Internal error web pages now have error context
  • Added support for Hex color codes in player display names on the website
  • Fixed Query page ‘to main page’ link on reverse-proxy setups using subdirectory
  • Fixed performance tab not loading on /network page if locale was not English

Extensions

  • Fixed ArithmeticException related to Libertybans extension
  • Fixed wrong block count for netherrack in Logblock extension
  • Fixed “Connected from same IP” data from Litebans not including player names that had the same IP
  • Kopo fixed Litebans extension not getting new data when there were over 5000 rows of specific punishments.
  • Disabled Litebans extension automatically on game servers if it is already installed on Proxy to avoid duplicate data
  • Clean up data of extension disabled in the config when plugin is reloaded to avoid confusion when a plugin does not disappear from the website after disabling them.
  • Luckperms extension now updates its data when player’s group is changed / group is deleted even if the player is not online.

Placeholders

  • Added new placeholders
    • %plan_server_players_registered_{total/day/week/month}%
    • %plan_network_players_registered_{total/day/week/month}%
    • %plan_server_players_unique_{total/day/week/month}%
    • %plan_network_players_unique_{total/day/week/month}%
    • %plan_player_is_afk%, output true/false
    • %plan_player_is_afk_badge%, output ‘AFK’/’’
    • %plan_top_{category}_{time}_{n}_value%, output the value giving the player their top spot
  • Fixed group by error related to top category placeholder queries
  • Placeholders in the Plan config are now refreshed more often and earlier during login to improve chance they are displayed when the other plugin uses server thread for placeholders.

Export

  • Hid refresh buttons on exported web files since refreshing does not update data on exported files

Commands

  • Fixed fabric specific command issues
    • Fixed /plan reload
    • Fixed commands requiring confirmation expiring the confirmation immediately
    • Fixed console getting wrong kind of messages from command output

Other

  • Cleaned up extra error messages from browser dev tools console
  • Fixed index out of bounds exception related to trying to log errors after it failed previously (leaving behind empty file)
  • Reduced log level of “Webserver disabled (disabled in config)” from warning to info
  • HexedHero added more instructions to SQLite exception when temp directory is out of space for when user is using Pterodactyl