Releases: plan-player-analytics/Plan
5.7 DEV build 3189
5.7 DEV build 3189
This dev release is a release candidate for 5.7 release.
Special thanks to Kopo, SaolGhra, TWJohnJohn20116, Shadowhackercz, Vankka, DrexHD & Jsinco for contributions to this update
Changes since DEV build 3123
- Czech locale updated by Shadowhackercz
- Fixed an issue related to boolean values in Extensions
- Added Server Uptime to Performance as Numbers tables
- Vankka updated DependencyDownload to clean up old downloaded libraries
- Added MSPT (Milliseconds per Tick) metrics to Performance
- DrexHD updated fabric to 1.21.9
- Jsinco updated join address filter setting to support regex
- Rewrite of the database move/backup/restore system
- Updated to use velocity 3.5.0-SNAPSHOT
Change log
Website
Theme Editor
You can now create your own themes for Plan without needing Html Customization. This is the main new feature of this version and is documented here.
- theme.yml has now been deprecated and will be deleted if it only contains default values
MSPT (Milliseconds per Tick)
Milliseconds per Tick (average/90th percentile) have been added to performance metrics on all applicable platforms.
Other
- Kills table can now be searched/sorted/exported and gets up to 25000 entries from the database
- Added Uptime data to Performance as Numbers tables
- Multi-select components have been replaced with a more intuitive alternative, especially on mobile
- Performance graph tabs now sync the graph range-finder so that you can view different data for same time easier
- Network performance graph colors now vary between servers to be easier to read
- Fixed extra Series label appearing in HTTP mode on Performance graph (This is the plugin version history series in HTTPS mode)
- Fixed some night mode text invisibility issues
- SaolGhra fixed error
r.includes is not a functionrelated to Litebans
Config
- Jsinco updated 'Data_gathering.Join_addresses_.Filter_out_from_data' to support regex. Note that any existing setting values with . (dot character) will now match any character.
Display_options.Theme(default "default") now refers to theme name in the theme editor rather than "What theme.yml to copy values from"Display_options.Night_mode(default false) added
Data
- MSPT average and 90th percentile added to plan_tps table
- Register date
0(1970-01-01) is now regarded as invalid. - Ban status is now updated by an automatic task that cycles through all known players small amount at a time
Sponge
- Sponge API 14 is now used, API 8 is no longer supported.
Fabric
- Fabric was updated to 1.12.9 by DrexHD (Supports 1.12.11 as well)
Velocity
- Velocity was updated to 3.5.0-SNAPSHOT
Database
Database move system rewrite
Rewrote the system responsible for copying data from one database to another since previous system would crash under large datasets. The goal of this was to allow copying large SQLite databases to MySQL even on larger servers. The system was tested against a 3 GB database on a server with 1 GB of allocated memory.
- /plan db move, /plan db backup, /plan db restore use the new system
- Added /plan db merge command (permission: plan.data.merge) which allows merging SQLite data to existing MySQL. This is useful for those merging multiple servers into a network when all servers had Plan installed on separate SQLite databases.
Other
- id column added to old plan_tps tables that did not have it yet via Patch.
- If MySQL runs into error code 1020 'Stale read' error, the transaction will retry instead of erroring
- Fixed dyplicate key violation related to AllowListBounce
Locale
- Dates, time amounts & country names are now translated based on the selected locale. (If specific ones aren't please report it as a bug)
- HighCharts & Calendar are now translated based on the selected locale
- TWJohnJohn20116 updated zh_TW locale
- Shadowhackercz updated CS locale
Extensions
- Fixed ArithmeticException related to LibertyBans when bans were infinite
- Fixed an issue related to rendering boolean values
- Updated Jobs extension to support newer version
Placeholders
- Fixed network_players_online always saying 0
Other
- Vankka updated DependencyDownload to clean up libraries folder of old versions
- Kopo updated the build system to speed up builds & IDE indexing performance
5.7 DEV build 3123
5.7 DEV build 3123
This dev release contains quite a lot of changes, so please report any bugs that you may find.
Special thanks to Kopo, SaolGhra & TWJohnJohn20116 for contributions to this update
Change log
Website
Theme Editor
You can now create your own themes for Plan without needing Html Customization. This is the main new feature of this version and is documented here.
- theme.yml has now been deprecated and will be deleted if it only contains default values
Localization
One goal in this version is to reduce the amount of mixed language (e.g. selected language + English) appearing on the website. This work is still underway. If you're using a locale that still has English lines in it, please help translate it
- Dates, time amounts & country names are now translated based on the selected locale. (If specific ones aren't please report it as a bug)
- HighCharts & Calendar are now translated based on the selected locale
Other
- Kills table can now be searched/sorted/exported and gets up to 25000 entries from the database
- Multi-select components have been replaced with a more intuitive alternative, especially on mobile
- Performance graph tabs now sync the graph range-finder so that you can view different data for same time easier
- Network performance graph colors now vary between servers to be easier to read
- Fixed extra Series label appearing in HTTP mode on Performance graph (This is the plugin version history series in HTTPS mode)
- Fixed some night mode text invisibility issues
- SaolGhra fixed error
r.includes is not a functionrelated to Litebans
Config
Display_options.Theme(default "default") now refers to theme name in the theme editor rather than "What theme.yml to copy values from"Display_options.Night_mode(default false) added
Data
- Register date
0(1970-01-01) is now regarded as invalid. - Ban status is now updated by an automatic task that cycles through all known players small amount at a time
Sponge
- Sponge API 14 is now used, API 8 is no longer supported.
Database
- If MySQL runs into error code 1020 'Stale read' error, the transaction will retry instead of erroring
- Fixed dyplicate key violation related to AllowListBounce
Locale
- TWJohnJohn20116 updated zh_TW locale
Extensions
- Fixed ArithmeticException related to LibertyBans when bans were infinite
- Updated Jobs extension to support newer version
Placeholders
- Fixed network_players_online always saying 0
Other
- Kopo updated the build system to speed up builds & IDE indexing performance
5.6 build 2965
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
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
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.commandpermission 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
- PaperMC changed their maven repository address so Plan now downloads SQL drivers from https://repo.papermc.io instead of https://papermc.io/repo - This is mentioned since some users use firewall to block external connections.
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
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.commandpermission 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
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.commandpermission 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
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
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.
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.

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



