Skip to content

Releases: plan-player-analytics/Plan

5.6 build 2965

01 Feb 08:31
dfc2404
Compare
Choose a tag to compare

5.6 build 2965

This build has a second hotfix for SQLite performance regression since it was reverted to wrong version that still had the regression.
Please see https://github.com/plan-player-analytics/Plan/releases/tag/5.6.2959 for change log of the previous version.

Change log

  • Reverted SQLite driver to version 3.42.0.1 due to performance regression (Thanks to Vankka for pointing out my mistake)

5.6 build 2961

26 Jan 09:56
Compare
Choose a tag to compare

5.6 build 2961

This build has a hotfix for SQLite performance regression.
Please see https://github.com/plan-player-analytics/Plan/releases/tag/5.6.2959 for change log of the previous version.

Change log

  • Reverted SQLite driver to version 3.45.1.0 due to performance regression

5.6 build 2959

18 Jan 08:35
Compare
Choose a tag to compare

5.6 build 2959

This is a maintenance update with bugfixes and updates to dependencies.

Special thanks to Kopo, YannicHock & Zaemong for contributions to this update.

Change log

Commands [action required]

  • /plan and /planproxy now require plan.command permission to be used. This is to allow hiding /plan from tab completion, since it showed up even if a player had no access to any of the subcommands.

SQL Driver download address change

Platform specific

  • Fabric now uses 1.21.3 api, 1.21.4 also still supported. fabric-permissions-api 0.3.3 now required. Thanks Kopo
  • Fixed Nukkit incompatibility with EntityTameable being moved to a different package
  • Fixed Folia ConcurrentModificationException related to ping task
  • Fixed Folia region tick thread crash if another plugin was using Plan placeholders on server thread

Website

  • Fixed Calendar being one day behind when server timezone was set to negative GMT, eg. GMT-8.
  • Calendar now responds to selected language on the UI
  • Fixed Calendar popup going under Sidebar
  • Fixed some countries not appearing on the map due to missing country name -> ISO-3166 alpha-3 translation
  • Added web permissions for different Server Performance graph data types. This allows configuring permissions for viewing TPS graph and nothing else.
  • Fixed Logo image not loading when using reverse-proxy with a subdirectory

Database

  • Fixed CorrectWrongCharacterEncodingPatch applying to non-Plan tables in the same database.
  • Fixed ping insert duplicate key error

Config

  • Increased default time series data retention to 10 years (3650 days) - previously 90 days. Does not change existing configs.
  • Removed &useSSL=false from default MySQL Launch_options. Does not change existing configs.

Extensions

  • StringProvider can now store values up to 250 characters long before truncation.
  • CMI Extension added by YannicHock

Locale

  • Fixed French (FR) locale causing website loading issues
  • Japanese (JA) locale updated by Zaemong

Placeholders

  • Catch any exceptions that occur during placeholder request to not cause problems in other plugins using Plan placeholders
  • Added %plan_top_{category}_{n}_value_raw% placeholders for unformatted values (Useful for custom time formats)
  • Added %plan_server_players_online% and %plan_network_players_online% placeholders that show the latest data in the database (~1 minute accuracy)

5.6 DEV build 2948

06 Jan 11:29
Compare
Choose a tag to compare
5.6 DEV build 2948 Pre-release
Pre-release

5.6 DEV build 2948

This dev build contains bugfixes, contributions and dependency updates that have been done since May.

Special thanks to Kopo, YannicHock & Zaemong for contributions to this update.

Changes from DEV build 2906

  • Dependency updates
  • Calendar now responds to selected language
  • Fixed bug with calendar in negative timezones (GMT-8 etc)
  • Fabric updates done by Kopo
  • Extension string values now up to 250 chars
  • Minor bugfixes

Change log

Commands [action required]

  • /plan and /planproxy now require plan.command permission to be used. This is to allow hiding /plan from tab completion, since it showed up even if a player had no access to any of the subcommands.

Platform specific

  • Fabric now uses 1.21.3 api, 1.21.4 also still supported. fabric-permissions-api 0.3.3 now required. Thanks Kopo
  • Fixed Nukkit incompatibility with EntityTameable being moved to a different package
  • Fixed Folia ConcurrentModificationException related to ping task
  • Fixed Folia region tick thread crash if another plugin was using Plan placeholders on server thread

Website

  • Fixed Calendar being one day behind when server timezone was set to negative GMT, eg. GMT-8.
  • Calendar now responds to selected language on the UI
  • Fixed some countries not appearing on the map due to missing country name -> ISO-3166 alpha-3 translation
  • Added web permissions for different Server Perfomance graph data types. This allows configuring permissions for viewing TPS graph and nothing else.
  • Fixed reverse-proxy subdirectory address correction not applying to Logo image

Database

  • Fixed CorrectWrongCharacterEncodingPatch applying to non-Plan tables in the same database.
  • Fixed ping insert duplicate key error

Config

  • Increased default time series data retention to 10 years (3650 days) - previously 90 days. Does not change existing configs.
  • Removed &useSSL=false from default MySQL Launch_options. Does not change existing configs.

Extensions

  • StringProvider can now store values up to 250 characters long before truncation.
  • CMI Extension added by YannicHock

Locale

  • Fixed French (FR) locale causing website loading issues
  • Japanese (JA) locale updated by Zaemong

Placeholders

  • Catch any exceptions that occur during placeholder request to not cause problems in other plugins using Plan placeholders
  • Added %plan_top_{category}_{n}_value_raw% placeholders for unformatted values (Useful for custom time formats)
  • Added %plan_server_players_online% and %plan_network_players_online% placeholders that show the latest data in the database (~1 minute accuracy)

5.6 DEV build 2906

01 Dec 09:53
Compare
Choose a tag to compare
5.6 DEV build 2906 Pre-release
Pre-release

5.6 DEV build 2906

This dev build contains bugfixes, contributions and dependency updates that have been done since May. I would release it as a full release, but since my start of December is hectic, I want to avoid releasing a buggy version by accident.

Special thanks to YannicHock & Zaemong for contributions to this update.

There's a small development/life update at the bottom of the change log.

Change log

Commands [action required]

  • /plan and /planproxy now require plan.command permission to be used. This is to allow hiding /plan from tab completion, since it showed up even if a player had no access to any of the subcommands.

Platform specific

  • Fixed Nukkit incompatibility with EntityTameable being moved to a different package
  • Fixed Folia ConcurrentModificationException related to ping task
  • Fixed Folia region tick thread crash if another plugin was using Plan placeholders on server thread

Website

  • Fixed some countries not appearing on the map due to missing country name -> ISO-3166 alpha-3 translation
  • Added web permissions for different Server Perfomance graph data types. This allows configuring permissions for viewing TPS graph and nothing else.

Database

  • Fixed CorrectWrongCharacterEncodingPatch applying to non-Plan tables in the same database.

Config

  • Increased default time series data retention to 10 years (3650 days) - previously 90 days. Does not change existing configs.

Extensions

  • CMI Extension added by YannicHock

Locale

  • Fixed French (FR) locale causing website loading issues
  • Japanese (JA) locale updated by Zaemong

Placeholders

  • Catch any exceptions that occur during placeholder request to not cause problems in other plugins using Plan placeholders
  • Added %plan_top_{category}_{n}_value_raw% placeholders for unformatted values (Useful for custom time formats)
  • Added %plan_server_players_online% and %plan_network_players_online% placeholders that show the latest data in the database (~1 minute accuracy)

Development/Life update

Plan is now 8 years old (tomorrow on 2nd of December)! Wow, that's almost third of my life.

I don't know how to begin this, but since the regular updates stopped coming in June, I feel like I need to write something to let you know why.

In June, as my summer holiday started I decided to leave my laptop at home, rather than take it with me and work on Plan all summer. This was the first time in 7 years that that happened. I didn't open the IDE again for a long time, and I kind of liked it. Unfortunately any 2 month long break from a project usually leads to the build environment breaking, so I've had to deal with some of that before I could get back to regular development.

Over last 4 months I've slowly worked on DataExtension Graph API on some weekends. It's surprising how much boilerplate something like that needs to function, so it's somewhere around 33%-50% done after 4 months in development. With long pauses in between due to needing to work on other bugs and broken builds, it has not progressed as fast as I would have liked.

People always seem to wonder why I'm doing this project, and I've wondered that too over the years. I sort of rationalized the reason to be that I love doing it - and that was true for years, as I love learning new things, and Plan allowed me to do those experiments to learn. Lately I've started to think that doing this project has also been a kind of escapism. Everyone wants to feel like they're good at something, and when I found programming in 2016, that was something I felt like I could be really good at. So I started this project, and found so much enjoyment from that. It's funny how life creeps up on you if you let it, Over these last two years I've started to find my people and hobbies. Those things give me so much joy in life.

I still enjoy working on this project, but I've found that doing Java projects at work, and doing Java project on the weekends is not a very sustainable hobby. I found that out the hard way when I had a burnout in 2022. In an ideal world I would love to work on this project full-time, but that's just not realistic financially.

I'm not sure what the way forward is, but what I'm currently trying is to schedule Plan development time in my calendar. I feel like something I need to solve is that other activities refresh my energy, while Plan development drains it. I need to find a way to make it refresh my energy. If you've solved something like that I'd love to hear your thoughts on discord.

All that said, I don't think this project is going away anytime soon. I'll just have to figure out a sustainable way to fit it together with the rest of my life. And that just might be the learning journey that sparks my eyes again.

I hope you have wonderful Christmas or other holidays ahead of you.
All the best!

~Aurora

5.6 build 2883

26 May 15:08
Compare
Choose a tag to compare

5.6 build 2883

This release brings redesigned join address visualization, Folia support, updates to Fabric 1.20.5, quality of life features and fixes some bugs.

Special thanks to jhqwqmc, Sniper_TVmc, mcmdev, DrexHD and ZhangYuheng for contributions to this update

Change log

Fabric

  • Fabric support was updated to 1.20.5 by DrexHD, older fabric versions are no longer supported as Fabric 1.20.5 requires Java 21

Folia

  • Folia support was implemented by ZhangYuheng. Please note that sessions from Folia servers will have incorrect world times on Folia since the platform doesn't support PlayerWorldChangeEvent yet.

Config

  • You can now configure Plan using environment variables. This can be useful for those running servers in docker environments. Examples:
    • Plugin.ServerName -> PLAN_PLUGIN_SERVERNAME
    • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
    • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
    • With string lists variable needs to be format "- One\n- Two" where \n is newline

Website

Redesigned Join Address visualization

image

Join address visualization was difficult for servers with 100s of join addresses. With the redesign you can select multiple addresses as a group to be visualized, and rename it to your liking. This can help you track different advertising campaigns and server list entries across time.

image

The same selectors are used on the Player Retention graph when you are grouping registered players by Join Address.

The address groups you make are linked to your user if you have login enabled, or stored to browser localstorage to keep them even if you close the page.

In addition:

  • It is now possible to disable join address gathering in the config
  • It is now possible to filter out specific addresses from the data in the config. This can help if you have a geyser server that isn't configured to forward hostnames, since the geyser server IP would appear in the data instead.
  • Join addresses that don't look like IPs or domains are now automatically filtered out. You can disable this behavior with Preserve_invalid setting.

Editing Queries

  • You can now press 'Edit Query' on the Query Results page to change the filters and view. This can be useful if you want to quickly select a timeframe from calendar and then filter the results further with other filters.
    image

Commands

  • Fixed permissions not being checked for tab completion of commands which allowed players to get list of player names via tab completion.

Database

  • Fixed duplicate key exception during enable in some rare cases related to UpdateWebPermissionsPatch
  • Fixed CorrectWrongCharacterEncodingPatch failing on mysql.user table being a view
  • Fixed error storing access log when IP was spoofed (Longer than IPv6)

Export

  • Fixed allowlist bounces data not being visible on exported pages.

Placeholders

  • Added %plan_server_uptime% placeholder

Extensions

  • Composite punishment support was added to LibertyBans Extension by mcmdev
  • You can now configure PlaceholderAPI values that you want to ignore from other plugins. This is useful if some plugin doesn't report placeholder value after player leaves the server.
    • Placeholders that aren't replaced are now no longer stored as a changed value.

Locale

  • French (FR) locale was updated by Sniper_TVmc
  • Simplified Chinese (CN) locale was updated by jhqwqmc

5.6 DEV build 2850

20 Apr 07:26
Compare
Choose a tag to compare
5.6 DEV build 2850 Pre-release
Pre-release

5.6 DEV build 2850

This dev release brings redesigned join address visualization, updates to Fabric 1.20.5, and fixes some bugs.

Special thanks to jhqwqmc, Sniper_TVmc, mcmdev and DrexHD for contributions to this update

Change log

Fabric

  • Fabric support was updated to 1.20.5 by DrexHD, older fabric versions are no longer supported as Fabric 1.20.5 requires Java 21

Website

Redesigned Join Address visualization

320191723-aff709ec-f87d-47cf-bd56-c5f0cf866d6a

Join address visualization was difficult for servers with 100s of join addresses. With the redesign you can select multiple addresses as a group to be visualized, and rename it to your liking. This can help you track different advertising campaigns and server list entries across time.

320191710-4b70bc39-e3da-47aa-884d-fb19924cfd71

The same selectors are used on the Player Retention graph when you are grouping registered players by Join Address.

The address groups you make are linked to your user if you have login enabled, or stored to browser localstorage to keep them even if you close the page.

Editing Queries

  • You can now press 'Edit Query' on the Query Results page to change the filters and view. This can be useful if you want to quickly select a timeframe from calendar and then filter the results further with other filters.

Database

  • Fixed duplicate key exception during enable in some rare cases related to UpdateWebPermissionsPatch

Export

  • Fixed allowlist bounces data not being visible on exported pages.

Extensions

  • Composite punishment support was added to LibertyBans Extension by mcmdev
  • You can now configure PlaceholderAPI values that you want to ignore from other plugins. This is useful if some plugin doesn't report placeholder value after player leaves the server for example.

Locale

  • French (FR) locale was updated by Sniper_TVmc
  • Simplified Chinese (CN) locale was updated by jhqwqmc

5.6 build 2820

14 Mar 15:16
Compare
Choose a tag to compare

5.6 build 2820

This build contains some bugfixes to things that were missed in last release. If you missed that, here's the change log for that

Special thanks to jhqwqmc for contribution to this update

Change log

  • Fixed a error in extension boolean storage when using SQLite. A minor bug, but spammed the console a bit.
  • Fixed Join Address not appearing on the /plan ingame command due to formatting error
  • jhqwqmc updated Simplified Chinese Locale (CN)

5.6 build 2816

10 Mar 08:46
Compare
Choose a tag to compare

5.6 build 2816

This version brings a lot of bugfixes, such as Geolocation database download changes, and some new features, such as CSV export, whitelist bounce gathering and more placeholders.

Special thanks to jhqwqmc, Vankka, Beniro, liuzhen932 and SlimeDog for contributions to this update!

Change log

Data Gathering

  • Plan now downloads geolite database from playeranalytics.net - This is related to MaxMind reducing their daily download counts to 30/day by March 21st which breaks the geolocation database downloading. This means the geolocation database needs to be distributed via a server rather than from MaxMind directly. Currently Plan implicitly trusts that the webserver responding from geodb.playeranalytics.net is correct one. In future there will be a signature check added to ensure Plan is talking to correct server.
  • Fixed server crash when using SQLite and Plan tried to gather installed plugin list on the server thread.

Allowlist bounces

allowlist-bounces

Spigot, Sponge & Nukkit servers now gather whitelist bounces. There is a new tab on the server page under Online Activity which allows you to quickly see whose login has been blocked by whitelist, and who you have already allowed on the whitelist based on session data, so that you don't do unnecessary work allowing them again.

Visibility is controlled with web permission page.server.allowlist.bounce

Website

CSV Export in tables

export-demo

You can now export CSV from most tables. This is especially useful when combined with Query features, such as the click-and-drag in calendar for selecting data from specific timeframe.

Other

  • The react bundle is now built using Vite. It utilizes modules available in modern browsers. This sped up build times by 7 minutes and should also improve page loading speed.
  • Fixed some issues where reverse proxied Plan website loaded a blank page
  • Fixed issue where server players online graph was fetched for network page due to bad cache lookup
  • Server & Network Overview now uses frontend formatting for playtime and dates
  • Fixed issue where server ping table never loaded
  • Fixed server calendar being editable (You could drag blocks around rather than select)
  • Fixed ping graph not rendering on player page if there was a lot of points

Webserver

  • Added simple DDoS protection that limits requests if same IP requests same path multiple times. This type of DDoS has become more prevalent against cloudflare IPs, where a Go-http-client based bot requests / repeatedly and doesn't follow redirects. Because browsers follow redirects this doesn't affect regular users.

Database

  • Optimized how database handles transactions on disable. More unnecessary transactions are dropped

Fabric 1.20.4

  • Binero implemented Fabric 1.20.4 support, 1.20.3 is not supported this build onwards.
  • Fabric command registration was moved earlier to avoid confusion when /plan reload doesn't exist after failed enable.

Placeholders

  • Added network_ equivalent to all missing server_ placeholders
  • Added %plan_regular_players% and %plan_network_regular_players% placeholders
  • Added %plan_join_address% placeholder
  • Fixed off-by-one error in %plan_top_...% placeholders where 0 would be top 1 and 9 top 10. Now it matches documentation where 1 -> 1, and 10 -> 10. If you were compensating for this bug you may need to change %plan_top_..._0% to %plan_top_..._1% etc

Commands

  • /plan ingame now shows Last join address of the player.

Export

  • Fixed react files getting exported even when all export is disabled.

Extensions

  • Vankka updated DiscordSRV Extension to fix an incompatibility with new DiscordSRV version
  • @Conditional values are now removed when the value of the boolean changes in a way that unsatisfies the condition.
  • Fixed FastLogin Extension recording "Unknown" when behind a proxy server
  • Fixed Quests Extension support for Quests version 5, version 4 is no longer supported.

Locale

  • jhqwqmc updated Chinese locale (CN)
  • liuzhen932 updated Chinese locale (CN)

5.6 DEV build 2796

03 Mar 08:39
a9ab233
Compare
Choose a tag to compare
5.6 DEV build 2796 Pre-release
Pre-release

5.6 DEV build 2796

This dev release contains further fixes. It is a release candidate.

Special thanks to jhqwqmc, Vankka, Beniro, and liuzhen932 for contributions to this update!

Changes from DEV build 2731

  • Plan now downloads geolite database from playeranalytics.net
  • Fixes to website
  • New placeholders
  • liuzhen932 updated CN locale
  • SQLite now logs what it is waiting for if it needs to wait on disable
  • Optimizations to plugin disable transaction handling

Change log

Data Gathering

  • Plan now downloads geolite database from playeranalytics.net - This is related to MaxMind reducing their daily download counts to 30/day by March 21st. This means the geolocation database needs to be distributed via a server rather than from MaxMind directly. Currently Plan implicitly trusts that the webserver responding from geodb.playeranalytics.net is correct one. In future there will be a signature check added to ensure Plan is talking to correct server.

Website

CSV Export in tables

export-demo

You can now export CSV from most tables. This is especially useful when combined with Query features, such as the click-and-drag in calendar for selecting data from specific timeframe.

Other

  • The react bundle is now built using Vite. It utilizes modules available in modern browsers. This sped up build times by 7 minutes and should also improve page loading speed.
  • Fixed some issues where reverse proxied Plan website loaded a blank page
  • Fixed issue where server players online graph was fetched for network page due to bad cache lookup
  • Server & Network Overview now uses frontend formatting for playtime and dates
  • Fixed issue where server ping table never loaded
  • Fixed server calendar being editable (You could drag blocks around rather than select)

Webserver

  • Added simple DDoS protection that limits requests if same IP requests same path multiple times. This type of DDoS has become more prevalent against cloudflare IPs, where a Go-http-client based bot requests / repeatedly and doesn't follow redirects. Because browsers follow redirects this doesn't affect regular users.

Database

  • Optimized how database handles transactions on disable. More unnecessary transactions are dropped

Fabric 1.20.4

  • Binero implemented Fabric 1.20.4 support, 1.20.3 is not supported this build onwards.
  • Fabric command registration was moved earlier to avoid confusion when /plan reload doesn't exist after failed enable.

Placeholders

  • Added network_ equivalent to all missing server_ placeholders (You can see them here until list is updated to wiki on full release 01ce503)
  • Added %plan_regular_players% and %plan_network_regular_players% placeholders
  • Fixed off-by-one error in %plan_top_...% placeholders where 0 would be top 1 and 9 top 10. Now it matches documentation where 1 -> 1, and 10 -> 10. If you were compensating for this bug you may need to change %plan_top_...0% to %plan_top..._1% etc

Export

  • Fixed react files getting exported even when all export is disabled.

Extensions

  • Vankka updated DiscordSRV Extension to fix an incompatibility with new DiscordSRV version
  • @Conditional values are now removed when the value of the boolean changes in a way that unsatisfies the condition.

Locale

  • jhqwqmc updated Chinese locale (CN)
  • liuzhen932 updated Chinese locale (CN)