Plan | Player Analytics icon

Plan | Player Analytics -----

The Ultimate Tool to monitor Minecraft player activity! Bukkit/Sponge/Bungee/Velocity support.




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)
----------, Feb 1, 2025

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
----------, Jan 26, 2025

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)
----------, Jan 18, 2025

Change log 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
[​IMG]

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.

[​IMG]

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.
    [​IMG]
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
----------, May 26, 2024

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)
----------, Mar 14, 2024

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
[​IMG]

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
[​IMG]

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)
----------, Mar 10, 2024

Web User Access-Control - Change log 5.6 build 2614
Hello! This version contains a hefty set of new features, bugfixes and usability improvements. Highlighted features include Web User Access-Control, Plugin Version History and 'Click to see Who'-features. There are a lot more new things so check out the change log.

Updating to this version modifies database schema
There is a guide for updating to this version here: https://github.com/plan-player-analytics/Plan/wiki/Migration-guide-from-Version-5.5-to-5.6

Special thanks to yu_solt, ToxiWoxi, Kopo, xlanyleeet, Jumala9163, ringoXD, Dreeam-qwq & jhqwqmc for their contributions to this update!

If you would like to support the project financially, please consider sponsoring the main developer.

Change Log
Web user access control (HTTPS required)
[​IMG]

A more granular user access control has been requested for quite a long time. Now you can limit users to only see smaller parts of the website. This feature is documented in https://github.com/plan-player-analytics/Plan/wiki/Web-permissions though you will find some help embedded on the /manage page.

Migrating from old version with permission_level adds groups 'legacy_level_0' etc with permissions that match previous behavior, users are linked to them automatically.

In order to edit web permissions on the website you need to set at least one webuser as admin with /plan setgroup {username} admin.

In order to keep /plan register working, give your players 'plan.webgroup.{group_name}'-permission in your permission plugin (such as LuckPerms) for the group you want them to have. If player has none of these permissions they can't register at all.

Plugin Version History (HTTPS required)
[​IMG]

Plan now gathers plugin versions on server start. Any modifications are timestamped. This can be useful when tracking performance impact of plugin updates. This data was possible to gather from all server platforms.

Seeing this data on the website requires HTTPS to be set up because some server admins may consider this data sensitive. Without HTTPS the data endpoint is disabled and the data is only visible in the database. After HTTPS is set up admins can control who sees this data through web permissions.

On network page it is possible to check plugin versions of any server on the network. This can help you keep up to date with your plugins.

Click to see Who
[​IMG]

You can now click & drag on Server Calendar (and the new Network Calendar) to see who was playing on specific days the calendar data is about. On Geolocations Map you can click on a Country to see who has joined from that country.

These features utilize the existing Query features so it was relatively simple to implement. If you have more ideas where you would like to see who data is about, you can make a suggestions on Github

Website
New features
  • Player tables now show Average, Best and Worst Ping for all players
  • You can now choose visible columns on any table (such as Players tables and plugin tables.)
  • Network Calendar was added to Network Overview, similar to Server Calendar
  • Navigation button can now go to Plan Error Logs and Swagger Docs
  • The bigger features mentioned above
Improvements
  • Network Performance now disables TPS, Entities and Chunks buttons if there's only Proxy servers in the selected dataset.
  • Player page Plugins navigation now only shows servers that the player has data from.
  • Fixed some table text color issues, especially in Night Mode
  • Fixed issues with reverse-proxy https falling back to relative addresses in frontend when proxy-mode https was not in use. (Plan would assume address is http:// but browser would have https://, leading to different start for the address, which was interpret as incorrect address.)
Removal of old frontend files
With the React rewrite being complete an in use by most users, this version deletes the old frontend files from the jar. This reduces jar size.

If you still haven't migrated your html customizations this version does not load them anymore. Migration guide: https://github.com/plan-player-analytics/Plan/wiki/Html-Customization--migration-guide-to-React

  • Removed Plugin.Use_Legacy_Frontend setting.
  • Removed any code related to this setting, old behavior and the old web files.
  • Moved most html rendering from backend to the frontend.
  • DataTables did not support rendering React inside table headers so the library was removed and all functionality used by Plan rewritten in React. The visual differences should be minimal.
PageExtension API changes
  • You can now use web permissions with WebUser
  • Registering custom web permissions is possible either by overriding Resolver#usedWebPermissions, or through ResolverService#registerPermissions. There are two methods in ResolverService, one which grants existing groups the new permissions based on existing permission.
Webserver
  • Address of any webserver that is enabled can now be used by commands (Useful for users with 2 game servers without proxy)
  • Disabled X-Forwarded-For reverse-proxy warning temporarily since it was giving false positive warnings often.
  • Fixed out of date information appearing on the /player page due to HTTP caching
Endpoint changes
  • Added /v1/preferences and /v1/storePreferences endpoints that has some default formatting values coming from config.yml and user specific preferences if they have them set. Preferences UI is not yet implemented so for now this only returns the defaults.
  • Deprecated /v1/players endpoint, replaced with /v1/playersTable which gives data in raw format instead of formatted.
  • Added Group Management related endpoints /v1/webGroups, /v1/groupPermissions, /v1/permissions, /v1/saveGroupPermissions, /v1/deleteGroup (Only enabled with https)
  • Added Plugin history endpoint /v1/pluginHistory (Only enabled with https)
Database
  • Fixed join address truncation error on backup
  • Added tables plan_web_group, plan_web_group_to_permission, plan_web_permission, plan_web_user_preferences & plan_plugin_versions
  • plan_security column permission_level was removed and a foreign key column group_id added
  • Inactive player cleaning is now disabled on Game servers if Proxy server is in the database to avoid confusing situations where limit configured on Proxy server doesn't apply.
Spigot
  • Possibly fixed Ping not being gathered on Spigot 1.20+ servers
  • Dreeam-qwq fixed an error that occurred when Join Address didn't contain a port number.
Fabric
  • Fabric 1.20.2 support was implemented by Kopo. Older versions of fabric are no longer supported.
  • Plan now uses semantic version for fabric metadata
Sponge
  • ToxiWoxi fixed SpongeForge failing to load Plan due to unspecified LuckPerms dependency version in Plan
Locale
Some functionality was added to make life of translators easier.

  • Added setting which lists untranslated keys Plugin.Logging.Log_untranslated_locale_keys (default false). This lists anything that has default value so it may give some false positives.
  • Custom locale.yml file is now reloaded when it is modified.
  • Ukranian Locale (UK) added by xlanyleeet
  • Japanese Locale (JA) updated by yu_solt and Jumala9163
  • Simplified Chinese Locale (CN) updated by jhqwqmc
  • Translation of some data was moved to frontend so that it changes when you change the language.
Placeholders
  • Fixed off by one mistake in %plan_top_...% placeholders where 1 would give the 2nd highest and 10 nothing.
  • Added %plan_player_geolocation% placeholder
Extensions
  • Fixed BuyCraft not sorting dates correctly
  • Fixed an issue where rapid fire Vulcan AntiCheat violations would cause database exceptions.
  • Updated Lands API to newer version
  • Possibly fixed an issue where Litebans data was not being updated
  • Fixed issue where ViaVersion would show no data on network page
----------, Oct 21, 2023

5.5 build 2461
This update contains bugfixes. This is probably the last version that will support 'Plugin.Legacy_Frontend' setting. Version 5.6 will remove the old frontend code so migrate your html customizations to React as soon as possible.

Special thanks to DrexHD, lis2a & ringoXD for contributions to this update.

Change log
Data gathering
  • AFK time is now updated when server shuts down to avoid AFK players from appearing active if they remain AFK during shutdown.
Fabric
  • DrexHD updated to support fabric 1.20
  • Added support for netty based socket addresses to possibly fix geolocation gathering issue.
  • Fixed plugin incompatibility with Geyser and other plugins with default mixin reference map (Thanks to onebeastcris for reporting this)
Website
  • Fixed permission level 2 redirect to /player/{uuid}
  • Fixed issues with Query page not allowing to change Registered between or Played between filter dates
  • Latest join address pie is now sorted by 'Most players first'
Database
  • Added experimental support for MariaDB 11. (MariaDB 11.0.2 has a data insertion bug, use 11.1.1 if possible). This is automatically enabled if MySQL driver fails to connect to the database.
  • Fixed issue with plugin groups query related to Vault on Query page
  • Fixed join address truncation error when join address was over 191 characters.
Locale
  • lis2a and ringoXD updated Japanese (JA) Locale
----------, Jul 21, 2023

Change Log 5.5 build 2391
This is a feature packed update, as it brings support for multiple proxy servers, IP allowlist CIDR and Dynamic DNS support, Fabric 1.19.4, and lots and lots of improvements.

Special thanks to Kopo, WolverStones & inductor for contributions to this update!

Change log
Fabric 1.19.4
  • Kopo updated Fabric support to 1.19.4, older versions are no longer be supported by this version
  • Kopo fixed Gamemode change event not triggering
  • Fixed a dog killing something crashing the server when running older fabric version
Multi proxy support
Plan can now be installed on multiple proxy servers. This is useful for networks that divide their players between multiple proxy servers.
  • You can now name proxy servers with Server.ServerName config option (to distinguish in Performance tab)
  • Server.IP setting is no longer required to be set, since some proxy servers may have their webserver disabled. It's recommended to have only a single Plan webserver running.
  • If multiple proxy servers have their webserver enabled, the commands that have links link to one of them.
  • If all webservers are disabled, but export is enabled, the commands that have links link to one with export enabled.
  • Network online graph stacks the player online counts of all the proxies if RedisBungee is not used. Non-stacked version can be checked from Performance tab.
Known limitations: Online sessions/status are not synced on multiple proxies

IP Allowlist improvements
  • IP Allowlist now supports a lot more notations for easier use: CIDR, Wildcard, IPv6 with omitted zeros. See comment above the setting for examples.
  • IP Allowlist now supports dynamic DNS addresses. Add "dns:{address}" to the allowlist to have Plan resolve the IP address of the dynamic DNS. This may be useful for those without static IP addresses at home.
Database
  • MySQL databases using incorrect character set are now corrected to use utf8mb4 collate utf8mb4_general_ci upon startup. This should prevent some errors from popping up.
  • Fixed join address by day graph error if MySQL strict group by policy is enabled.
  • If Plan detects that two servers are storing data with the same UUID, a warning will be logged to console once every 30 minutes.
    • This usually happens if ServerInfoFile.yml is copied between servers during installation.
    • /plan info command now shows the ServerUUID of the server so that it is easier to debug which server it is
    • The detection looks if previous tps was stored < 30s ago, which suggests two servers are storing data as the same one
  • Add Database.MySQL.Max_Lifetime setting. This setting can be used if database connection keeps timing out
Website
  • Added option to disable registering new users Webserver.Security.Disable_registration (default false)
  • Improvements to network performance tab
    • Added some information why TPS, entities or chunks is not available if only proxy servers are selected
    • Reduced resolution of the data to minutes, so that all servers with data show up in the tooltip when hovering over the graph
    • Fixed server selector not allowing to change servers in some cases
    • Fixed the graph re-rendering when selecting different servers even though the data wasn't reloaded
    • Added warning if none of the selected servers have sent data over 30 days
  • Improvements to network server list
    • An icon is shown if server hasn't sent data for some time (Red triangle if no data in last 24h, Grey triangle if no data in last 7d, Grey archive icon if no data in last 30d)
  • /plan server command now gives link to /server/UUID instead of /server/Name
  • Fixed configured theme not applying by default
  • Extension data with colors or links now render properly
  • Fixed the logged in player's head image not loading on the top right
Locale
  • Custom locale files (locale.yml) are now updated with new translation lines whenever server starts
  • WolverStones updated Czech (CS) locale
  • inductor updated Japanese (JA) locale
Extensions
  • Fixed ExceptionInInitializerError in Extension construction causing Plan to not enable properly
  • Fixed exception related to LibertyBans Extension
  • Fixed exception related to Towny Extension
----------, May 21, 2023

5.5 build 2307
This release has some new tools for analyzing player retention, as well as further improvements to the website.

Special thanks to TheLittle_Yang for contributing to this update.

Change log
Player Retention Analysis Graph

[​IMG]

This update adds a graph to network and server pages (Playerbase > Player Retention) that has options to:
  • Draw graphs at different time resolutions
  • Limit input data by time
  • Group players by register date or join address
  • Visualize player retention in different ways
    • Time since registration date
    • Playtime
    • Date
    • Cumulative player gain
    • Percentage / Player count / Stacked player count
Any and all combinations are allowed which allows extensive analysis of player retention. Help sections attempt to make the data understandable and show examples.

Data gathering
  • Attempt to correct register dates if they report a date in the year 1970 (Epoch millisecond 0 = Jan 1 1970).
Website
  • Any extension tables can now be sorted
  • Fixed Network > Servers Overview Quick view graph not loading
  • Fixed sidebar being transparent in nightmode on mobile
  • Fixed Activity index help modal not drawing the index function after certain x threshold
  • Fixed data not updating when switching from Server to Network page in cases where they shared same components (eg. Playerbase graphs, Join address graphs, etc)
  • Improved player overview card layout on mobile
  • Reduced font size on mobile when in portrait mode, so that more tables remain readable
Extensions
  • Fixed NPE when player joined and FloodGate had not loaded its API
Locale
  • TheLittle_Yang updated Traditional Chinese (CN) Locale
----------, Mar 26, 2023

5.5 build 2272
This update enables the new React based frontend by default, speeds up loading various parts of the website, and fixes a couple of issues.

If you are using Html Customization, it is now possible to migrate to the new system, see https://github.com/plan-player-analytics/Plan/wiki/Html-Customization--migration-guide-to-React - You can use Plugin.Use_Legacy_Frontend setting until your migrations are complete.

Back up your config in case you need to revert to previous version. Updating should be easy, simply replace the jar.

Change log
React Frontend (Previously called Frontend BETA)
The frontend rewrite is complete, so the new frontend is now enabled by default. Plugin.Use_Legacy_Frontend (default: false) setting still allows using old frontend for a while until it's completely removed.

Here is a summary of improvements this brings if you have not participated in the Beta:
  • Faster loading time since less data requests are made at once
  • Improved mobile navigation
  • New features
    • Page navigation button for switching between pages
    • Switching language on the frontend
    • Join address tab
    • Visualizer switches for some graphs
    • Average players online data to Performance tabs
    • Interactive '?' help for Activity Index and New Player Retention (These were the two most common questions on how they work)
    • Redesigned Network > Servers tab
  • Easier to maintain and develop further
Changes from previous update:
  • Added a page navigation button that allows moving to different servers and other pages easily. This replaces the 'Back to main page' button. You can switch between the same page for two servers (eg. Move from Server 1 > Performance to Server 2 > Performance in one click)
    [​IMG]
  • Improved mobile navigation. With the navigation button this should help mobile users a lot.
  • Interactive '?' help for Activity Index and New Player Retention (These were the two most common questions on how they work)
  • Fixed network server list saying "No servers installed" while servers were being loaded.
  • Fixed page translation issues
  • React was updated to version 18
  • Javascript APIs for extending the page programmatically were implemented https://github.com/plan-player-analytics/Plan/wiki/APIv5-PageExtension-API#javascript-api
  • Fixed join address data breaking the page when visualized as a table
  • Fixed issues of plugin cards overlapping when switching between plugins of two servers on player page
New feature: public_html

A new feature in the webserver allows hosting any web files on the Plan webserver. Please note that any files placed in the public_html folder (/plugins/Plan/public_html by default) can be read by anyone who knows the address to the webserver even if you have login enabled. The folder can be configured with Webserver.Public_html_directory setting.

The main purpose of this feature is to allow Html Customization of the React bundle https://github.com/plan-player-analytics/Plan/wiki/Html-Customization

Webserver
  • Implemented HTTP Caching: Browser will now cache some responses and avoid sending unnecessary data if it was already loaded. This can improve page loading times from multiple seconds to milliseconds.
  • Implemented public_html feature that allows hosting custom files from a configurable folder Webserver.Public_html_directory (default /plugins/Plan/public_html). This can be used to host http-challenge file for certbot and other files.
Database
  • PlayerTableRowPatch should no longer be re-applied all the time
  • Optimized server player table query: /server/players now loads much faster. Tested optimization: 4s -> 500ms: 8x improvement
  • Optimized server latest join addresses query: /sever/join_addresses now loads much faster. Tested optimization: 19s -> 150ms: 120x improvement
  • Optimized /v1/network/servers endpoint, got a 66% speed increase, so Servers tab on network page should load faster.
PlaceholderAPI
  • Unregister placeholder extension when Plan disables: this possibly fixes an issue where PlaceholderAPI would log errors when Plan disabled before PlaceholderAPI.
----------, Mar 5, 2023

5.5 build 2172 - CRITICAL security vulnerability fix
This build contains a fix to a CRITICAL SQL Injection vulnerability, as well as fixes to minor security vulnerabilities.

Yesterday (2023-01-14): Finding a minor Path Traversal security vulnerability lead to a throughout process of labeling all untrusted data in the codebase, and during that process a critical SQL Injection vulnerability was also discovered. When exploited successfully SQL Injection allows a malicious actor to read any data from the database and change or delete data. This may expose user salted+hashed Plan web user passwords or other data in the database.

It is recommended to update as soon as possible, even though exploits for the vulnerability may not yet exist in the wild.

The fix has been backported to build 1722 https://github.com/plan-player-analytics/Plan/releases/tag/5.4.1722.1 for those that need it.

This is a first time a this high priority vulnerability affects Plan, so I'm a bit overwhelmed, but I'm hoping to address this vulnerability professionally by releasing a fix in a timely manner, and keeping exact details undisclosed for now to give users time to update.


Change Log

Fixed CRITICAL SQL Injection vulnerability
Details
Vulnerable versions: 5.2 build 1168 to 5.5 build 2163

if login is enabled: Malicious users with permission level 1 (plan.player.other) or 0 (plan.server) can access an endpoint which was found to contain an SQL Injection vulnerability.
if login is not enabled: Any malicious actor can access an endpoint which was found to contain an SQL Injection vulnerability.

Mitigation if you are unable to update
  1. Enable https and login so that less users have access to the vulnerable endpoint.
    https://github.com/plan-player-analytics/Plan/wiki/SSL-Certificate-(HTTPS)-Set-Up
  2. Enable IP Whitelist so that less users have access to the vulnerable endpoint.
  3. if unable to update or secure the server, disable Plan Webserver. This option is good if you want to delay updating to a more convenient time.
Other fixed security vulnerabilities
  • [Minor] Fixed Path Traversal vulnerability where attacker could gain read access to .css, .js, .png, .woff, .woff2, .eot, .tff files anywhere on the host machine if Customized_files.Enable_web_dev_mode setting was set as true
  • [Minor] Fixed XSS (Cross site scripting) vulnerability in Whitelist deny 403 -page when attacker routes traffic to Plan through a reverse-proxy with malicious X-Forwarded-For header
  • Removed untrusted data from exception messages used within the plugin
    • [Minor] Prevented potential XSS vulnerabilities in Not Found page when untrusted data could enter the error message
    • [Minor] Prevented potential XSS vulnerabilities in Internal Server Error page when untrusted data could enter the error message
  • [Minor] Prevented malicious Hello-packet from breaking Session serialization to CSV on server disable if join address had a ; character in it
Locale
  • Updated Finnish (FI) Locale
----------, Jan 15, 2023

5.5 build 2163
This update contains performance improvements and subdirectory support for the new frontend.

Change log
Database
  • Fixed concurrency bottleneck where write and read operations interfered with each other, limiting to one query or transaction from executing at the same time. This bottleneck occurred since the access-lock designed to prevent database operations during schema modifications was still enabled after the schema modifications already completed.
  • Disabled BadAFKThresholdValuePatch - This patch was written to fix bad data input from version 4.5.2 which is no longer being used according to metrics, so this patch can be disabled. It was sometimes executed if a player joined a server and never moved.
Frontend BETA
Export features are now complete, up next is Html Customization.
  • Implemented support and tests for reverse-proxy setups with subdirectory proxy_pass settings (Eg. address.com/plan/)
  • Implemented support and tests for Export to a subdirectory (eg. /var/public_html/plan/ accessed from address.com/plan/)
Webserver
  • Added a read-write lock to json_cache so that files are not read while being written. This might solve some randomly occurring issues.
Plugin Enable
  • Incorrectly written lines in unsaved-sessions.csv during plugin disable are now ignored - a warning is printed instead of an exception stacktrace.
----------, Jan 7, 2023

5.5 build 2150 - Hotfix
This update contains a hotfix to build 2144. New installations after build 2100 are not affected - The bug affected instances that were updated from versions prior to build 2100 on networks or fabric servers. Sorry for any inconvenience it has caused. More about the bug below.

Fixed bug in BadJoinAddressCorrectionPatch
An unfortunate typo in session to join address id correction code caused all sessions to get invalid join address id. Instead of correcting invalid ids to correct ids, it changed correct ids to incorrect ids. Any installations where the broken patch ran lost their join address data.

Symptoms of the bad patch:

  • Playtime data too low or missing on player pages
  • Activity index differs between player page and player list
  • Join address data shows no data
Fixes in this update:

  • Fixed the typo, now the patch works as intended and corrects join address ids.
  • Added a second patch that attempts to recover at least some of the missing data by using latest join address in plan_user_info table for installations that ran the bad patch. This is a best-effort solution since the original data was deleted by the bad patch, so some granularity like player changing the address they have used in the past was lost.
  • Playtime and activity index values should recover since the issue was caused by join address ids pointing to invalid numbers.
----------, Dec 30, 2022

5.5 build 2144
This build contains various bugfixes.


Change log

Join Address Data
  • Any join address data that has null characters (gathering was fixed in previous update) is now cleaned on first startup - the data after null character is cleared, and the valid data kept. This should help with join address tab not loading in many cases. This was thoroughly unit tested to ensure it works properly.
Query page
  • Fixed Query results erroring with 500 due to mistake in the code not placing boolean parameters in the query parameters.
Frontend BETA
  • Fixed timezone not being applied to graphs (All line graphs)
  • Fixed exported pages constantly updating data in the background
----------, Dec 20, 2022

5.5 build 2121
Another release to add 1.19.3 support to Fabric and release all the goodies developed since previous update :)

Special thanks to DrexHD for contributions to this update.

Change Log
Data gathering
Fabric
  • DrexHD updated fabric code to be compatible with 1.19.3 changes
Frontend BETA
  • Fixed login and register redirects to wrong place
  • Fixed Playerbase overview 30 days and Now being wrong way around on the table
  • React Export is now functional (At least on webservers that serve the bundle at /, further testing needed if your export is on /stats/ for example.)
    • If Frontend beta and export are enabled, the old html files are no longer exported.
    • Extra index.html files are exported to redirect back to the React bundle to allow sharing the URLs to others. This is because in the React frontend the address is handled by React Router and clicking most links on the pages makes no extra requests for html. Reloading on the other hand needs html file, so the extra files redirect to {address}/?redirect={address you used} - so that you end up where you want.
    • Exported pages have a different icon next to last refresh timestamp to visually distinguish from screenshots which one is being used.
    • Known issue with export: The json files are constantly being reloaded by the browser if they're old
----------, Dec 8, 2022

5.5 build 2100 - 6 years of Plan!
This release contains a lot of things. Frontend BETA enters next phase since all pages have been rewritten in React, next steps are export and html customization implementation for it. This update also contains data gathering fixes, additions, new placeholders along with other bugfixes.

Today also marks 6th year of Plan development! As is customary at this point there's a Year in Review -post after the change log.

Special thanks to Vankka, angela0930 for contributions to this update

Change log
Data Gathering
  • Removed data after null-byte in Join Address data. Bungeecord and Velocity use the handshake-packet to forward UUID and IP information of players, and since the join address comes from handshake packet, that data ended up in the join addresses Plan gathered. Forge Mod Loader forwards its version information in the same handshake packet in similar fashion. Discarding data after the null-byte should resolve any issues.
Frontend BETA
  • Names of new players are now shown in Light Green in PvP tables when they are the player who was killed within 24h of their first join. This is to help find players who kill newer players.
  • /query page has been rewritten in React.
  • /register page has been rewritten in React
  • Fixed plugin cards overlapping when moving to different page on a table
  • Fixed /network/... redirecting to /network
  • Fixed colors of buttons when hovering mouse on them
I'm excited, the frontend part of rewrite is complete and I can move to implementing export and html customization for the new frontend.

Export
  • Experimental version of export for React version is now enabled if Frontend BETA and Export are both enabled. This will place index.html at the root of the export directory along with all the react files. I have not yet been able to test it properly, so it might be completely unusable. Just throwing it out there.
DataExtension API: Component API by Vankka
If your plugin's data contains chat colors or mini-message information, that information can now be included so that it will eventually show up on the website. Check documentation for the new API here

Extensions
  • Vankka fixed error that occurred when deleting LuckPerms groups
  • Vankka fixed LuckPerms not showing colors properly on the website
Placeholders
Added new placeholders

  • %plan_time_active_{day/week/month}%
  • %plan_time_active_{day/week/month}_raw%
  • %plan_top_player_kills_{day/week/month/total}_{n}%
Locale
  • angela0930 updated ZH_TW locale
Other
  • Fixed ConcurrentModificationException related to world aliases
  • Fixed some queries erroring in Strict group by mode for MySQL
  • Fixed Ore not showing Plan sponge version
  • Fixed removal of cookies that expired while server was offline
  • Fixed RemoveUsernameFromAccessLogPatch applying every time
  • Changed "Database can't keep up with transactions" to less dire message
  • Fixed SQLITE_CONSTRAINT_NOTNULL when request uri is null
Year in review: Year 6
This year has been a lot different from the previous five, since there has been a lot more things going on in my personal life. Last year I got a job, and in January I started writing my Master’s thesis. It was very tough balancing all that on top of developing Plan on the side. I had to take some months off development entirely with a hiatus in the summer and fall to finish up the thesis. In September I returned the thesis for review and I’m happy to now have graduated! Things definitely calmed down after finishing up the thesis and resuming Plan development after the hiatus.

The running theme this year has been steady and stable changes. Inspired by the answers to last year’s poll, the goals for this year were to improve the loading speed of the website, as well as visualizing more of the gathered data.

There’s been a lot of work done this year towards those goals. The database schema was changed drastically, the webserver was changed to Jetty, and Frontend BETA is rewriting the code running in browser to React. Alone each change brings small improvements, but together they improve things a lot.
I’m very excited for the future, since the React frontend speeds up development of new things considerably thanks to environment where changes can be seen instantly. Previously I would have had to compile Plan and restart the test server – It takes 1 second vs 3 minutes it used to take to see changes now.

Main goals for 2023 is to get the new frontend out of Beta after feature parity with previous frontend is reached (Export and Html Customization still to go), and after that it’ll be time to tackle a lot of tickets with ’Visualization’ tag. A lot of the ongoing work has been done to make the future changes easier to do, which should speed up feature additions in the upcoming year.

I’m very happy that all the automation created in the past years is now finally paying off, helping keep confidence in that everything works as intended when changing something. I love that it’s now possible to deliver development builds fast, even within the same hour when someone is asking for help.

Special thanks to Github sponsors, donators, discord moderators, support, and contributors this year! Extra special thanks to Kopo & Vankka for their constant input into the project.

This year in numbers
  • From build 1516 to build 2100: 584 commits released as updates
  • From #43 to #20 in top plugins by rating – and keeping the #8 spot in top spigot plugins by rating.
  • Installations has stayed stable at over 4000 servers
  • From 59k lines of code to 64k (not counting extensions or web code)
  • From 51.3% test coverage to 57.4%
  • 194 issues and 32 (+247 dependabot) pull requests closed this year
Have a good one! :)
----------, Dec 2, 2022

Change log 5.5 build 1984
This update contains small improvements.

Special thanks to DubHacker for contributions to this update.

Change log
  • [Webserver] Fixed login redirecting back to /login if multiple cookies were present (for example CloudFlare cookies)
  • [Locale] DubHacker updated DE locale
----------, Oct 8, 2022

Bugfixes - Change log 5.5 build 1969

Special thanks to PikaMug for contributions to this update!

Change log
Website
  • Fixed login and register pages saying 'You need to specify a password!' incorrectly when using non-default Locale
  • Frontend BETA: Fixed players table on network page linking to wrong URL
Velocity
  • ProxioDev fork of RedisBungee is now supported for Velocity to gather correct network online player count.
Extensions
  • PikaMug updated Quests extension, adding new datapoints and fixing non-repeatable default quests showing as times completed: 0.
  • Fixed Extension tab icons showing wrong icon (Showed the icon for first datapoint)
MySQL
  • Fixed SQL exceptions related to ONLY_FULL_GROUP_BY mode being enabled.
----------, Sep 25, 2022

5.5 build 1953 - Hotfixes to build 1951
  • Fixed extensions with only PLAYER_LEAVE not getting updated on player leave
  • Fixed data truncation error related to join addresses on restart when trying to store sessions from last shutdown
  • Self fix: If you're unable to login after updating (usually with reverse-proxy setups), clear cookies.
Change log of previous release, build 1951
----------, Sep 13, 2022

5.5 build 1951 - Change log
This release contains update to Java 11, Sponge 8, Fabric 1.19.1, as well as Webserver rewrite to Jetty. In addition it contains new features and improvements, and more progress on Frontent BETA in the form of rewritten server & network pages.

Special thanks to Vankka, Kopo, Drex & stashenko for contributions to this update

Change Log
Breaking changes
This version updates config so backup your config in case you need to revert back to 5.4!
  • Java 11: Plan now requires Java 11 or newer to run. Java 8 is no longer supported.
  • Sponge API 8: Sponge API 7 is no longer supported.
  • Fabric 1.19.1: Fabric 1.18 is no longer supported
If you can't update, you can continue using 5.4 build 1722 even if connected to same database as newer versions. (No database schema changes!)

Supported APIs
  • Updated to Java 11, which was required by Jetty and Sponge API 8.
  • Vankka implemented Sponge API 8 changes.
  • Drex implemented support for Fabric 1.19.1
New features
Jetty Webserver
New webserver implementation speeds up response transmission times considerably
  • Replaced Sun Webserver with Jetty (https://www.eclipse.org/jetty/), an open source embedded webserver library.
  • Plan now supports HTTP/2
  • Plan now supports TLSv1.3 for HTTPS, and browsers have a larger selection of cipher suites they can use.
    • Users of PlanCert.jks (Included in the jar) are encouraged to create their own self signed cert. I had to implement some extra code to support expired certificate (Since PlanCert.jks inside the jar has expired), and that may not be as secure as creating a new self-signed .p12 - Instructions will be added to the wiki, but the plugin also logs the instructions if you use that cert.
  • Fixed gzip compression for responses (speeds up transmission)
Access log
Access logs are now stored in Plan database in plan_access_log table.
  • You can also log access to console with Webserver.Security.Access_log.Print_to_console (default false) in the config. This is useful for debugging reverse-proxy issues.
  • The IP of each request is stored in the database - as it is necessary for security (a valid legal basis for use with GDPR).
  • The request logs in database are removed after Webserver.Security.Access_log.Remove_logs_after_days (default 30)
Swagger
Plan json endpoints are now documented with Swagger available on the webserver itself. You can access the Swagger documentation from /docs on your Plan webserver after updating.

Data Gathering
  • Fabric should now gather join addresses correctly. Previously player IPs were gathered by mistake. To clear the invalid data use /plan db removejoinaddresses {servername} once you install the plugin.
  • Added 'Data_gathering.Preserve_join_address_case' setting (default false) that attempts to preserve join address case. Note that some servers/clients may lowercase addresses regardless.
  • Possibly fixed an issue where Quit event is processed before Join, leading to long incorrect sessions being stored on next join/shutdown
  • Possibly fixed an issue where saving sessions that ended on shutdown failed when another join had just stored one of the join addresses that were previously unseen. (It would retry next reload and probably succeed - so low priority issue.)
Frontend BETA progress
Enable with Plugin.Frontend_BETA setting in the config. Note that Html Customization and Export are not yet supported in the beta.
  • Rewrote /login page in React
  • Rewrote /server page in React
    • You can now switch between visualizations for 'current playerbase' and 'latest join address' pie-graphs
      [​IMG]
    • Join addresses by day graph is now available to analyze incoming join addresses further.
      [​IMG]
  • Rewrote /network page in React
    • You can now switch between Map projections in Geolocations
      [​IMG]
    • You can now sort servers in server list by specific values
      [​IMG]
    • Join addresses by day graph also available for network page
    • Added Players online to network performance tab - data from multiple servers can be viewed in one graph on network performance tab
  • Fixed various issues and cleaned up overall appearance
You can track progress of frontend beta here

Bugfixes
  • Fixed lag caused by large tab completion results if server had a lot of players and someone tab completed /plan player .
  • Fixed empty cookies preventing Plan login due to error
  • Reduced maximum join address length to 191 characters due to limitation of old MySQL versions
Configuration
  • Added plan.command permission (default: true) on Spigot servers to allow hiding /plan command from tab completion by negating this permission
  • Config structure was modified to be valid yaml so that other programs can validate it. The config is updated automatically with current values of old config versions.
  • Increased default inactive player removal threshold 180 days -> 3650 days (10 years). This change is not applied automatically to old configs.
  • stashenko updated RU locale
  • Added /plan db migrate_to_online_uuids command to help migrating from an offline-mode server to online-mode
    • Moves data of offline uuids to online uuids (Looks up online uuid from Mojang)
    • Combines data of offline uuids and online uuids if both exist
    • See /plan db for more help
Extensions
  • Plugin method calls should no longer be made during Plan disable.
  • Updated PlotSquared extension, should now register correctly
  • Updated Floodgate extension, should now register correctly
  • Updated Nucleus extension for Sponge 8
  • Removed RedProtect support for Sponge (No longer supported in Sponge 8)
Automation
  • Dev builds for every commit is now available DEV build pipeline (Click on title and scroll down to Artifacts, note that you need to log in to Github.)
----------, Sep 12, 2022

Change log 5.4 build 1722
This update fixes fabric 1.19 support and join address gathering.

Special thanks to Kopo for contributions to this update.

Change log
Fix join address gathering (No longer 'Unknown')
An oversight in the way the player leave listener code was structured caused the player join address to be removed from memory before its linking to the session that was ending.

It is now fixed.

Fabric 1.19 support
Kopo fixed fabric pipeline for 1.19 - Unfortunately the changes are incompatible with older versions of fabric. If you need older version of fabric use older version of Plan.

Frontend BETA
  • /players page rewritten in React now available when opted in to frontend beta
    • Note that no fixes to functionality were added to it yet, just implementation in React.
  • Server page rewrite is making good progress and is about 75% complete.
Server identification
  • Possibly fixed ServerInfoFile.yml clearing and server duplicating if MySQL is busy during enable
----------, Jun 11, 2022

Change log 5.4 build 1690
This update fixes some annoying bugs and prepares the plugin for the move to 5.5 and Java 11 while keeping this version compatible for those unable to update their servers to Java 11.

If no further critical bugs surface next update will be 5.5.

Change log
Plugin stability
  • Fixed issue where Plan would prevent server enable from continuing if database was not responsive during enable.
  • Fixed 2 crashes when database write latency is high
    • Fixed thread starvation crash during high latency when using ViaVersion or ProtocolSupport
    • Reduced chance of out of memory crash when during high latency by starting to drop plugin data transactions for a while if queue grows over 500 transactions. (The transactions continue if queue returns to <50)
Database
Join address schema change
  • Join addresses are now stored in plan_join_address table and id referencing that is added to plan_sessions table for time based analysis implementation later.
    • Backwards compatible schema change - old versions will insert 'unknown' as each sessions address.
    • plan_user_info.join_address column was not removed, but its use is discouraged for 3rd parties as its use may be removed in the future.
Fixes to patches
  • Fixed UserInfoOptimizationPatch resetting join_address data when applied
  • Fixed typo in RemoveDanglingServerDataPatch that caused it to fail
  • Possibly improved speed of RemoveDanglingUserDataPatch
Other fixes to database
  • Prevented transactions from executing if database ran into fatal error. This reduces amount of errors logged on a failed patch
  • Fixed error related to user_id constraint violation for Ping and Session store transactions. If they execute faster than the user register transaction the player will not have up-to-date information until the proper transaction executes, but the storage of other data will no longer fail.
  • Prevented ActiveCookieStore related DbOpException if plugin failed to enable
Website
  • Server page > Performance now lists Average players under Performance as Numbers.
Frontend BETA
  • Implemented player ping graph on the player page when opted into frontend beta
  • Fixed nickname list not showing colors properly
  • Fixed terminal icon not loading when user registered with console
  • Fallback to using relative address if Alternative_IP is misconfigured to reduce confusion. Previously nothing would load if address was different, now there's a chance something loads.
Placeholders
  • Wrote tests for placeholders
    • Fixed player_recent_kill_{1-10} and player_recent_death_{1-10} off-by-one mistake and related error for n=10.
    • Fixed player_unique_players_today erroring if there had been no sessions during today.
  • New placeholders
    • %plan_player_current_session_length%: The length of active session (Online time)
    • %plan_player_current_session_length_raw%: unformatted ms
    • %plan_player_latest_session_length%: The length of active session or previous session if not online
    • %plan_player_latest_session_length_raw%: unformatted ms
    • %plan_player_previous_session_length%: The length of previous non-active session even if online
    • %plan_player_previous_session_length_raw%: unformatted ms
  • player_ placeholders now support adding :name or :uuid at the end of placeholder to show data for another player
    • Note that if the player by given identifier is not found the placeholder is not replaced.
Other bugfixes
  • Console will now log colors properly on Bukkit and Bungee based servers
  • Fixed some _raw placeholders from being formatted
  • Fixed Error related to GriefDefender Extension
----------, May 28, 2022

Bugfixes - Change log 5.4 build 1633

This update brings a couple important bugfixes to build 1628. Please read change log of 1628 if you're running older build than 1628.

Change log
Database
  • Fixed databases failing to patch schema if plan_users or plan_servers were missing rows that had uuids in other tables.
    This affected roughly ~1 in 80 servers based on reports and metrics.
    This problem could occur if server had shutdown at a specific time during player join, or if someone had deleted rows manually from plan_users or plan_servers.
    • The fix deletes dangling data so that the rest of the patches can execute properly.
    • If you have run into this problem on your server this update should fix your database automatically.
  • Fixed SQL errors in ViaVersion Extension and ProtocolSupport Extension
----------, Apr 17, 2022

Frontend BETA and Database optimizations - Change log 5.4 build 1628

Hello! This update brings some great database optimizations, beginning of Frontend BETA (Opt-in), as well as small fixes. Read more below
Special thanks to Kopo, Pingger & KasperiP for contributions to this update.

Change log
Database optimizations (Schema changes)
A lot of work was put into analyzing bottlenecks in queries and slow query logs sent in by users.

Benchmarks using 17k players are promising, as /players page now loads in 5s vs 2+min before.

Database patches will apply on first enable of the update to modify the database schema. This can take up to 4 minutes. Networks: Only enable one Plan server and wait for it to patch database before starting other servers.

  • Changed database schema to optimize query speed and table size
    [​IMG]
  • If you're using these columns via Query API you can replace your use case:
    • If you need uuid in ResultSet, use SELECT u.uuid ... JOIN plan_users u on u.id=<table>.user_id
    • If you have uuid or server uuid in WHERE, use server_id=(SELECT id FROM plan_servers WHERE uuid='<server uuid>')
  • Some queries that were identified as slow were optimized to perform better by changing the query
    • Geolocations queries
    • Ping country table query
    • Player table query
    • Other queries are also sped up by the uuid -> user_id and server_uuid -> server_id changes, as comparing integers is faster than Strings.
  • Extension data insert was made faster by keeping icon ids in memory for short duration
  • MySQL insert performance may be improved since auto-commit was turned off
  • Query page queries now use user ids instead of uuids - this fixes 'Max SQL size exceeded' issues.
  • Added a new index to plan_ping table to speed up ping queries.
  • Removed redundant uuid indexes that are now replaced with foreign key indexes for user_id and server_id, which reduces database size.
Frontend BETA (Opt-in)
Frontend is being rewritten in React one page at a time. This is to have more control over what is displayed on the website, since a lot of requested features will require more interaction or hiding features partially. - While doable with vanilla javascript, code would quickly become unmaintainable.

The goal is to get feature parity with the current frontend implementation by rewriting one page at a time and then switch over completely.

Some features will not use React frontend until everything is complete.

  • To Opt-in set Plugin.Frontend_BETA to true
  • Player page has been rewritten in React, other pages still use previous implementation.
  • Html Customization is currently incompatible with the beta and is disabled automatically.
  • Export is currently incompatible with the beta and old pages continue to be exported even if beta is enabled.
  • Automated browser testing was improved a lot and all pages are now tested for basic javascript errors.
Data gathering
  • Fixed AFK time not being gathered on Fabric, the movement detector was incorrectly firing every time a player position packet arrived (Happens once per second).
Config
  • Default Player head image address was changed from cravatar to crafatar. Remove the whole row from the config and reload Plan if you wish to use the new setting.
Locale
Kopo did a massive locale system improvement in order to support translations on the frontend side, implementing yml conversion, namespacing all of the existing locale keys and writing json endpoints for frontend to load locale - as well as the code responsible for loading those using i18next.

  • Locale files now use .yml format. Any locale files you may be using are converted automatically.
  • The new React Frontend allows changing language on the frontend on a per-user basis with a dropdown menu - This is currently only available on the rewritten pages (player page)
    [​IMG]
  • KasperiP fixed a typo in Finnish locale
Export
  • Players page is now exported more frequently
  • Exported pages should no longer show the Logout button
Extensions
  • Essentials Economy was split from Essentials Extension. Now there are 2 extensions managed separately. This was done since the economy calls were triggering updates too frequently. If you have disabled Essentials Extension you may need to disable EssentialsEco Extension separately
  • Fixed NPE related to LuckPerms Extension
  • Fixed SQL syntax error related to LuckPerms Extension
  • Fixed issues with KingdomsX Extension when using newer version of KingdomsX (They changed names of some of their packages)
  • Pingger added support for 1.18 stone blocks to LogBlock Extension
QoL changes
  • /plan servers command now lists Plan version on each server so it is easier to keep track of servers being out of date.
Bugfixes
  • Fixed negative register dates in player dat files breaking the database
  • Fixed ConcurrentModificationException related to AFK tracker
  • Prevented use of incorrectly formatted WorldAlias regex settings
  • Fixed Plan failing to enable if database query took too long during enable.
----------, Apr 15, 2022

5.4 build 1583 - Hotfix for MySQL issue
This release contains a hotfix for MySQL driver unloading issues on disable/reload, causing the plugin to spew a really long error message and failing to reload when using MySQL.
Driver is no longer unloaded during reload to avoid any issues.

This bug was introduced in dev build 1536 on January 6th, but it was not caught or reported.
----------, Feb 12, 2022

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
----------, Feb 11, 2022

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

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

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.
----------, Nov 7, 2021

5.4 build 1490 - Bugfixes to "Further"
This patch contains bugfixes to the previous update. It seems like things went pretty smoothly and only one bug ticket was opened. In addition to the bugfixes, database drivers are now downloaded at runtime in order to meet the 20MB size requirement set by Ore and Cloudburst (They got a release when that was merged)

Special thanks to Vankka for contribution to this update!

Change log
  • Vankka implemented database driver downloading from papermc repository / maven central. The drivers are loaded to a internal class loader only used by the database classes so that it doesn't effect anything else. That's a nice 13MB off jar size!
  • Fixed SQL syntax error related to the server uptime query on networks when using MySQL 5.7, which broke Servers tab on /network page.
  • Fixed Ore version checker giving 403 error due to missing User-Agent
----------, Nov 6, 2021

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

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

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

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

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

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

Added server uptime
[​IMG]

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

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

Html Customization
  • Enabled Plan web resources are now exported during Plan enable so you no longer need to visit the page after enabling.
  • rymiel implemented a task that checks the modify dates of your custom html files against the ones in the jar and warns if you're using files that are older. (Old files usually cause confusing webpage errors so it's good to have some warning about it on the console.) If you have old files, rename them and reload Plan to generate new versions, then apply your modifications to the new file.
    • Note that files generated after modifications made on github are not detected due to lack of data on what version the generated files are. (The last modified date is used)
Config
  • Added World_aliases.Regex-setting that allows defining a regex to use for grouping world names under same alias. (Note that you can also use the existing list to group worlds under the same alias). This feature helps servers where plugins generate large amounts of worlds manage their Plan config - any world that matches a regex won't be added back to the list.
  • Incorrect Buycraft secret link was corrected by untuned
  • rymiel made it possible to set Display_options.Graphs.TPS.High_threshold and Medium_threshold as decimal numbers (eg 19.5) to allow finer control over these thresholds.
Locale
  • RU Locale was updated by PerchunPak and BratishkaErik
  • CS Locale was updated by Shadowhackercz
  • CN Locale was updated by SkipM4
  • zh_TW Locale was updated by zisunny104
Extensions
  • Vankka made an Extension for LibertyBans
  • Fixed issues with Logblock Extension not working (Now it should finally work)
  • Fixed issue with newer Quests version and Quests Extension
  • MAXOUXAX fixed ViaVersion extension on Velocity & it changed support to 4.x.x versions of ViaVersion.
  • Ignored Floodgate related exception
Placeholders
  • Added player kill related placeholders
    • %plan_player_player_caused_deaths%
    • %plan_player_deaths%
    • %plan_player_mob_caused_deaths%
    • %plan_player_kdr%
    • %plan_player_mob_kdr%
    • %plan_player_recent_kill_<1-10>%
    • %plan_player_recent_death_<1-10>%
  • Added %plan_top_{category}_{timespan}_{i}% placeholders
    • categories: playtime, active_playtime
    • timespans: month, week, day, total
    • i: 1 to 10
    • Example: %plan_top_playtime_month_1% shows name of the player with highest playtime in last 30 days
  • All placeholders that don't start with plan_player_ now support server identifier at the end to show data from another server. Use plan servers command for identifiers. Examples:
    • %plan_tps_day:Skyblock%
    • %plan_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
  • 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
----------, Oct 30, 2021

5.4 build 1366
This update brings some more bugfixes! If you still haven't updated from build 1330 running a 1.17 server it is heavily recommended to update since session saving on server shutdown is broken in that build!

Special thanks to rymiel, Kopo & mbax for contributions to this update

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

Change log 5.4 build 1354
Note: Critical update for 1.17 users! This update contains bugfixes and an upgrade to bootstrap 5.

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

Special thanks to Kopo for contributions to this update.

Change log
CRITICAL: Fixed Spigot/Paper 1.17 servers not saving sessions on shutdown
There are two mechanisms in place to save sessions during server shutdown. One checks if server is shutting down via NMS code and other uses JVM shutdown hook in case the first didn't fire.

Unfortunately the changes in 1.17 broke both of these mechanisms, one by removing field NMS was accessing and other by closing of class loaders during shutdown.

This update fixes both.

Website
  • Kopo updated Plan to use Bootstrap 5, this was a large update, a lot of effort was put to keep appearance of the page the same
  • Kopo fixed dark theme not applying to query page table properly
  • Kopo removed horizotal scrollbar from players tables so it should look a lot cleaner if you have a lot of plugin data there.
  • Some or all Performance graph labels are now hidden depending on the screen width so that the graph is still viewable on mobile.
Bugfixes
  • Kopo moved Velocity support to version 3.0.0.
  • Fixed session shutdown save exception on 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
----------, Jul 4, 2021

Java 16 support - Change log 5.4 build 1330

This update adds Java 16 support, removes H2, updates many locales and fixes various bugs.

Special thanks to Kopo, 4drian3d, EyuphanMandiraci, 10935336, 洛伊, Sander0542 and portlek for contributing to this update.

Change log
Java 16 support
Runtime dependencies are no longer downloaded, so the reflection error goes away, and with it Java 16 is now compatible.

Removed H2 support
H2 has been deprecated for a while now, and the database drivers are removed in this update.
If you still haven't migrated despite the big warning during enable, do so with /plan db move h2 <sqlite / mysql> before updating. This database was very prone to corruption and that's the main reason it was phased out.

Option to warm up Plan placeholders
'Plugins.PlaceholderAPI.Load_these_placeholders_on_join' setting allows warming up Plan placeholders in case you are using some plugins that run placeholder replacement on server thread. This should reduce the need to replace things twice, but you need to add the specific placeholders to this list.

Removed SQLite drivers for android-arm and DragonflyBSD
To keep jar under size limits these two drivers had to be removed (I hope nobody runs Plan on a phone or TV).
Metrics said there were 2 FreeBSD users, but they are unaffected since drivers for that is still included.

Locale
  • Added Traditional Chinese (ZH_TW) locale by 洛伊
  • Added Dutch (NL) locale by Sander0542
  • Simplified Chinese locale updated by 10935336
  • Turkish locale updated by EyuphanMandiraci
  • Spanish locale updated by 4drian3d
Website
  • Added /errors and /v1/errors to view recent Plan error logs in the browser
  • Fixed tab navigation going under the "close sidebar" area on some phones [all builds]
  • Fixed South Korea not getting color on the map [all builds]
Extensions
  • Fixed LogBlock Extension not getting any data [all builds]
  • Fixed PlotSquared Extension throwing error sometimes [builds 1284+]
  • Possibly fixed Tebex Extension throwing error sometimes [builds 1284+]
  • portlek fixed a NPE related to DiscordSRV Extension [all builds?]
Other
  • Kopo updated Plan to build with Gradle 7
  • jQuery is now served via CDN to reduce jar size.
----------, Jun 18, 2021

5.3 build 1284 - Extension Bonanza
This version brings a new builder based API to the DataExtension API and with it support for 13 new plugins. In addition to this a lot of bugs were fixed. At least 35 tickets were closed for this release.

Special thanks to hallo1142, Aurelien30000, BruilsiozPro, WolverStones, BrainStone, Kopo942 and AppleMacOS for their contributions to this update. Thanks y'all!

Change log
DataExtensions
New DataExtensions
Added support for 13 plugins:
  • AuthMe
  • FastLogin
  • Heroes
  • KingdomsX
  • Lands
  • LogBlock (Diamonds / stone mined and other metrics)
  • MarriageMaster
  • MyPet
  • PlaceholderAPI (Track any placeholders by adding them to the Plan config)
  • PlotSquared
  • ProtectionStones
  • React (Actions performed by React)
  • Quests
Note that if you're not seeing data from a plugin, make sure the player has joined the server after the update and check plugins tab of their player page before asking about it, thanks :)

Updates to existing DataExtensions
  • AdvancedBan
    • now records data again [unknown impact]
  • BentoBox
    • now has AOneBlock and MagicCobblestoneGenerator data
  • DKBans
    • Fixed NPE [all builds]
  • Floodgate
    • Fixed UNIQUE constraint violation [all builds]
  • Litebans
    • Added datapoint for player names of players who connected using same IP (No IPs displayed though)
  • Tebex
    • now fetches full purchase history with the paginated API and shows player's purchases on their pages.
  • ViaVersion
    • Velocity support
  • Tables over 10 rows now show search bar and pagination (Previous limit 50 rows)
  • It is now possible to sort extension tables by value or date when they have over 25 rows (Previously only alphabetical)
  • Optimized transaction that updates tables for dataextensions
    • old: delete all + insert (2n operations)
    • new: overwrite + insert/delete remaining (n operations)
DataExtension Builder API
The thing that made a lot of this possible:
  • Added a builder based API for defining data of other plugins https://github.com/plan-player-analytics/Plan/wiki/DataExtension-API-Builders
    • Allows dynamic data definition at runtime (Like that of PlaceholderAPI via configuration).
    • Beneficial for plugins that use one class to hold all their data, as only one fetch is needed.
    • IDEs have better auto-completion support compared to annotations.
  • The annotation based API was refactored to use the builder API in its implementation.
Website
  • Updated SB Admin 2 css to newer version
  • Player links now use UUIDs instead of names to support viewing duplicate names in some cases. Note that names still work in the URL.
  • Added average TPS to "During low tps spikes"
  • Fixed server page calendar not appearing. [builds 1174+]
  • Fixed 'Plan' showing as server name on session accordion [builds 1115+]
  • Fixed server page showing join address pie for the whole network [builds 1115+]
  • Kopo942 fixed HighCharts scrollbar not swapping color with Nightmode without refresh [all builds]
  • Fixed /players page player links going to wrong place when using reverse-proxy via /plan/ subdirectory
  • Fixed flickering of extension cards when using Chrome
  • AppleMacOS fixed login page logo being stretched when using Safari
  • Removed "Servers" divider from player page in case to make it clearer that those are also about the player.
Locale
  • Deutch locale updated by hallo1142
  • French locale updated by Aurelien30000
  • Turkish locale updated by BruilsiozPro
  • Czech locale updated by WolverStones
Placeholder API
  • BrainStone added a bunch of <placeholder>_raw placeholders that return milliseconds instead of formatted time value
  • BrainStone fixed Plan not supporting OfflinePlayers and Kopo942 fixed an NPE when %plan_(non_existing_placeholder)% was given
Other Bugfixes
  • {Java} Sorted out illegal reflective access warning during dependency loading [builds 1108+]
  • {Join addresses} Stopped using Paper specific method that was returning bad data in some cases [builds 1124+]
  • {Config} Prevented use of &, / and ? in server names.
  • {Export} Fixed exported player pages not loading json. [builds 1056+]
  • {Database} Possibly fixed locking time exceeded and deadlock issues with extension related transactions [all builds]
  • {Operator status} Fixed operator status not being updated during first join [all builds]
  • {Plugin enable} Fixed plugin not enabling when /plugins/Plan folder was a symlink
----------, May 2, 2021

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.
----------, Mar 26, 2021

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
[​IMG]
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
[​IMG]
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%.
----------, Mar 21, 2021

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)
----------, Mar 17, 2021

Change log 5.2 build 1120
  • [Hotfix] Fixed StackOverflowError related to ActiveSession after the page was viewed while a session was active
----------, Mar 16, 2021

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)
----------, Mar 16, 2021

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.


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 https://repo1.maven.org/maven2/

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.
----------, Mar 16, 2021

Change log 5.2 build 1068

This is a bugfix release

Change log
  • Stopped throwing error when system clocks are out of sync
  • Fixed exported files not loading some graphs or player tables
  • Fixed network page servers tab refresh clock saying 'undefined' (Changed output of /v1/servers)
----------, Feb 19, 2021

Query Page | Change log 5.2 build 1063

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

  • 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
----------, Feb 14, 2021

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
----------, Nov 18, 2020

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
----------, Nov 17, 2020

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
----------, Nov 17, 2020

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 #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
----------, Oct 26, 2020

5.1 build 770 - Command Rework +hotfix for b768
Hotfix for build 768
  • Fixed NoClassDefFoundError: TextStringBuilder
[​IMG]

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 https://github.com/plan-player-analytics/Plan/wiki/Commands-&-Permissions 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
----------, Oct 12, 2020

5.1 build 768 - Command Rework
[​IMG]

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 https://github.com/plan-player-analytics/Plan/wiki/Commands-&-Permissions 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
----------, Oct 11, 2020

5.1 build 657
This update has taken a while to get together, as I've been busy at work.
None the less, this update contains lots of bugfixes, quite many related to database related exceptions.

Special thanks to Saph1s for their contribution to this update.

Change log
Database
  • New tables are now created with utf8mb4 as the default charset to avoid character encoding errors.
  • Increased deadlock retry attempts to 5, and added the attempt count to the error context.
  • If the database fails to do tasks related to opening (Such as creating tables or patching schema) the plugin now disables.
  • If the database is under heavy load (Visible as "Lock wait timeout exceeded" errors) Plan now attempts to reduce the load for 10 minutes each time. If the reduction is not enough, a pause between transactions is increased.
Bugfixes
  • Fixed JSON serialization of /v1/players endpoint when a datapoint had \ character in it that broke the players table.
  • Fixed IllegalArgumentException fromKey > toKey when adding ping to sessions on /player page (56bb3b3a6a)
  • Fixed incompatibility with AAC due to use of Reflection during class loading (Moved reflection use to enable)
  • Possibly fixed logo appearing stretched on the login page when using Safari
Webserver
  • Webserver is now enabled by default when installing on Sponge servers
Locale
  • Russian Locale was updated by Saph1s
Error instructions ('What to do')
  • If character encoding is wrong in the database the user is instructed how to convert the charset of their MySQL.
  • If MySQL user is missing privileges, the user is instructed to give privileges to the user (Usually REFERENCES privilege is missing).
  • If SQLite has corrupted, the user is given instructions to restore the database, and a link to repair article.
----------, Aug 14, 2020

5.1 build 624 - Hotfix

Bugfixes
Fixed an infinite loop in the error handling code when an Exception had a cause (most exceptions)
There was an infinite loop in the error handling code that has been causing high CPU usage and OutOfMemory crashes.
The loop prevented the actual exception from being logged, and was a very dumb mistake in the code, that is easy to miss.
I should have originally written some unit tests, but at least they are here now, and the error handling code is confirmed to work properly.
----------, Jun 27, 2020

5.1 build 615
This build contains one new feature (IP whitelist) and bugfixes.
Special thanks to Elguerrero & MastoryMd5 for their contributions to this update

Change log
Commands
  • Fixed permission check issue with /plan unregister that allowed anyone to unregister any user by if they knew their username.
  • Fixed these commands from executing database queries on server thread:
    • /plan players
    • /plan network
    • /plan register
    • /plan manage raw
  • Fixed /plan inspect throwing an NPE when a player tried to view someone elses profile without 'plan.inspect.other' permisison
Error Handling
  • Crash due to OutOfMemoryException should now be resolved (The error handling should no longer consume so much memory)
Webserver
Added IP Whitelist
Config now contains Webserver.Security.IP_Whitelist and Webserver.Security.IP_Whitelist.Whitelist settings for whitelisting IP addresses that can access the webserver.

  • The whitelist is disabled by default
  • Default whitelist has IP addresses for local machine
  • When enabled all requests from non-whitelisted IPs will be forbidden (403)
  • Denied attempts are logged.
    [​IMG]
Database
  • MySQL Launch Options setting now has &serverTimezone=UTC by default (not added to existing settings automatically)
Locale
  • Spanish locale updated by Elguerrero
  • Italian locale updated by MastoryMd5
Placeholders
  • Fixed an NPE when a plugin gave PlaceholderAPI a null Player that was passed to Plan.
----------, Jun 19, 2020

5.1 build 600
This update has some bugfixes in it, and adds a deprecation warning for H2.
Special thanks to enterih & hallo1142 for their contributions to this update.

Changes
Database
  • Added a warning for h2 users: h2 will be deprecated in 5.2 See issue #1472
    • Added user and password settings for H2 that are separate from MySQL's. Because the old versions use same user and password as MySQL, you might need to copy the user and pass field over if using h2.
    • Fixed Moving data from H2 to MySQL.
  • MySQL connection improvements
    • Possibly fixed 'unknown timezone' error when connecting
    • Possibly fixed Plan not using the MySQL driver included inside Plan.jar
Webserver
  • Made logout links relative (Fixes logout for some subdirectory reverse-proxy setups)
  • Made /login?from=<link> link relative (Fixes login redirect for some subdirectory reverse-proxy setups)
Placeholders
  • Added %plan_sessions_unique_players_today% placeholder: Shows unique players for current day (based on timezone) while plan_sessions_unique_players_day shows last 24h
Errors
  • Fixed high CPU usage when an Extension ran into an exception
    • Extensions service no longer attempts again when an extension method fails.
    • Stacktrace logger duplicate line finding optimized to not use HashSet
Locale
  • Deutsch locale updated by enterih and hallo1142
----------, Jun 7, 2020

Change log 5.1 build 586
Here is an update with some improvements.

Special thanks to all contributors to this update; Fur_xia (Updates to Chinese locale), hallo1142 (Updates to Deutsch locale), itaquito (Updates to Spanish locale) Karlatemp (Bugfixes related to locale + async update check)

Change log
Website
  • Added a 'Hour by Hour' graph similar to 'Day by Day' graph to server and network pages. It displays hourly new players and unique players for the last 7 days.
Error handling
  • Error handling was rewritten to address the issue of large error log files. Now each exception is assigned an unique hash to avoid duplicates of same exception being logged.
    [​IMG]
    • Error context was added so that it is easier to solve issues
    • The context can also include "What to do" instructions to the user in case they can fix the issue themselves, in cases like File permission errors.
    • Up to 5 contexts are logged in order to avoid these log files from growing endlessly.
    • Error stacktraces are no longer logged to console to avoid console logs becoming large.
    • Default log deletion setting was reverted back to 7 days
  • Extension method disabling (if a method throws an exception) should now work properly
Locale
  • Chinese locale was updated by Fur_xia and Karlatemp
  • Deutsch locale was updated by hallo1142
  • Spanish locale was updated by itaquito
  • Some pages erroring when using a locale were fixed by Karlatemp
  • Some links getting translated was fixed by Karlatemp
Other
  • Update check is now performed asynchronously on enable (by Karlatemp)
  • A typo in a comment in ServerInfoFile.yml was fixed by aimorris
  • Registration information now expires after 15 minutes (Fixes a memory leak)
----------, May 29, 2020

Change log 5.1 build 563

This update contains bugfixes.
Special thanks to yukieiji, Saph1s & shaokeyibb for their contributions to this update.

Changes
Activity Index
  • Fixed activity index inconsistencies between player and server/network/players pages. The inconsistencies were due to the SQL ignoring weeks with no playtime, leading to higher activity index than supposed to. The issue was not caught earlier due to improper unit testing, but now the consistency is guaranteed with randomized data in the tests.
Website
  • Passwords that include characters &, = or ? can be used again
  • Login cookies now expire appropriately in the backend (Fixes a small memory leak)
  • HEAD http requests now return no request body
  • Network page serverlist scrollbar height increased from 60% to 85%
  • Fixed Ping graph colors not being applied
Locale
  • Added Russian (RU) locale by Saph1s
  • Japanese locale was updated by yukieiji
  • Chinese locale was updated by shaokeyibb
Other
  • A couple users have been reporting large error logs due to "MySQL Connection Pool is closed". As a remedy default log deletion threshold in config was reduced to 2 days. In addition some more timeouts were added to HTTP connections in IP2C geolocator in case the pool close is caused by a socket leak. Issue #1246 to improve error file logging was bumped to high priority.
----------, May 13, 2020

Login Page - Change log 5.1 build 545
This update changes how login and registration is handled when authentication is enabled (requires https to be set up). In addition, a lot of smaller changes also got into the update.

Special thanks to Catalina (Spanish locale), Creeperface01 (Nukkit PlaceholderAPI support), developStorm (Emphasized online sessions) & qsefthuopq (Chinese locale) for contributions to this update! :)

Change log
Website
  • Online and offline sessions are now distinguished on the website. Offline sessions have an outline and online sessions are emphasised. Original PR by @developStorm
    [​IMG]
  • Fixed several issues with page width and plugin tabs not being accessible when (No data) was in the title.
  • Changed session average to median on player page to reduce impact of quick relogs.
Added Login & Register pages
[​IMG]

This was one of the most requested features on the feature backlog and discord.
  • Login is now based on Cookies instead of Basic Authentication.
  • You can now logout without closing the browser using a button on the website.
  • Username and in-game name are no longer required to be the same for viewing own player page (permission level 2) - User needs to be linked instead (see below).
  • Registration page allows registering users without showing the password on the console:
Webuser - Player linking
Webusers and players now link together so that the username doesn't need to be same as their IGN. This is in preparation for an upcoming webuser permission overhaul.
  • PageExtension API now has a new method that returns the username. The existing method now returns the player's name or 'console' the account is tied to.
  • The user is linked upon registration, users can be linked to 'console' as well.
  • Existing users are automatically linked by matching playernames. If no match is found the user is linked to 'console'.
  • Note that this means permission level 2 users can no longer be registered via /plan register [pass] [name] 2. Guide the players to self register via the website instead.
More about why:
The new registration form on the page does not know about permissions of the player, and cannot force users to register with their IGN. The permission levels will be replaced with a permission system in the future, so the best effort solution was to link player uuid to the username when the player uses the register command in game. This allows the users to still access their own player page when they have permission level 2.

Commands
  • Added /plan unregister command for removing linked user
  • Added Active playtime and AFK time to /plan qinspect [player]
Database
  • Optimized query for playerbase activity grouping that is used for the graphs. This should speed up the loading for that graph.
  • Added online session playtime method to CommonQueries in Query API.
  • Fixed an unhandled deadlock error case
Locale
  • Added Spanish (ES) Locale made by Catalina
  • Chinese (CN) Locale updated by qsefthuopq
  • Fixed plugin tabs not being available when some locales were in use
Placeholders
  • Nukkit PlaceholderAPI support added by @Creeperface01
    The Placeholder API code was refactored and improved to support both Nukkit and Bukkit PlaceholderAPI with similar information.
  • Fixed plan_sessions_recent_peak_date placeholder not showing anything
DataExtensions
  • Fixed Litebans loading after Plan on Spigot based servers
  • Fixed Litebans /server table headers not matching content
  • Stoped logging any Buycraft API connection exceptions.
----------, May 7, 2020

5.1 build 505
This update fixes some corner case bugs and a security vulnerability in the password brute-force protection. More details below.

Change log
Data gathering
  • Fixed lag on some operating systems when gathering CPU load during high CPU activity by moving CPU, RAM and Disk Space gathering to a non-server thread.
Webserver
  • Fixed an issue when Authorization header was used for reverse-proxy (for basic authentication) with Plan authentication disabled. There was a code path that ran anyway due to an attempt to get the Plan user from the header that caused the header to count as a login attempt, leading to an eventual 403. Now that code path is sorted to not run if authentication is disabled.
  • Fixed an issue where failed login attempts were incorrectly counted, leading to a 403 error appearing on the main page after one failed login followed by a successful login.
  • Cleaned up the error page for blocked access 403 when css resources are also blocked (due to 3 failed attempts).
Fixed Security Vulnerability #1402 in password brute-force protection
  • Plan prevents login attempts for two minutes after failed 3 failed logins in order to make brute-forcing passwords more difficult. An oversight in how the failed login attempts were counted reset the counter after a successful response (HTTP 200 OK) was sent by Plan. Because .css files do not require authentication, bad actor could have automated their code to make a request for a .css file every 2 attempts.
    Fixed by properly detecting a successful login instead of using http status codes.
Charts
  • Fixed 'Czechia' not being counted on the map due to missing ISO code.
Plan recently reached over 200 stars on Github!
If you have a bug, don't hesitate to report it over here: http://bugs.playeranalytics.net - Thanks!
----------, Apr 18, 2020

More bugfixes to reported issues

Bugfixes
  • Fixed Html customized resources being overwritten & not being used
  • Fixed ERR_INVALID_REDIRECT when server.properties has empty IP
  • Possibly Fixed ERR_TOO_MANY_REDIRECTS with default server name
  • Fixed Some error pages not having css
  • Fixed /server/Server <bungee id> not redirecting to /network
  • Fixed ${serverName} appearing on some plugins tabs
  • Fixed ConcurrentModificationExceptions related to ResourceSettings
  • Fixed BuyCraft API 403 causing a bunch of errors to spew.
  • Fixed unfinished RedisBungee setup causing an NPE
----------, Mar 28, 2020

Bugfixes - 5.1 build 486 Change log

There was a pretty major regression bug in the last update that broke network page for anyone using a locale, so here is a bugfix release.
I decided to bash some other bugs while at it.

Change log
Locale
  • Fixed a bug with network page not opening when locale was in use
Extensions
  • Fixed BuyCraft Extension not registering
  • Set BuyCraft Request header and URL to use Tebex instead of Buycraft
  • Fixed extra plugin tabs not appearing on /server and /network pages if there were no other kinds of data
  • Fixed ${backButton} appearing on extension tabs instead of the button
  • Fixed ViaVersion Extension registering its listeners even when disabled
Exceptions
  • Fixed an SQL exception on join (plan_users Duplicate entry) on networks
  • Fixed an IllegalArgumentException related to network page export and ExportPaths
----------, Mar 26, 2020

Page Extension API - Change log 5.1 build 474
New
Page Extension API
PageExtension API allows adding new pages & script/stylesheet sources to Plan via an API.

The API consists of these services:
  • ResolverService - Allows adding HTTP request resolvers to Plan
  • ResourceService - Allows making web resources (files) customizable by the user
You can find the documentation here:
https://github.com/plan-player-analytics/Plan/wiki/APIv5

Change log
Database
  • (Networks) Clean task now takes into account the server the clean task is running for. This is to avoid one server with smaller removal thresholds removing data of other servers.
Data gathering
  • Added a config setting 'Data_gathering.Disk_space' default 'true', to disable disk space gathering - on some OSes the disk returns free disk space very slowly (10 seconds) leading to lag spikes.
  • Made free disk space use Space available to current user on Unix based OSes instead of Free space on disk, as the former is more important for proper functioning of servers.
Webserver
  • Webserver now uses the new API for request resolution. This refactoring was done to make sure that the new API was flexible enough to use.
Html Customization changes

The resources now need to be set as customized in the config under 'Customized_files' (The section should appear when the pages are viewed after the update). This is because the new API allows non Plan files to be customized. The resource will be placed the file to web/ folder inside the Plan folder when accessed (via the webserver) if the setting is true (false by default). If the file exists already it won't be overwritten.

If you have an existing customization in place you need to set each customized file to true, otherwise the customized file is not used.

Extensions
  • Fixed Plan enabling before plugins it depended on, like Litebans. (There was a typo in bungee.yml softdepends -> softDepends)
  • Fixed an issue with class loader on Spigot related to Essentials extension. (Some classes were loaded twice)
Export
  • Fixed an error with player html export when two players joined at the same time
If you have any issues please open a ticket
----------, Mar 21, 2020

5.0 build 415 - Change log
This is a bugfix release

Bugfixes
  • #1332 Fixed error in BentoBox Extension
  • #1333 Fixed common error with 'string_value' String truncation on MySQL.
    This was a regression bug due to my refactoring and affected multiple extensions that stored String values over 50 characters.
  • #1334 Fixed some issues with page loading with French locale
  • #1335 Delayed plugin extension registration to wait for all plugins to start up.
    Bungeecord sometimes ignores dependencies in the bungee.yml so this should fix some errors.
----------, Feb 23, 2020

5.0 build 410 - Change log

This update brings some bugfixes that have been ready for a while, I've just been super busy and haven't had time for releasing them.

In addition to this I've begun work on Page Extension API which will allow adding new pages to Plan by other plugins. This seems to be a pretty hefty refactoring of the whole request-response stuff in use on Plan to have a nice to use API, but it's getting there.

In other news, I'll receive the first Github Sponsors payment next month, thanks for the continued support!
I also paid for the discord-bot/nginx server for next 6 months thanks to the donations made through Paypal.

Would you like to support the development? Here are them links:
Change Log
Locale
  • French Locale was updated by @Nogapra, and double checked by Aurelien. Thanks!
Extensions
  • [New] Added BentoBox Extension.
    Supports AcidIsland, BSkyBlock, CaveBlock and SkyGrid. Gives similar information as ASkyBlock Extension, such as Island names, resets left etc.
  • [New] Added support for Vault permission groups.
    If using another supported permission system you can disable this separately from Vault economy in the Plan config.
  • [Fix] LuckPerms extension registration
  • [Fix] Vault Economy error when player doesn't have an account with Essentials Economy
  • [Fix] Formatted placeholders related to ping using the formatting setting. (23.321532135 -> 23.32 ms)
Export
  • [Fix] Fixed /players page JSON export
    the json was not loaded properly because of wrong address
Nukkit
  • [Fix] Fixed an error when player joined with Xbox Live without logging in. (Player UUID given as null)
  • [Fix] Fixed Nukkit register date gathering. (Nukkit gave seconds, Plan assumed milliseconds.) The incorrect register dates are automatically fixed after updating.
  • [Fix] Fixed Nukkit not recording player deaths and because of that also not recording player kills. (EntityDeathListener did not include Players, added PlayerDeathListener)
Logging
  • [Fix] Error case for EOF when reading Certificate now gives info how to fix the issue rather than a stacktrace.
  • [Fix] Error case for missing alias in Certificate now gives error message rather than a stacktrace.
  • [Fix] Fixed newer 1.15.2 Spigot builds warning about undecleared dependencies for AAC, Essentials & other plugins using javax.inject
----------, Feb 14, 2020

5.0 build 382- Change log

New
Added Webserver.Security.Disable_authentication setting
This setting allows disabling Plan authentication when https is set up, and it defaults to false to avoid previously secured servers from being exposed.

Added %plan_player_favorite_server% placeholder
Displays the same server name for the player who sees the placeholder as the one on the player page.

Bugfixes
Fixed SpongeForge crashing when using IP2C for geolocation
There Plan was using IP2C (fallback) for geolocation, it called HTTPURLConnection#setDefaultCaches(false), which apparently disables caches by default on all URLConnections, including JarURLConnections, that some mods used. The class loader freaked out which lead to a crash.

Fixed font awesome not being Exported properly
The files were exported as text, which malformed the font files.

Fixed periodic gathering task on Paper 1.8.x
The task assumed getTPS() method was available, but it was added to paper in 1.9
----------, Jan 24, 2020

5.0 build 367 - Change Log

Hello!
This update brings a big bunch of great bugfixes. Thanks for everybody who tested & reported bugs in the dev versions. Please note that you'll need to accept a new GeoLite2 EULA for Plan to download the geolocation database after the update.

If you're using Export I highly recommend this update as it fixes a memory leak in Html Export.

If you would like to support development, please consider becoming a sponsor.

Improvements

Optimized the periodic gathering task (#1289)
The task is used for gathering Online Players, TPS, CPU, RAM, Chunks & Entities and runs every 20 ticks.
The average run time was heavily optimized from 12ms to 0.15ms (98% reduction) with help of Paper timings. The task was also streamlined so it should have similar speeds on other platforms.

Japanese Locale was updated by yukieiji, thanks!

Bugfixes

Fixed GeoLite2 Database downloading (#1273)
On December 30th MaxMind made their GeoLite2 database unavailable without an account due to California law change, breaking the geolocation on Plan. This issue has been fixed in this version.

You need to accept the GeoLite2 EULA to use the database again - See 'Data_gathering.Accept_GeoLite2_EULA' setting
Plan will update the database from time to time
Additionally a fallback option was added that uses ip2c via HTTP. I recommend accepting the geolite2 eula, because ip2c doesn't support IPv6 and uses more resources than geolite2.

Plugins-tab fixes (#1260, #1276, #1286)
There were a couple of bugs with the "Plugins" tabs.
  • Fixed an issue related to some Extension tables not displaying at all.
  • Fixed plugin tabs that have large tables not filling the whole width of the page.
  • Fixed tab name always being "Plugins Overview" instead of plugin name.
  • Fixed tab names not including server name instead showing a dot.
  • Fixed wrong column names of Buycraft table
Export fixes (#1278, #1269, #1210)
  • Fixed a memory leak when using Export (some replacement lists were never cleared)
    • Fixed some player page export when the players shared parts of the name
  • Fixed names of exported server folders when server name had a space (on networks)
  • Fixed links of session accordion linking to UUID instead of player name (export saves player name pages)
  • Fixed links of "back" buttons not working appropriately with subdirectory URL (eg. /plan/server/)
Other small fixes (#1293, #1287, #1272)
  • Fixed too long weapon item names causing an exception
  • Fixed some words inside Javascript getting translated by Locale
  • Fixed missing hamburger on /players and /debug pages for mobile
  • Updated SQLite to 3.30.1
  • Updated MySQL to 8.0.19 & HikariCP to 3.4.2
  • Updated Font awesome to 5.12.0
  • Updated FullCalendar to 3.10.0
Direct any bugs to http://bugs.playeranalytics.net, thanks :)
----------, Jan 17, 2020

Year in Review - 5.0 build 335

This December marked 3 years of Plan development. It has been an interesting year.
Year in review post below, change log for this bugfix update at the bottom.


I was going to write about what was done this year, but that became a 2 page essay so I scrapped it. Then I tried to write about the amount of work that went into this year, but that turned into another long essay.

Long story short, this year I worked on 5.0 update almost every weekend from April to October. The work didn’t start in April, but February, when the redesign was only on the design table. Soon after 5.0 was released, some cool milestones were reached, such as over 1000 servers running Plan, Top 30 of Spigot plugins by Rating and Plan also appeared in the background of LinusTechTips video for a few seconds. Removing installation roadblocks for minigame networks was also successful. (I know this because someone got a Bungee server with 925 Plan servers in the database soon after the update according to bStats).

This recap is going to be a bit more personal this time, because while doing this review I realized that I've felt burnout creeping in for some months now. It makes sense, considering that Plan development has been almost half-time job on top of university studies. On 14th I started Christmas vacation from Plan Discord support and after a few days off, the symptoms seem to have subsided. - I think changes are needed next year when I'll come back after new years.

You gave some awesome feedback and positive words in the satisfaction survey though! The average for How well did we do this year? was a whopping 9.2/10. Overall satisfaction also increased from 8.2 to 8.7 from last year. I’ll address some of the things that were brought up here:
  • The settings for data removal are not clear - you need to change stuff under Time.Thresholds on all servers to prevent unwanted removal of data. At least /Plan/serverConfiguration helps with this somewhat until better grouping of the settings.
  • High Memory usage - This has been reported only by some users, so I suspect that it is due to Plugin integrations. If you’re having a large memory usage try disabling all Extensions in the Plan config (bonus points if you can figure out which one it is and report it)
  • There was a suggestion to track custom PAPI placeholder values over time - Sounds like a good idea to keep in mind. This would need some additions to the DataExtension API, as currently dynamic data or graphs are not supported.
The survey and I seem to be on the same page on where to focus on next: Extensibility and Extensions. Performance optimizations came in 3rd spot. I'll probably keep January off from development while figuring out sustainable form of support, so that’s what will be on the menu when I get back on the horse.

I hope to see you when I get back. Thank you for amazing 3 years and hopefully many more to come.


New

Added Access-Control-Allow-Origin option for Webserver (#1251)
CORS (Cross-Origin Resource Sharing) was preventing Plan data to be used on custom websites. To allow Plan data be used on other pages (for online graphs and stuff), config setting Webserver.Security.CORS.Allow_origin added with default value '*'.

Bugfixes

Punchcard bugfixes
  • Fixes Punchcard not using the TimeZone specified in config (was using server timezone) (#1250)
  • Punchcard now displays from 12 am to 11 pm. Previously it showed from 1 am to 00 am. (#712)
Relative path to session buttons by @jyhsu2000
  • Fixes the Player page and Server page links inside sessions when Plan is behind a reverse-proxy using a subdirectory (eg. www.something.com/plan/)
----------, Dec 21, 2019

TimeZones & Nukkit Support - Change log 5.0 build 309

New

Implemented a better TimeZone setting (#718)

Previous setting only allowed UTC or server timezone. New Setting Formatting.Dates.TimeZone accepts timezone formats like 'GMT+2', 'GMT-05:30', 'UTC' and 'server'.
Time.Use_server_timezone will be removed automatically when Plan enables and the new setting is set to 'UTC' or 'server' based on the value.

Implemented Nukkit support (#1020)
Plan now runs on Nukkit servers (Bedrock Edition). Unfortunately I could not test everything because I don't have Bedrock Edition at the moment. Please report any issues you have to http://bugs.playeranalytics.net

Bugfixes

Fixed session save appearing stuck (#1241)
A previously solved issue where Extension transactions took a long time on shutdown was prevented by save of unfinished sessions, leading to execution of all transactions on disable. This made the message "Saving unfinished sessions.." appear stuck. Fixed by removing the wait and allowing unnecessary transactions to be skipped again.

Fixed 1-day delay in Server Calendar with negative GMT Timezones (#1239)
A bug in the date preparation for FullCalendar caused TimeZone offset to be applied twice, moving negative Timezone dates to the previous day. Fixed by removing the offset from the calendar's date formatter.

Fixed some JSON creation using wrong timezone

During timezone implementation a bug was accidentally discovered. The bug might have caused some wrong groupings in Day by Day graph, but this was not confirmed. Fixed by removing
PlanConfig#getTimeZone calls in different constructors.

Fixed /plan register (no arguments) saying no permission instead of not enough arguments.
Added a check against no arguments

Development

Automatic build numbering for Gradle
Modified gradle configuration to automatically determine build number so that the manual step does not break flow. Build command changed from gradle shadowJar to gradle build.

Renamed some files and methods
  • Many Webserver classes with Handler in their name were renamed to Resolver to make things cleared.
  • Use of word Parse was changed to Build, Create, Generate where the word was used incorrectly. 'parse' refers to extracting information, while in Plan it was used like the Finnish word 'parsia' (to patch together) which was incorrect.
----------, Dec 8, 2019

5.0 build 292 - Change Log
This is a bugfix release.

Bugfixes
Fixed player register date being incorrect on Networks
A bug introduced in build 279 (In Minimize register dates-feature) caused the register dates to be maximized, leading to player's most recent register date on spigot/sponge servers being used as the register date on networks.
  • Fixed the source of the bug by flipping a '<' to '>'
  • Added a database patch that corrects the incorrect data (Since the register dates for each server are correct it is possible to fix the data automatically)
  • Added a test for the patch
Fixed player page session sorting
Session list on /player page was not correctly sorted, so sometimes non-recent sessions were present on the list. Now it is sorted correctly.

Fixed Exceptions related to Luckperms extension
Luckperms 5.0 revamped their API, so changes to the extension were necessary to use the newer API. I'm not sure if I used the new API correctly so some incorrect info might show up.
----------, Nov 30, 2019

5.0 build 288 - Hotfix

Hotfix for some bugs (one new, one old)

Bugfixes
  • @Vankka helped fix DiscordSRV Extension not registering
  • All Platforms should now use newer MySQL driver that is inside Plan. This should fix incompatibilities with MySQL 8 (for example fix "Unknown system variable tx_isolation")
I did not test the MySQL 8 compatibility because having 2 different mysql installations is cumbersome, let me know if it works (Tested with Mariadb 5.6).
----------, Nov 16, 2019

5.0 build 286
Bugfixes
  • @Vankka has updated DiscordSRV Extension so the integration should be fixed (And IllegalStateExceptions cease)
  • Exported player pages should now display their values properly
  • Player pages should show value loading issue errors properly
----------, Nov 15, 2019

5.0 build 279 - Change Log

This update contains some new features and bugfixes.
Special thanks to Malachiel and Combustible for their contributions.

In other news, I got into Github Sponsors program and Github will match all funds given through the platform. (= x2)

If you would like to support the project and get some perks while doing so check out https://github.com/sponsors/Rsl1122 - Thanks :)

New
  • #1211 Added 'Median First Session Length' to Online Activity > Insights
    • This statistic can give more feedback on new player experience in addition to the existing 'Mean First Session Length' statistic
  • #864 Added 'Average Ping' to Sessions on /player page where possible
    • This statistic helps verifying latency issues. It would unfortunately take too much memory to produce this statistic for /server page so it is limited to /player page.
  • Register date is now made smallest possible value on networks (To avoid pre-Plan players appearing as 'New players' after installing Plan)
  • Italian Locale (IT) by Malachiel
  • 0.0.0.0 as address now produces a warning on enable (It is not a valid address).
Bugfixes
  • #1212 Fixed a Deadlock issues with plan_user_info table
    • Future deadlock issues will retry instead of failing instantly
  • #1209 Player server specific playtime placeholders should now update if the player is online
  • #1215 Fixed Plan attempting to use Authentication of Nginx when HTTPS was disabled on Plan
  • #1210 Changed redirects to /server/ to point to /server/ServerName instead
  • #1216 Fixed /network Playerbase Development graph containing duplicate players
  • Combustible fixed issue when Plan config directory was a symlink
If you have any issues be sure to open a ticket at http://bugs.playeranalytics.net or join the Discord http://support.playeranalytics.net
----------, Nov 10, 2019

5.0 build 260 - Change Log

Thanks for using Plan - bStats is reporting that there are over 1100 servers using Plan, that's huge. ❤️

Did you know that work on Player Analytics 5 started back in April this year (6 months ago)? Now that it has been out for a few weeks, I have realized how much work actually went into it! I hope that it was worth it.

Build 260 brings more fixes to reported issues.
Bugfixes
  • Fixed time formatting in player placeholders
  • #1196 Fixed NucleusExtension error on join (Caused by class relocation in Plan)
  • Fixed NPE when player has no sessions (And favorite server can not be found)
  • #1200 Fixed Export not exporting players due to BadRequestException
  • Fixed Extension data not being inserted due to 'Subquery returned more than one row' on MySQL
  • Fixed /network#tab-servers displaying Unique & New Players for last month instead of last 7 days. - Also reduced the Quick view Online player graphs to last 7 days to reduce loading time.
If you have any issues with this build, be sure to open a ticket at http://bugs.playeranalytics.net or join the discord: http://support.playeranalytics.net - Thanks :)
----------, Oct 25, 2019

Change log 5.0 build 249

New
  • EssentialsX Extension now supports Essentials Economy (Thanks to Vankka)
  • Added GriefDefender Extension by Vankka
Improvements
  • Removed comment from config over 'Webserver.Disable_Webserver' (Outdated)
  • Disabled Webserver no longer prevents Enable on Bungee/Velocity
  • Webserver prints proper error message for BindException
  • JSON request timeout increased: 20s -> 45s (#1185)
Bugfixes
  • #1161 Prevented Memory related crash caused by use of CoreProtect API (Disabled CoreProtect Extension for now)
  • #1183 Fixed SQL errors when using H2 (Related to some non-standard SQL)
  • #1181 Fixed SQL error with MySQL related to AVG() function
  • #1191 Fixed page failing to load when Server name had a single quote in it (eg. Ralph's server)
  • #1195 Possibly fixed exported network page having bad server links
  • #1194 Possibly fixed exported Flaticon_circle.png being set to 0 Bytes on second write
  • Fixed Exception when exporting unregistered player on join
  • #1176 Fixed Exception when updating DKBans data without player UUID
  • #1192 Fixed StringIndexOutOfBounds related to AdvancedBanExtension
  • #1196 Possibly fixed NoSuchMethodError related to NucleusExtension
----------, Oct 19, 2019

Player Analytics 5
This is the largest update to the plugin to date, accomplishing a long time goal that makes life of network admins a lot easier (more on that down below). Here is a release trailer to get you hyped up:



Existing configurations should work after updating to this version, here is Migration guide to Version 5

Extra special thanks to Beta testers who have ensured that the release goes smoothly. I would also like to thank Vankka, aidn5, Aurelien, yukieji & qsefthuopq for their contributions that are released in this update & mibby for allowing me to use Plan of his server for promotional materials.

What's new
Redesigned Panel
[​IMG]

The panel has had a complete overhaul.

Benefits from the redesign:
  • Separate analysis process is no longer required, the data is analyzed and delivered on the spot.
  • Data is accessible from a single Webserver (Even on networks) so other webservers can be disabled.
  • Data and pages can be cached separately & the data updated when events fire
  • Memory usage has significantly improved
  • JSON is used to transfer data instead of the html file, improving load times
Changed Activity Index formula
Activity index formula was rewritten to be easier to explain and understand.
It is based on playtime per week for last 3 weeks, where the threshold value in the config affects the activity index.

Here is an image of the curve where y is the activity index and x is playtime per week divided by threshold.

[​IMG]

  • If someone plays as much as threshold every week, they are given activity index ~3
  • Very active is ~2x the threshold
  • The index approaches 5 indefinitely.
Panel features
Here are some new features that are introduced with the panel redesign.

Night Mode
[​IMG]

Night mode can be toggled from the theme selector.

Trends & Insights
[​IMG]
[​IMG]

Server Health has been split into Trends (little red & green arrows on the panel), and Insights that attempt to uncover more knowledge from the data.

Insights and Trends have been placed closer to the related section to give a better overview.

Server Quick View (Networks)
[​IMG]

You can now view the last 7 days for a server without going to Server Analysis. Mant more features from Server pages are also now available for the whole network, such as the Day by Day graph (Unique & New players / Day)

Long term goal: Removal of proxy<->server connections
Set-up on Bungee has been a large hurdle for many due to the Webserver being required on all servers - No more! The proxy<->server connection system has been removed, marking a long term goal complete.

Now you can easily set-up more servers on Bungee & Velocity networks just by connecting them to the same MySQL. Their webserver will disable automatically after a reload when the proxy is detected in the database, saving resources.

Export improvements
Pages of the whole network can now be exported on the Bungeecord or Velocity servers on networks. The system was refactored to be easier to maintain in the future.

Package restructuring
Since the major version is increased I took the opportunity to restructure the package structure, separating objects that represent gathered data and objects that represent data in the database. This might break other plugins using internal classes such as SessionsMutator.

API version 4 (PlanAPI class & related classes) have been deprecated, but have not moved.

  • PlanAPI#fetchFromDatabase has been removed.
  • Schema: plan_ips table renamed to plan_geolocations, ip & ip_hash columns removed.
  • Schema: plan_commandusages table removed
Plugin Support changes
  • Added PlaceholderAPI support, thanks to aidn5 for his work on this.
  • Added Extensions for DKBans & DKCoins, implemented by Vankka
  • PluginData API has been decommissioned and its users will get a no-op warning on the console.
    • BuyCraft, Factions, Jobs, Litebans & Towny were moved to DataExtension API. Some of their old features were not possible to be moved over, but graphs and accordions will return in the future.
Fixes
  • #603 Activity index will no longer cap out at 3.04 for new players
  • #840 [Vulnerability] XSS attack using Bungee-Bukkit connection system is no longer possible (Connection system was removed)
  • #938 "Refreshing analysis" page no longer displayed when viewing server page
  • #964 Server JSON end point removed
  • DataExtension API Tables' values can now be up to 250 characters
  • #1167 RedProtect extension fixed for Sponge
  • #1161 CoreProtect extension should no longer cause a crash
  • #1131 Disabled extension's data is cleaned after configurable time (default: 2 days)
  • Many more that were not reported on Github.
Versioning scheme change
The previous semantic versioning has been very non-semantic - so the main benefit of knowing when things break has not really been there.

With the incrementation of major (4 -> 5) it is clear that the version contains breaking changes (For other plugins).

I want to convey useful information to both developers and users alike, so this version is 5.0 ALPHA build 1

The new scheme is major. minor build build

major will change when Plan API (currently version 5) has breaking changes & needs new documentation.
minor will change when new features are introduced.
build will increase with every commit, such as bugfixes and other improvements.

The new scheme removes confusion from dev release versioning as well.

Would you like to support the project more? Consider donating on Paypal
----------, Oct 5, 2019

Bugfixes
  • Optimized Sponge AFK Listener permission check
  • Fixed FileWatcher ConcurrentModificationException (Related to config updating on networks)
    • Also prevented similar issue with Session Cache
  • Disabled SQLite Transaction rollbacks on Spigot 1.8.8 or older (Not supported, were causing exceptions)
----------, Aug 21, 2019

4.9.3 Change log
New
  • ViaVersion Extension now supports Sponge
  • #1135 AdvancedBan Extension now listens for punishment events (Updates status for offline players)
Fixed Bugs
  • #1137 Some extensions no longer cause an SQL Exception when database is being cleaned of old players
    • Query API event subscribers no longer cause player removal to fail.
  • #1134 Reduced chance that a built in extension failing to load prevents Plan from enabling.
----------, Aug 12, 2019

PKCS12 Certificate support - Change log 4.9.2

New
PKCS12 Certificate support (#1102)
Now you can use .p12 SSL Certificate files directly with Plan! No more keytool! Just make sure the file ends with .p12.

Here is the command for creating .p12 from Let's Encrypt cert in case you need it :)
Code (Text):
> openssl pkcs12 -export -in /etc/letsencrypt/live/<domain>/fullchain.pem -inkey /etc/letsencrypt/live/<domain>/privkey.pem -out /etc/letsencrypt/live/<domain>/pkcs.p12 -name <alias>
After entering the command you'll be prompted for key password and store password. This should make https more accessible to people, since it drops required steps for obtaining a keystore.

Bugfixes
  • #1123 Fixed exception on first boot with nuVotifierExtension
  • #1124 Fixed exception when player joined and both ProtocolSupport & ViaVersion were in use
  • #1125 Fixed tasks not unregistering on Velocity when reloading Plan
Dev Stuff
I have done some cleaning of the development process. There is still some work to do, but it will allow faster release cycle once it is all ready.
  • #926 Started moving CI service from Travis CI to Jenkins
  • #993 Fixed Javadoc generation
  • Updated github issue templates & added a plugin suggestion template
  • #1110 Updated some Database tests to JUnit 5
  • Added a pre-commit checkstyle git hook thingy
  • Shaved ~50% of build/test times off with gradle --parallel flag.
----
As always if you are having issues feel free to open a ticket on Github or Join support on Discord
----------, Aug 9, 2019

4.9.1 Hotfix
  • #1121 Fixed Plan failing to enable when nuVotifier was installed
----------, Aug 2, 2019

Query API - Change log 4.9.0

Another step towards removing proxy<->server connections, plugins using database have been moved to using the new APIs.
If you are using Plan database, or internal classes such as SessionsMutator for playtime, it is recommended that you move to using the new Query API.

In addition this update brings nuVotifier support & bugfixes
New
  • Added a new Query API for accessing Plan Database. This allows moving plugins that don't store data away from PluginData API. Documentation
  • Moved AAC, ProtocolSupport & ViaVersion to DataExtension API.
  • Added nuVotifier support (Votes & Votes/Service)
Bugfixes
  • Fixed plugin loading on Sponge (there was module-info.class in the jar)
  • #1116 Fixed integration issue with old AAC versions
  • #1118 Fixed massive error spam if a DataExtension method call failed - Now it removes the method from being attempted appropriately.
  • #1119 Fixed NPE on Proxy platforms when displaying longest played world on session accordion
  • Fixed color parsing (§ -> <span>) eating first character of some Strings.
  • Database clear command now reloads the plugin after successful clear.
If you run into issues feel free to open a ticket https://github.com/plan-player-analytics/Plan/issues/new/choose or join discord for support https://discord.gg/yXKmjzT - Please use tickets for exceptions.

Thanks!
----------, Aug 2, 2019

4.8.8 Change Log

Changes

  • Deprecated PluginData API, users of this API are encouraged to move to DataExtension API as soon as possible. API documentation
  • Deprecated /server/raw webserver endpoint
  • Moved SuperbVote from PluginData API to DataExtension API
  • Changed default database type back to 'SQLite' due to severity of rare issues with h2.
  • Prevented /plan m move between h2 and MySQL due to a bug (#1111)
  • Removed Kingdoms plugin support (Free API no longer available as it has moved to Songonda)
Bugfixes
  • #1101 Fixed an NPE when a geolocation did not have a country name
  • #1103 Fixed SavageFactions incompatibility
  • #1104 Fixed AAC 4.0.0 API usage
  • Fixed IPAnonPatch on MySQL with sql_mode=only_full_group_by
----------, Jul 25, 2019

New
  • #739 Added MySQL Driver to Plan (Full Velocity support)
Bugfixes
  • #1089 Fixed error on Analysis when a World_aliases world name had a dot in the name
  • #1090 Fixed command registration when plugin failed to enable (To allow reload)
  • #1095 Fixed some database altering commands sending "Success" message too early (web delete, manage remove, manage clear)
----------, Jul 11, 2019

New
  • Turkish Locale by TDJisvan, Plugin.Locale: TR
  • Portugese (Brazil) Locale by jvmuller, Plugin.Locale: PT_BR
  • /plan register command now displays link to the panel after successful register. (The link will redirect based on the user's permission level)
Bugfixes
  • Version names for ViaVersion & ProtocolSupport now use the plugins' naming utility, no more out of date version numbers! :) Special thanks to @Vankka for doing the research on this.
  • #1062 Fixed Chunk graph displaying data for the CPU graph
  • #1066 Fixed NoSuchFileException on Export of players table json when the folder for the server doesn't exist
----

Sorry for the delays on this one. :)
----------, Jun 22, 2019

Change log 4.8.5

Bugfixes
  • #1041 Fixed "CapabilityService has not been initialized yet" Exception
----------, May 28, 2019

Bugfixes

Fixed a IllegalArgumentException: class com.djrapitops.extension.DiscordSRVExtension method guildUsers could not be called: null

This was a stupid mistake on my part, since it was an exception that was not supposed to be logged. I did put a catch for the exception (NotReadyException), BUT since the method that throws the error is called via Reflection ( method.invoke) the error was wrapped to InvocationTargetException, causing it to be logged. Well now it's fixed.

----

In other news:
----------, May 14, 2019

Bugfixes
  • Fixed DataExtension columns appearing multiple times in the /server Players table.
  • #1039 Fixed SQL error when using h2
  • @Vankka fixed issue with DiscordSRV integration, thanks!
  • Fixed issue with Vault integration when another plugin incorrectly shaded in Vault classes
  • Fixed issue with mcMMO integration when using older mcMMO version by disabling integration with the older versions
Minor additions
  • DataExtension API users can now throw NotReadyException if their API is not ready for a Provider method call.
  • DataExtension API Provider annotations now have 'showInPlayerTable' parameter
If you run into issues feel free to open a ticket https://github.com/plan-player-analytics/Plan/issues/new/choose or join discord for support https://discord.gg/yXKmjzT - Please use tickets for exceptions.

Thanks!
----------, May 12, 2019

1.14 Support, Locales, DataExtension Tables - Change log 4.8.2

New
1.14 support
  • #1012 Fixed Plan not enabling on Spigot 1.14
    • #1029 Fixed bStats task breaking reload
Locale updates
  • Added Japanese (JA) by yukieji
  • Improved Simplified Chinese (CN) by qsefthuopq
  • Added French (FR) by Aurelien
DataExtension Tables
  • DataExtensions can now display table data with TableProvider annotations
  • /server page players tab now displays DataExtension data as well.
    • Viewing exported html now requires a web service. (The players table is now delivered using JSON. The json being loaded via XMLHTTPRequest, and that does not work properly with file:// protocol)
  • Added a CapabilityService for future additions to the API.
  • Updated documentation here: https://github.com/plan-player-analytics/Plan/wiki/APIv5
New settings
  • Time settings for clean up of time series and ping data.
  • Setting to disable Ping gathering
  • Default database changed to H2 for new installs due to SQLite not working properly on 1.8.8 anymore
Ported PluginData to DataExtensions
  • ASkyBlock, GriefPrevention (Bukkit+Sponge), GriefPreventionPlus, mcMMO, Nucleus, RedProtect (Bukkit+Sponge), Vault Eco
  • Removed some old PluginData implementations that have been implemented as Extensions
Removed IP Hashes from the database
  • Removed IP Hashes from the database due to concerns over rainbow table related hash resolution of stored IPs from the hashes.
Bugfixes
  • [Analysis] #1017 Fixed a query related to DataExtensions
  • [Plugin Startup] Reduced reliance on platform class exists checks that were causing compatibility issues with plugins that incorrectly shade in platform (eg bukkit, bungee) classes
  • [Export] #1019 Fixed Network page exporting
  • [UX] Fixed incorrect error displayed when player was not found
  • [PluginData] #1027 Fixed Error related to AAC database table
  • [DataExtensions] Fixed DataExtension @tab annotation not working
  • [DataExtensions] Fixed Exception handling of DataExtensions
  • [Performance] #1034 Tasks with too large delays are now cancelled instead.
If you run into issues feel free to open a ticket https://github.com/plan-player-analytics/Plan/issues/new/choose or join discord for support https://discord.gg/yXKmjzT - Please use tickets for exceptions.

Thanks!
----------, May 10, 2019

4.8.1 Change log

Bugfixes
  • #991 Fixed customized file loading from plugin folder (Html Customization)
  • #992 Added a color to tps and disk graph labels
  • CoreProtect API v5 (1.8 - 1.12) now supported.
  • #994 Fixed player calendar showing UUIDs instead of player names of killed players.
----------, Apr 7, 2019

DataExtension API - Change log 4.8.0

This update brings a new API that is eventually going to replace PluginData API. This replacement is necessary, as the old API is one of the limitations that still need Bungee-Bukkit connections. If you're interested, a roadmap has been added on Github: https://github.com/orgs/plan-player-analytics/projects/1

In addition some bugs have been squashed. Special thanks to Vankka and Skmedix for helping me out with some gradle stuff.

Support development: https://www.paypal.me/Rsl1122
Rating the plugin and giving the project a star on Github also helps :)

New
  • New Plugin support: CoreProtect, Minigameslib
  • DataExtension API
    • Annotation based API that allows storing plugin data in Plan database.
    • API Documentation: https://github.com/plan-player-analytics/Plan/wiki/APIv5
    • PluginData (Old API) will appear with (Legacy) label on the web panel since it is not possible to do all the functionality with the new API yet. This will be removed once all functionality can be ported over. In the meanwhile both will function side by side.
Bugfixes
  • #922 Fixed config.yml having wrong defaults on Sponge in some cases
  • #982 Fixed Login Prompt not appearing on iOS devices
  • #966 Fixed MySQL transaction timeout error on Clean task
  • #967, #956 Cleaned up duplicate data in 'plan_user_info'
  • #979 Fixed Exported /player-page js & css links
  • #971 Use_server_timezone should now properly affect Recent days formatting ('Yesterday') and Calendars
As always if you are having issues with the update, please report issues on Github ( https://github.com/Rsl1122/Plan-PlayerAnalytics/issues) or join Discord for support ( https://discord.gg/yXKmjzT). Thanks
----------, Apr 5, 2019

4.7.2 - Change log

New
  • /plan manage export command for exporting all player pages/json.
  • Added Export.Export_player_on_login_and_logout setting for exporting Player pages/json on login & logout based on the other settings.
Bugfixes
  • Fixed a Duplicate key error on Analysis
  • Fixed Server UUID NPE on enable
  • Prevented/Fixed some unsupported key errors
  • Solved a server hang on updating Server UUID in the database
  • Solved player pages/json not being exported
  • Fixed json export failing when player name contained a '/'
If you are having issues with the update, please report issues on Github ( https://github.com/Rsl1122/Plan-PlayerAnalytics/issues) or join Discord for support ( https://discord.gg/yXKmjzT). Thanks
----------, Mar 10, 2019

4.7.1 Change log

Bugfixes
  • Fixed ParseException related to WorldMap (Caused both /network and /server page to fail)
  • Fixed Server JSON export
  • Fixed SQL errors related to World Times
As always if you are having issues with the update, please report issues on Github ( https://github.com/Rsl1122/Plan-PlayerAnalytics/issues) or join Discord for support ( https://discord.gg/yXKmjzT). Thanks
----------, Mar 6, 2019

4.7.0 - Database Code Restructuring | Change log

This update brings some database stability changes as well as various fixes

Fixed Security Vulnerability
  • Fixed a brute force vulnerability of the Plan web panel by adding a 90s delay after 5 failed login attempts from a certain address.
Improvements
  • Database code restructured
    • Everything that updates rows in the database is now using Transactions. This allows automatic rollbacks of failed transactions (such as a failed patch)
    • Transactions are now performed on their own thread to remove single-server deadlock possibility.
    • Queries & Transactions wait before patches are applied (This is to prevent tons of exceptions)
    • Sponge now uses same HikariCP as other server implementations. (Should prevent some issues with connection leaks)
  • Some Query memory optimizations
    • Sessions of other servers are no longer fetched to memory when doing analysis on network server
    • Sessions, WorldTimes and PlayerKills related to the sessions fetched with single query instead of 3.
    • All users no longer fetched when analysing a network server
  • Sessions are now saved on server shutdown if possible. (ínstead of JVM shutdown) Special thanks to @Fuzzlemann for his research on this.
Bugfixes
  • Commands and web panel now notify user if the database is not open.
  • Servers no longer generate same ServerUUID when Plan is installed
  • Fixed login message displaying '/'
  • Fixed /server page "back" button on networks
  • Fixed concurrent modification related to FileWatcher (Network config update system)
  • Attempt to fix databases that fail on KillsOptimizationPatch
  • Attempt to fix timeout error on network servers when viewing /server pages
As always if you are having issues with the update, please report issues on Github ( https://github.com/Rsl1122/Plan-PlayerAnalytics/issues) or join Discord for support ( https://discord.gg/yXKmjzT). Thanks
----------, Mar 3, 2019

4.6.2 Change log
Bugfixes
  • Fixed a bug where MySQL did not like a GROUP BY statement
  • Fixed /network page appearing buggy when no Bukkit/Sponge servers were connected
  • Fixed Litebans table prefix issues
  • Page now scrolls to the top when switching tab ("Information", "Server Health", etc)
----------, Feb 4, 2019

4.6.1 Change log
Bugfixes
  • Fixed Dagger version conflict with AdvancedAchievements
  • Fixed ParseException on /network page related to Show_on_server_page setting
  • Fixed ParseException on /player/ pages on networks when the player was online
  • Updated ViaVersion protocol versions (404 -> 1.13.2)
----------, Jan 19, 2019

4.6.0 | Configuration Enhancements - Change log
[​IMG]

This update brings improvements to configuration, first batch of database optimizations as well as some much needed bugfixes. It took a while as more bugs kept popping up.

Special thanks to contributors and everyone who reported issues with the DEV releases. :)

New
Configuration revamp
  • Configuration format has been cleaned up to reduce confusion.
    In order to keep old configs compatible, config patching was written. The new format should still hold the values of your old config after the first enable.
  • Config values are now validated, and invalid values will error instead of silently failing.
Network-Server Config overhaul
  • In order to make life easier for network owners, server configs will now be copied to /plugins/Plan/serverConfiguration.
    Any change on the other side will update the config on the other side.
    This is achieved via the database, so there is a slight delay on the updates.
    The "Server" section was removed from the main proxy config.
Database indexing
  • Database structure was flattened to reduce the amount of JOINs needed. This will reduce CPU usage with a small disk space usage increase.
  • Database indexes were created to optimize lookups in tables, which should improve query performance.
Other
  • There is now a "back" link on top right corner of /player and /server pages (on networks)
  • JSON files can now be exported. Export config settings also provide more fine grain control.
  • Added PlanEnableEvent that is called when Plan enables or reloads. Following events are available:
    • Bukkit: PlanBukkitEnableEvent
    • Sponge: PlanSpongeEnableEvent
    • BungeeCord: PlanBungeeEnableEvent
    • Velocity: PlanVelocityEnableEvent
  • /player/name and /player/name/raw can now be accessed via /player/uuid and /player/uuid/raw
  • PlanAPI#fetchFromPlanDB has been deprecated
  • Player links are now opened in the current tab by default.
  • Memory debug logging now based on Plugin.Debug setting - Now supports combined values eg "file, console, memory" for logging to all 3 possible places.
Bugfixes
Empty config values
  • A bug was present in 4.5.2 that caused default values not copying for some settings on new installs.
    One of the settings was AFK Threshold, which meant that every session was being marked as 100% afk. The empty values will be correctly copied when this update has been installed.
  • To make the data gathered with bad afk thershold viable, first enable will reset AFK time on sessions with 100% afk time to 0.
Other
  • @MicleBrick Fixed an error on enable if running Java 11 or newer
  • Fixed SQLite patching on Spigot 1.13.2
  • Fixed Geolocations: false resulting in an NPE
  • Fixed an error being logged when /plan register was given bad arguments
  • Fixed "Active Players might be running out of things to do" times being flipped
  • Fixed ClosedByInterruptionException spam
  • Fixed errors on server shutdown related to ShutdownHook
  • Attempt to prevent NPE related to GriefPrevention
A lot of time was spent on writing tests that ensure smooth sailing between 4.5.2 and 4.6.0 update, including config patch tests as well as database patch tests for all databases.

Plan is now built using Gradle!

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Jan 17, 2019

Plan - Year in review
It’s been two years! I want to take this opportunity to recap what has happened during the last year and look a bit into what the future looks like.

The change log for this update is at the end of the post.

----

The year started with a bunch of bugfixes after the 1st anniversary update. Most crucial piece for bungee-bukkit set-ups was rewritten. It had some flaws, but in April these flaws were patched, along with new features such as the session calendar.

Along came effective date for GDPR and a bunch of changes to ease people’s minds. At the same time Sponge support was rolled out. Now Plan supported all server platforms from 1.7 bukkit to SpongeForge.

A lot of small improvements here and there, and in July a big change in how the data-analysis was written in Plan. This made it a lot easier to add data, so Ping gathering was added in the same update, with a bunch of other neat things like Geolocation bar chart and PvE PvP tab.

A lot of weird issues started popping up every now and then. Database was being closed, webserver wouldn’t respond, server would crash. It took two months of changing one big part at a time until the issues were solved, as it turned out, an outbound HTTP connection in Java required some system properties to close properly. I actually made a write-up of the process of finding this bug here.

Locale system was updated, and many people contributed to the code! It was amazing to see. A lot of 3rd party plugins were now supported by Plan.

In October I worked on technical debt, cleaning up the code and recently I have been working on test automation and project aspect, cleaning up issues and what not.

So what about the future?

The next long term goal is to improve memory performance, especially on large servers. Current design stores everything in memory while performing analysis, and that is extremely taxing. Effort will be made to do as much work with SQL, as well as working through things in smaller batches.

Once the performance is deemed good enough, the bungee-bukkit webserver connection will be the next target. The connection appears daunting to users, and limits how minigame networks can use Plan. In order to remove the connection, analysis will be moved to a single server and plugin data will have to follow.

This means that a big rewrite for PluginData is required. These are changes that require a lot of hard work.

I will be finishing my Bachelor’s degree in Computer Science in the next 7-8 months. This project has allowed me to practice a lot of things. Thank you.

Change log 4.5.2
  • New added 30d 7d 24h disk statistics to performance tab
  • Fixed /plan m import not listing any importers (Bukkit)
  • Fixed SQL Syntax error on BungeeCord servers with not Bukkit servers connected
  • Improvement All platforms are packaged in single jar again.
----------, Dec 2, 2018

This update brings some improvements and bugfixes to bugs that slipped into 4.5.0 release.
Special thanks to @Fuzzlemann and @Sprungente for contributions! :)

New
  • H2 database support by Fuzzlemann, you can use /plan m move sqlite h2 to migrate your current database.
Improvements
  • German locale improvements by Sprungente
  • Small performance improvements to decimal formatting & medians by Fuzzlemann
  • Large performance improvements to /server/raw/ (Server data JSON) by Fuzzlemann
Bugfixes
  • Fixed issues with logging in on servers when Plan and ViaVersion were both installed on BungeeCord
  • Fixed issue where TPS was 0 on Spigot & Bukkit
  • Fixed sessions not being saved on server shutdown
  • [Unit tests] Several issues with test flakiness (JVM crashing / flaky db test) fixed by Fuzzlemann.
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Nov 4, 2018

Autumn Cleaning - Change log 4.5.0

This update brings some big changes to the code base, removing a lot of technical debt in the process. This will help writing more tests in the future.
In addition to that, there are some new features that you might like :)

Special thanks to all contributors!

[​IMG] Support the Developer

New
  • Free Disk Space tracking on Performance Tab
  • Proxy HTTPS Override This setting can be used if you're routing Plan traffic through a proxy (like nginx) to remove the need for Java Keystores. More information coming to wiki.
  • Update notification now on the website The notification has been moved from in game to the website for easier use.
  • Partial Velocity support, with help from @Miclebrick, requires another plugin with MySQL Driver shaded in.
  • Made it possible to customize favicon.ico
Improvements
  • Introduced Dagger a dependency injection framework
  • Removed static usage
  • Updated Plugin Abstraction library. While doing this a few memory leaks were fixed.
  • Network page servers tab now calculated on Bungee server, no more empty servers tab.
  • Added Health Info stuff to Locale
Bugfixes
  • Fixed non ASCII symbols (eg. Russian symbols) not being accepted in the URL (For player pages)
  • SLF4J Logger warnings on enable fixed by @DarkPyves
  • Fixed ConcurrentModificationException on Bungee ping gathering
  • Fixed "Active players might be running out of things to do" on health tab
  • Fixed issues with Database patches when using MySQL
  • Fixed Plugin Data Exceptions related to new version of AAC
  • Fixed Players page not refreshing often enough
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Oct 27, 2018

Change log 4.4.7

I've been working on technical debt goal that should fix memory usage issues, but it'll take a bit longer to complete and so is not in this update.

Here are things that have been completed in the meanwhile. Special thanks to Vankka :)

New
  • LuckPerms plugin data support by @Vankka
  • DiscordSRV plugin data support by @Vankka
Bugfixes
  • Fixed NPE related to Litebans PluginData on BungeeCord
  • Fixed IPHash database patch failing
  • Fixed PluginData information ordering
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Oct 7, 2018

Change log 4.4.6

It's been a while from last update since I'm busy with University, but here is a new version with some more bugs fixed. Thanks to all contributors in this update! :)
  • plan.inspect permission changed to plan.inspect.base
  • plan.qinspect permission changed to plan.qinspect.base
[​IMG] Support the Developer

New
Improvements
  • Reduced memory usage:
    • Player page now rendered on demand instead of on login status change
    • Selective caching in DataContainer
    • ResponseCache now uses Caffeine with 5 minute invalidation - Should reduce memory usage over time by removing unvisited pages.
    • HTML page compression (Unimportant whitespace removed in memory). Speeds up loading & reduces memory usage.
    • Disabled Debug logging in memory temporarily
  • Improvements to DE locale by @Sprungente
  • Named Plan ExecutorService pools
  • PluginData values are now in more sensible order (In order of appearance)
People have been having memory consumption issues with Plan, and this tries to address some of those. - Unfortunately it seems that it is caused by bad static usage that is currently being rooted from the code. When it's done it's done.

Bugfixes
  • Fixed page breakage when using a locale, and odd replacements such as Yesterday -> Jasterday for example.
  • Fixed plan.ignore.afk checking not being reduced.
  • Fixed Extra zeroes time amount formatting when there was 0 second time present.
  • Fixed ConcurrentModificationException related to logs clean task finishing.
  • Fixed MySQL Patch System failures if two Plan databases were present in the same MySQL
  • Fixed Last Peak not showing up
  • Fixed Plan WebServer leaking 4 idle threads on a reload
  • AnalysisContainer no longer held in memory in PluginData objects until next analysis
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Sep 23, 2018

This update addresses plugin incompatibility issues due to improper shading by splitting Plan into two artifacts. This means that one version will not function on all platforms - Sponge will require a different artifact.

All artifacts are available at https://github.com/Rsl1122/Plan-PlayerAnalytics/releases/ - Use this version on Bukkit and Bungee servers

New
  • BungeeCord PluginData support: AdvancedBan, BuyCraft, Litebans, ViaVersion
  • Sponge PluginData support: BuyCraft
  • ASkyBlock challenges support to player pages
Improvements
  • Removed Config from debug page as brute force security concerns were raised & it has not been useful in debugging issues.
  • Updated all PluginData plugins to latest versions
Bugfixes
  • Fixed Plan causing LuckPerms to break if another plugin with HikariCP was present (3rd plugin)
  • Fixed Sponge CPU gathering
  • Fixed /plan m uninstalled command not setting servers as uninstalled
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Aug 27, 2018

Change log 4.4.4

New

  • /plan m uninstalled [id/name] command to mark servers as uninstalled
    • Marking a server uninstalled stops BungeeCord from attempting to connect to it
    • Re-installed servers will be connected to automatically
  • Two config options for ping gathering delays, server start delay and login delay
  • AdvancedBan support by @Vankka
Improvements
  • Removed DataContainerCache as it was causing large memory usage on networks
  • HikariCP updated to 3.2.0
  • Connection: close added to outbound HTTP connections
  • Reduced player page generation delay from 20s to 5s on login and logout
  • Caches now cleared on disable
  • Network page updated less frequently (Now when you view the page & periodically)
  • Attempt to clean ping data with a filter 0 < ping <= 4000ms
  • Improved ping gathering by changing average to median
  • AFK ignore permission checked less frequently
Bugfixes
  • Fixed Sponge metrics
  • Fixed ConcurrentModificationException related to SessionsMutator
  • Fixed player online status on server switch on networks
  • Fixed longest world time calculation on session accordion
  • Fixed active sessions not displaying on server page
  • Fixed relative links in server.html for FullCalendar.js (Only bug when using a subdirectory rewrite rule on redirection)
  • Fixed Exception when disabling the plugin on server shutdown
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Aug 23, 2018

Change log 4.4.3
New
  • Added JSON Export to /player/<name>/raw and /server/<name>/raw - Get raw link with /plan m raw <player> or /planbungee raw <player>
Improvements
  • Simplified Chinese Language finished by f0rb1d
  • Added bStats to Bungee and Sponge
  • Improved /debug page with tabs, and added Cache information
Bugfixes
  • [Major] Fixed thread and socket leakage with proper timeouts
  • Fixed false negative on /plan m setup
  • Fixed inspect page head not displaying sometimes
  • Fixed nickname data truncation
  • Fixed NPE on disable if plugin failed to enable
  • Fixed Nickname LastSeen Patch Application
  • Attempt to fix player registration issues
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Aug 11, 2018

Bug fixes and Optimizations - Change log 4.4.2

Hello, In this bug fix update the Locale system gets some love and many bugs are fixed. Hopefully the [Major] bugs are fixed, since they are extremely difficult to reproduce.

[​IMG] Support the Developer

Improvements:
  • Locale System improved, easier to add new messages - Web pages are now translatable through the Locale, so no html changes are necessary.
    • If you have an old locale rename 'Cmd Usage -' to 'Cmd Help -'
    • German locale by @Morsmorse
    • Partial Simplified Chinese locale by 佛壁灯 ( @f0rb1d )
    • Finnish locale by me
  • HikariCP Replaced DHCP2 with HikariCP as connection pool (Bukkit, Bungee), should improve fetch speeds
    • Connections now validated before use to reduce exceptions
  • Database Patching Now patches are applied if they are not already applied, this means if you skip multiple versions in the future, all database patches are applied. Failed applications are also re-applied with this version (Looking at you IP anonymization)
  • Connection System Replaced bare java HttpUrlConnection with Apache HttpClient that has more reliable API in terms of closing resources (No more thread leakage)
  • Font awesome update 5.0.1.3 -> 5.2.0, Thanks to @Argetan
  • Caching layer for page generation 10 second caching layer to reduce repeated page generation database calls on Bungee
  • '/' now redirects to '/server' when using HTTP
  • Litebans tables now display UUID instead of "Unknown to Plan", also added time issued.
Bug fixes:
  • [Major] Attempt to fix Stall bug in 4.4.1 caused by Thread starvation (See connection system improvement) not fixed see #680
  • [Major] Attempt to fix Network page hang bug caused by failing database connection pool, occurring more frequently when using External MySQL not fixed see #680
  • [Major] Attempt to fix "Unsupported key" exceptions , possibly caused by improper serialization by JVM
  • Fixed Player online status not updating on Bungee properly
  • Fixed DeathEvent Exception on 1.8.X when pet kills something
  • Fixed UTF-8 Encoding issue (Umlauts and russian lang now work on website)
  • Fixed Plan on CraftBukkit (Disabled Ping task on CraftBukkit)
  • Fixed Health Index calculation
    • Fixed player retain percentage rounding
    • Fixed server downtime calculation giving values over 30 days
  • Fixed ConcurrentModificationException related to GeoInfoMutator
  • Fixed Sponge PluginData registration
  • Fixed some Litebans PluginData exceptions
  • Fixed CacheInspectPageRequest debug logging an exception on bungee
  • Fixed Update notification being spammed
If any of the major bugs resurface, please Open an issue as soon as possible with as much information as possible, Thanks!

----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Aug 8, 2018

Bugfixes:
  • Fixed Plan randomly running stuff on the main server thread
  • Fixed Litebans related server page breakage
  • Fixed Towny tab not showing any towns
  • Fixed Town Block calculation
----------, Jul 19, 2018

Data Refactoring Update - Change log 4.4.0

[​IMG]
Long time no see! Here is quite massive update to the data object structure of Plan!
In addition to the new structure there are great new features & bugfixes.

Known issues

[​IMG] Support the Developer

Key Features:

Ping Gathering
:
Plan now gathers player's ping on Bukkit based servers. Best, Worst and Average ping is displayed in a graph on Performance tab, as well as on the player's page. Ping data is stored for 2 weeks.

Ping per Country:
Ping / Country is now displayed on the Geolocations tab in a table.

Unique & New Players Graph:
This graph has been haunting the Online Activity tab for a while, and now it has been implemented. The same data is also visible on the Calendar.

Network Health Info:
Player activity based measures are now available on the network page.
Playerbase Activity Charts are also present

PvP & PvE tab:
Player page now contains a fancy PvP & PvE tab that displays all player kills and deaths as well as Player & Mob KDRs

Country bar chart on Geolocations tabs:
Since hovering over every country can be tedious, now you can see top 20 countries next to the map.

CPU Usage Change:
Old CPU usage method was not actually displaying the CPU usage. New method is now in use that displays the system CPU usage accurately.

Nicknames table Last Seen:
Actions table on Player page has been removed. Its data has been placed into nickname table.

Font Awesome 5 Icons:
Font awesome has been updated (Thanks @Argetan for the contribution)

New Features:
  • AFK tracking can be ignored with plan.ignore.afk permission
  • PlanBungee can be disabled with /planbungee disable
  • /afk commands are now tracked by AFK Tracker
Improvements:
  • IPv6 addresses now anonymized properly
  • Fixed IP address order in Connection Info table on Player page
  • Activity Index added to /players page
  • Player#isBanned no longer run on server thread
  • Players tables now ordered properly
  • Player page generation is now run on BungeeCord if available.
  • Player Overview tab gets Operator, Ban & Register info added to each server
  • Analysis progress no longer logged on console
  • HTML Changes from 4.3.2
Plugin data fixes:
  • Updated AdvancedAchievements hook (Thanks @DarkPyves )
  • McMMO now displays level data on the server page as well.
  • Fixed a Towny bug when Towny didn't know a player.
  • Multiple fixes to Litebans tables (Table headers, player names, page overflow, ban tag when not banned)
  • Fixed Jobs table header order
  • Changed almost all Kingdoms icons to better fit
  • Fixed Unique Constraint violation related to ProtocolSupport/ViaVersion
Bugfixes:
  • Fixed some exceptions related to Analysis as a side effect from the refactoring
Other

This was a very large revamp for the data objects in Plan and very important one. The new system allows a lot more flexible expansion and analysis of the existing data.

In addition to this, the Bukkit & Bungee set up tutorials have been updated & The plugin has a new fancy icon!

----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Jul 18, 2018

This update fixes a lot of bugs, thanks to everyone who has reported them on github and discord.

[​IMG] Support the Developer

Improvements
  • Player retention calculation now takes into account when the player registered (Improves both month and week calculation for newer players)
  • Player retention prediction now compares new players to average values of all previous players, and determines stickiness from distance between averages of those that stuck around and those who didn't. (Old compared values to other new players, checking if they're like 50% of those players that were retained.)
  • Improved the performance impact on MySQL CPU of Bungee geolocation fetch
  • DeathListener now supports wider range of projectiles
  • Security: ConnectionSystem now uses TLSv1.2 instead of SSL
  • Removed "Removed data of x players" log when x = 0
Bugfixes:
  • Fixed IP table inserting rows every time a player joined
  • Fixed anonymisation of old IPs in IP table
  • Removed produced duplicates from IP table
  • Attempted to fix closed datasource issue on Sponge
  • Fixed Geolocation gathering on Sponge
  • Fixed Processing exceptions not being logged
  • Fixed afk time formatting on server accordion on Player page
  • Fixed wrong link to /players page on /network/-page
  • Fixed backup failing if the database contained duplicate sessions caused by old bugs
  • New backup db is now closed properly
  • Improved performance of server specific UUID fetch
  • Fixed /players page not sorting by last seen by default
  • Removed use of Bukkit ChatColor in Analyze and Inspect command (Fixes sponge)
----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, May 31, 2018

Bugfixes:
  • HOTFIX: Fixed a bug where all players were cleaned from the database as "inactive" since they played within 180 days.
  • Fixed network graphs not displaying when Server UUIDs were the same
New:
  • Added links from /players -> /network page, /network -> /players page
----------, May 24, 2018

Change log 4.3.0
This update contains such an odd combination of features that I could not figure a name for the update.

IPs in the database will be anonymised!
Some Plan logs and inacative users may be deleted by the update.


[​IMG] Support the Developer

Bugs:
  • Introduced a bug where all active players' data was cleaned from the database
New:
  • Sponge support Added support for Sponge servers.
    WebServer and Geolocations are disabled by default on Sponge & need to be enabled in the config.
  • Per day logs Error logs are now per day logs. Added a setting for automatic log removal after x days. (7 by default)
  • Clean inactive players Added an option to remove player's data after they've been inactive for x days. (180 by default)
  • Option to disable Geolocation gathering
  • Updates are now checked from a file on Github
Improvements:
  • Database schema change: IPs now anonymised (last 16 bits) and hashed to keep same IPs from clogging up the db.
  • Help commands now have better formatting
  • Updated StrSubstitutor from apache
  • Errors now logged to per day files
Bugfixes:
  • Locales are now placed inside the jar again.
  • Removed block count from GriefPrevention and GriefPrevention+ PluginData to avoid data erasure.
  • Fixed a bug where database init error was hidden by another exception
----

This update contains features that improve GDPR compliance, so following features were postponed due to lack of time:

  • Update command
  • Unique players per day graph
  • Placeholder API support
In order to make your life easier, I decided to write down the data Plan gathers. This is just for disclosure to your users and is optional.
https://github.com/Rsl1122/Plan-PlayerAnalytics/wiki/Possible-GDPR-Privacy-Policy-section

----

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, May 24, 2018

Time Update - Change log 4.2.0
[​IMG]
This update brings new features, optimizations to network functionality and bugfixes.
! Backup your database before the update, schema additions will change world ids in plan_world_tables. !

[​IMG] Support the Developer

New:

  • Session Calendar added to the Player page, displays kills, playtime and sessions.
  • Player Calendar added to the Server page, displays playtime, sessions count, new & unique players for each day.
  • AFK Time Tracking is now available. This is used to make Activity Index more accurate.
  • Geolocation Map added to the Network page
  • Help Bubbles added everywhere, these contain information about the data as well as how to use different graphs.
  • Data gap display new config option added for line graphs. Disabled by default
    [​IMG]
Improvements:
  • HTML now transferred over HTTP (on networks) instead of MySQL since it was causing issues where the data didn't transfer properly.
  • DB Schema: Added server_id to worlds, world_times and kill tables
  • ProcessingQueue has been removed and replaced with ExecutorService implementations. Plugin should no longer freeze on disable.
  • Made some graphs easier to read by limiting minimum to 0
Bugfixes:
  • Fixed Server hang on disable due to unprocessed processors
  • Fixed /plan m import command
  • Attempt to fix NPE on first config save
  • Fixed refresh loop on player page when plugin tab didn't update
  • Date formatting should now use UseServerTime setting
  • Clean task now run periodically
Html Changes:
----

If you have the time, please fill out user satisfaction survey - all answers are appreciated. :)

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!
----------, Apr 7, 2018

New:
  • Added a lot of Bukkit settings to Bungee config - If you have customized the settings on Bukkit servers you might need to re-configure with the new Bungee config or set Bungee-Override.CopyBungeeConfig to false before updating.
Bugfixes:
  • Fixed Server pages not being available on some servers due to MySQL packet size restraints - Server pages are now split every 500k Base64 characters & assembled when fetched.

    In addition only a single page should be in the database at one time for each server. (Less stuff to clean)
  • Fixed SuperbVote related NoSuchMethodErrors
----------, Mar 2, 2018

New :
  • Wrote a Connection debugging command /plan m con & /planbungee con
    This command attempts connection to all found servers & those attempt to the sending server.
Bugfixes:
  • Fixed Export not exporting scripts
  • Fixed NoSuchMethodError on Paper 1.8.X related to TPS
  • Fixed Periodic Analysis not running
  • Fixed NoClassDefFoundError when using /planbungee in game
  • Improved TPS calculation accuracy
  • Possibly fixed NPE the first time Config is saved on a new install
Other:
  • Database is now cleaned every 5 minutes to reduce the size of plan_transfer table getting too large.
----------, Feb 19, 2018

Improvements & Refactoring - Change log 4.1.5
API breaking update, read more under Technical section.

If you would like to support the project, consider giving a star on Github or donating :)

This update brings some long awaited bugfixes & improvements as well as some new things. It is recommended to update Bungee first.


New:

  • 1.7.X Servers are supported again
  • Dates can now be formatted using SimpleDateFormat syntax.
  • Dates can now display "Today", "Yesterday", "Friday" for the last few days. (Can be disabled in config)
  • BuyCraft data support
  • GriefPreventionPlus support
  • Bukkit-Bungee connection system has been rewritten. The system is now "stateless" and is a lot simpler. It also uses MySQL to transfer web pages which is a security improvement if using HTTP. More under Technical
Improvements:
  • Performance tab charts have received multiple Y-axis, making them a lot easier to read
  • Players online now saves the highest player count for the minute instead of average
  • Reduced Sidebar width & improved the website on smaller screen sizes.
  • LiteBans no longer uses hardcoded table prefix. LiteBans PluginData is also more extensive & should be enough to replace the separate php UI provided by LiteBans author.
  • Added world name when viewing gamemode drilldown
  • When accessing Server Analysis page from Network page, if the page is not present it will be refreshed.
  • Much better error messages for /plan m setup
  • Information transfer connections are now logged & can be viewed on Debug page
  • If Error occurs a message was added to tell where the error can be read. (Debug page link if webserver is online)
  • PunchCard now reads Monday->Sunday instead of Sunday->Monday
Bugfixes:
  • Network page now displays Unique player counts correctly
  • Fixed exception on plugin disable
  • Fixed BatchUpdateException related to WorldTimesTable
  • Fixed PlanWorldChangeListener causing lag
  • Fixed NPE related to Factions
  • Fixed RedProtect API call
  • Fixed PunchCard Timezone issues
  • Possibly fixed other Timezone issues with highcharts.
  • Fixed Punchcard displaying "2. Jan"
  • Fixed /plan causing an error on CraftBukkit servers
  • Improved MySQL performance when database had a lot of Sessions
  • Fixed Inspect page still being accessible after /plan m remove <player>
  • Fixed NPE related to Config
  • Fixed some PluginData accordions having bad ID values
  • More fixes that were not mentioned in commits.
Technical:

+17,455 -13,549 lines changed

  • All Classes moved from main.java.com.djrapitops.plan to com.djrapitops.plan - This causes Plan Java API breakage.
  • Since the API broke with the package change, a new API has been written & is now accessible via PlanAPI.getInstance()
  • WebAPI at /api/ (misnomer) has been removed. New Bungee connection system now uses /info/ as the address for information transfers. 4.1.4 & 4.1.5 can not be run on the same network.
  • Major Refactoring has taken place to make the code structure more modular. This means that everything is placed in SubSystems instead of the plugin classes. This will make it easier to manage the plugin.
  • The new Bukkit-Bungee connection system should work much more reliably than the old system.
  • Due to complexity some additional PluginData may not function on 1.7.X servers & will likely not be supported.
If you have any issues feel free to join Discord for support.
----------, Feb 12, 2018

Bugfixes:
  • Critical Fixed Security Vulnerability where MySQL details could be obtained from Bungee server, does not affect Bukkit servers. This vulnerability affects versions 4.0.0 to 4.1.3.1
  • Fixed IllegalPluginAccessException when shutting down the server, sometimes causing active sessions not being saved
  • Attempted to fix ServerName setting causing Inspect page to render improperly
  • Fixed wrong address being placed in database for a short amount of time before webserver enabled (Bukkit)
  • Fixed NPE related to RegisterCommandFilter
  • Fixed AAC, ProtocolSupport & ViaVersion Plan incompatibility issues by changing table names for these plugins
  • Fixed wrong method being used for saving AAC HackType name to database.
----------, Dec 16, 2017

Bugfixes:
  • Fixed Plan causing lag on PlayerJoinEvent on some machines
  • Removed some "false positive" exceptions that were written to log even when not needed.
----------, Dec 9, 2017

New:
  • Config setting for MySQL launch options
  • Config setting for Players Table footers on Bukkit
Improvements:
  • Updated to AbstractPluginFramework 3.0.1, fixes some bugs
    APF 3.0.1 is now available in Maven Central & no longer needs to be manually installed after cloning the repository.
Bugfixes:
  • Fixed IllegalStateException: Duplicate key related to GriefPrevention
  • Fixed NPE related to Factions with no leader
  • Fixed ClassCastExceptions related to InspectPageResponse
  • Fixed NPE related to Config (Hopefully)
  • Fixed NPE related to API#getInspectPageLink
  • Fixed /plan qinspect subcommand not being registered
  • Fixed Bungee displaying player peak counts as "1 Jan 1970"
  • Fixed Symbols or spaces in Servername causing Inspect page to render incorrectly
  • Fixed a typo in health notes
If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!

----------, Dec 7, 2017

Bugfixes:
  • Fixed NPE on analysis when a player registered after database fetch phase
  • Fixed InternalStateException when a new player registered
  • Fixed IllegalArgumentException related to LiteBans on Offline servers
  • Fixed ${refresh} placeholder being wrong value on Analysis page
  • WorldMap color is now handled by theme properly
  • Fixed NPE when faction had no leader
Other:
  • Removed some unnecessary web items
----------, Dec 3, 2017

  • Added a theme 'soft'
Bugfixes:
  • Fixed ArithmetricException / by zero, Analysis
  • Fixed ConcurrentModificationException related to cancelling a Export task
  • Fixed Essentials displaying all users as Jailed & Banned.
----------, Dec 2, 2017

One-Year Anniversary Update - Change Log 4.1.0

It's been a year!
This update brings a lot of neat features and better design to all web pages. I'll update the wiki during the weekend.

New:

New HTML

[​IMG]

The new pages are more compact and convey the information to the user faster because of good spacing and color-coded icons.
Html includes a possibility for every panel user to select a different theme of their liking.


Server Health Analysis

[​IMG]

Want to know how your server is doing with a quick look? Now that is possible.
Calculated from player behaviour, activity changes, lag spikes as well as server downtime.

All items are derived from the underlying data.

Activity Index & Inspect page additions
[​IMG]

Rather than saying a player is active or inactive, now there is a number - from 0 to 5.
This number is calculated from the last 3 weeks of sessions the player has & you can determine your own limits for what you consider active.

Inspect page now also includes a table with all IPs, Geolocations & when the user last connected using that IP.

Player Table
[​IMG]

By far the most interesting tool, the new Player table, has better sorting as well as a search bar. Now you can view data of up to 2000 most recent players (configurable)
Similar table is in use on the /players-page as well, but with up to 25000 players (configurable)

New Player Retention & Low TPS spikes
[​IMG]Online Activity tab gets a New Player Retention statistic. This is calculated using the sessions of newly registered players.
As well as a 30 day/7 day calculation, an estimate for players who joined in the last 24 hours is made. - This is done by comparing the new players to the players that have joined before.

Performance tab gets a new Low TPS spikes statistic.

Network page, Server Specific Player Graphs
[​IMG]Network page now displays player activity data for each server in addition to the overall network activity graph.

Plugin Data Section
[​IMG]

The new Html allows more navigation options, so now PluginData can have different sized boxes & even whole tabs - This means that bigger plugins like Factions & Towny now have their own tab with data about each Faction/Town & their residents.

PluginData Player Table
[​IMG]

Similar to the new player table, but contains data of plugins for the users in the Playerlist.

Good for checking last join versions, Faction/Town members, etc.

New PluginData Additions
  • ProtocolSupport
  • BanManager
  • Kingdoms+
  • Redprotect
  • AdvancedAntiCheat (AAC)
Other
  • Re-implemented /plan qinspect-command.
  • Re-implemented Html Export
  • Bukkit servers now serve /debug page even in WebAPI mode
  • Theme System has been rewritten due to large changes. Colors are now defined in theme.yml
Improvements:

Online Information
Inspect page & Analysis page now contain active sessions. Inspect page will also display the server a user is online on.

World Pie Improvements
World Pie no longer contains worlds that have 0 playtime - The pie can also be sorted by descending percentage.

Rewrote all PluginData & PluginData API

Since old PluginData API was terrible it has been rewritten to allow for more options, better optimization as well as more intuitive use.
All old PluginData has been rewritten to the new system.
New system allows: Plugin Icons, Icon colors, Easier Table/Html addition & cleaner code

PluginData changes
  • Removed support for OnTime.
  • Optimized the performance of each plugin’s PluginData. - This unfortunately meant that Permission data via Vault was unviable due to permission systems that store data in flatfile/yml being too slow.
Other
  • Html Customization files are now searched from /plugins/Plan/web folder.
  • Playerlists & Session display limits can now be changed in the config
Bugfixes:
  • Fixed Plugin config section overwriting
  • Fixed “No Bukkit Servers Online” on Bungee systems when viewing Inspect page
  • Fixed WebServer.InternalIP functionality
  • Fixed BootstrapMethodError on Paper 1.10.x and prior
  • Fixed “cannot commit - no transaction” SQLiteException, ignored
  • Fixed IOExceptions related to Config
If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!

----------, Dec 2, 2017

[​IMG]
/debug page

New:

  • Easier bug reporting by going to <address>/debug on the WebServer.
Bugfixes:
  • Critical: Fixed the reworked framework causing Analysis to fail if a PluginData-source caused an exception during third party analysis
  • Critical: Fixed NullPointerException on call to Config.save
  • Fixed debug log in memory not getting info messages
  • Added back the "New Version is available" in-game notification
  • Fixed /plan search <nickname> resulting in every single player in the database
----------, Nov 13, 2017

New:
  • Reworked AbstractPluginFramework (Now v.3.0.0)
    - Custom config system, allows comments to be written, values on all nodes (Even if they have children), mainly written to allow copyDefaults on Bungee (If you get black colors on Pies etc try reformatting the setting in the config - '"#color", "#col2"')
    - All logs now go to specific "logs" folder inside the plugin folder
    - Debug logs now separate by day
    - Error log now displays dates
    - Last 750 debug log lines now held in memory even if debug console/file logging is disabled
    - Version utility can now check version from a raw text or with Spiget
    - Optimized a lot of things
    - Better task system that allows for better /plan status command
  • Html now has a Side navbar instead of a top navbar
  • Italian locale (IT) by @DaveDevil
Improvements:
  • Improved RequestSetup WebAPI (/plan m setup) to be less error prone
  • /plan m setup now changes conflicting config settings to allow for Bungee config changes
  • Bukkit should no longer enter infinite loops on Bungee systems after an improper setup where Bukkit doesn't register it's data to MySQL (eg. When it is using SQLite)
  • Session tables should now use World aliases as well.
  • PingWebAPI now returns 404 when server can not find server UUID from database.
Bugfixes:
  • Critical: Fixed SQLException: duplicate UUID occurring on boot on new installs, causing plugin not to start - Sometimes a restart fixed the issue and sometimes nothing helped.
  • Fixed NoSuchMethodError related to using custom Locale file
  • Fixed /plan analyze link not being clickable when server name had a space in it
  • Typo: Fixed an extra space being added on some rows of help texts
  • Fixed plugins tab on Inspect page displaying "row row"
The Framework rewrite was pretty long process and that's why it took so long to release this update, but it'll allow some really cool stuff in the future.

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me). Cheers!

----------, Nov 12, 2017

Bugfixes:
  • Fixed an issue where Bukkit server placed address with http to database even though it was running in https mode.
    Caused by call to getAddress before WebServer was running.
  • Bungee now updates it's address in the database
  • Fixed Month calculation (Lead to negative days)
  • Fixed NoSuchMethodError on Paper 1.10.2 being spammed constantly
----------, Nov 1, 2017

Please take a moment to answer a poll about the plugin over here:
https://goo.gl/forms/A3xMKLQ4CnecMkYt2
Answers are anonymous and will be used to improve the plugin in the future. Thanks!

New:
  • World name alias config setting: Change world display names, Can group multiple worlds together - Does not affect the database.
  • /plan m disable command for disabling kickCounting until next reload.
  • French Locale by @CyanTech
Improvements
  • Server Analysis Pages now display only the Worlds that are on that server (On Bungee systems)
Bugfixes:
  • Fixed Squashed Sessions and White text on all tables on BungeeCord systems - Caused by UTF-8 BOF at the end of file being included in the WebAPI transfer of Html.
  • Fixed Html pages being limited in height on Bungee systems (same issue as above)
  • Fixed SessionsAsTable display
  • Fixed NoClassDefError when accessing /players/ on BungeeCord
  • Fixed the new 00:00:43 & 00:45 datetime formats.
  • Fixed "/planbungee webuser" displaying help messages as "/plan web"
  • Fixed LocaleWriteOnEnable setting
If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me)

----------, Oct 31, 2017

New:
  • /planbungee command
  • Now possible to format time amounts (seconds) with extra zeros: 00:00:43 and 00:54
  • Session Tabs now unified, Both Analysis and Inspect page display similar format - Can be changed in the config.
Improvements:
  • IPv6 IPs can now be saved to the database
  • Network page now sorts server names alphabetically
  • World Pies now sort Alphabetically
  • World Pies now display all available worlds for consistent colors between Pies
  • Fixed some wrong help messages for some commands
  • Added / to the end of /players/ and /network/ links for servers using alternative IP with a subfolder (e.g. <address>/subfolder/server)
  • Performance Tabs now display same tab after refresh (F5)
  • Removed Max player count on Network page because of the setting not being available through Bungee API
  • Bukkit ServerUUID seed now more complex.
  • /plan m setup command now notifies if not using full address instead of Exception.
Bugfixes:
  • Fixed Inspect failing due to improperly updated Bukkit server list on Bungee
  • Network Page should now refresh properly
  • Fixed users not registering on second server they join, leading to them missing from the Server's Playerlist.
  • Fixed Playerlist Geolocation displaying "Not Known" for everyone
  • Fixed LiteBans detection
  • Fixed IllegalArgumentException on Bungee disable
  • Fixed PlanBungee reload crashing the plugin
  • Fixed NPE on Analysis related to missing data
  • Fixed "Data too long for column 'additional_info'"
If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me)

----------, Oct 29, 2017

Update the Bukkit versions before Bungee.

New:

  • Standalone BungeeCord plugin now tracks players online independently. (No need for bukkit installation)
Improvements:
  • SQLite now uses a single connection again (Faster).
  • Refactored database code to be more safe for coding (No improperly closed resources)
  • Session tab (Inspect page) spacing improved with Icons instead of "Click to expand"
  • Added Analysis.LogProgressOnConsole config setting back
  • Many minor improvements
Bugfixes:
  • Fixed /plan m setup saying "WebServer is not enabled" even though it is enabled.
  • Fixed IP Geolocation gathering
  • Fixed Database getting locked sometime after /plan reload due to duplicate Listeners being registered
  • Fixed Duplicate Sessions appearing after /plan reload due to duplicate Listeners being registered
  • Fixed AbstractMethodError on 1.8.X-1.9 servers using SQLite
  • Fixed Duplicate User Info being entered into plan_user_info
  • Fixed MysqlDataTruncation: Data truncation: Out of range value for column 'max_players' at row 1 due to bad type variable (MySQL)
  • Fixed "Changed Name" Action being performed multiple times over and over
  • Fixed Logged in from (Inspect page) displaying same country multiple times
  • Fixed IllegalArgumentException: Serializable[] contained a null object related to PluginData
Special thanks to all bug reporters and bug testers, thank you!

If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me)

----------, Oct 8, 2017

Bugfixes:
  • Fixed Bukkit WebServer not restarting properly when Bungee started after Bukkit did.
  • Fixed NPE related to HtmlUtils.getRelativeInspectLink (A lot of PluginData had this)
  • Fixed unknown command causing NoSuchMethodError on 1.8.X
  • Fixed 500 internal error page displaying when Analysis had not been run - Now refreshes analysis automatically instead
  • Fixed NoSuchMethodError (StringUtils) on 1.11.2 (Analysis)
  • Fixed Timezone difference being in the wrong direction (And added a possibility in config to turn it off)
  • Attempted to fix UNIQUE constraint failed: plan_users.uuid related to RegisterProcessor (I say attempted here because I was not able to reproduce this issue)
  • Attempted to fix IllegalStateException: Duplicate key UserInfo related to Analysis
  • Fixed NullPointerException related to UserInfo being null - This is caused by bad design, but the design will be fixed in the future. (Inspect page was using register date, name and Ban/OP status for the server processing the inspect request, even if the player had not played on that server, leading to NPE - Ban/OP status will be moved to Overview tab in a future update.)
  • Fixed odd placement of Overview tab when user had no sessions
If you get any errors or have issues don't be afraid to join the Support on Discord or report the issue (This one is easier for me)

Alright. :)

----------, Oct 2, 2017

4.0.0 | BungeeCord Support Update
[​IMG]

I am excited to announce the release of support for BungeeCord networks. Many parts of the plugin have been rewritten (21,206 new lines, removed 16,308 lines). Strap in because this Change log is going to be huge. I have also opened a Discord Support server for configuration related issues

Set-Up tutorials:

Change log:

New:
  • BungeeCord Support: Database now supports multiple servers in a single database. Network can distribute requests to online Bukkit servers and only one WebServer is serving the web pages on the network, while others direct to that server.
  • Rewritten Analysis page
  • Rewritten Inspect page: Now contains in-depth information about every play session (World Times, GM Times per world, kills & more), Per server plugins tab as well as Actions table.
  • Actions system: Displays info such as how many players were online during first join, how many messages the player sent on their first session as well as all player kills - More will be done with this system in the future.
  • Theme system: Allows a lot of customization on top of Html Customization, Tutorial
  • Backup, Restore & Move: Re-Introducing the now fixed features, now these are optimized.
  • Better Session system: Session now contain World specific play times (And what gamemode was used in each world) as well as all kill-death related information.
  • WebAPI: Information transfer between Bukkit-Bungee servers.
  • Rewritten Listener-Processing system
Improvements:
  • Large database-schema changes: More here
  • Connection pooling to Database - Up to 8 connections to speed up all functions
  • Single 8 Threaded processing queue: This thing replaces the old 4, 2-threaded queues with single functionality.
  • Rewritten SQL Statements: Every single statement in the database has been rewritten.
  • Restructured config.yml
  • Fetch-Size optimization: By default 10, now set around 5k-50k depending on the statement. Significant speed increase.
  • Split web related files into smaller .css and .js files (Still customizable by copying to the /plugins/Plan folder)
  • Removed UserData object caching Should use less memory because of using smaller objects and direct database access when analyzing.
  • Html CSS drastically improved
  • Html placeholders no longer use regex, instead using StrSubstitutor from Apache Commons. (#placeholdeexampler# -> ${placeholderExample})
  • Replaced .png logo with a Font-Awesome based SVG one (Supports the new theme system)
Bugfixes:
  • When not logging unknown commands Bukkit default commands now logged again
  • Playtime should no longer be inconsistent after this update
  • New sessions no longer started on reload of plugin
Writing this change log took 15 minutes. I'll update the page of the plugin shortly.
Special thanks to @fuzzlemann for contributing to this update

Report issues | Support the developer
----------, Oct 1, 2017

Thanks to @fuzzlemann for contributing to this update.

New:

  • TPS Graph can be customized with 3 different colors & their thresholds.
Improvements:
  • New Kills now saved with easier to read item names (GOLD_SWORD -> Gold Sword)
  • Analysis command no longer sends a timeout message, instead it will send a complete message when it is done.
    - No longer sends anything if exception occurs.
    - Does not send console another message, uses the "Analysis Complete"-message to deliver the link.
Bugfixes:
  • Temporarily disabled Locale.unload on disable to prevent some exceptions from happening.
  • Punchcard should no longer show 0 AM as Jan 1
  • Fixed "New Update Available" notification on join.
  • Fixes some issues with /plan m dump
  • Fixed NoSuchFieldError related to PluginData classes
  • Fixed problems with newest version of Jobs (4.0.1) - No longer compatible with older Jobs versions
Other:
  • Set up SonarCloud
  • More tests (30% -> 37% coverage)
Next update will be 4.0.0.
4.0.0 will be complete restructure due to addition of Bungee support.
This means that no new features will arrive until that update is finished.
Bug fixes for critical bugs will still be released if necessary.
----------, Aug 18, 2017

IMPORTANT: If you have had any of the fixed issues, please delete Errors.txt & DebugLog.txt before updating.

Special thanks to @fuzzlemann for contributing to this update.

Bugfixes:

  • Fixed ConcurrentModificationException related to Debug Log
  • Fixed Exceptions related to Error log
  • Fixed DebugLog being written to with debug: false
  • Fixed NoSuchFieldErrors related to PluginData
  • Fixed DumpLog command not allowing dump if logs are over 500 000 chars long.
  • Fixed possible small memory leaks caused by not closing Files.lines streams.
The amount of issues last update just shows that there are not enough tests that test Multiple simultaneous actions such as multiple logins, logs, etc.
This will be improved upon in the future.
----------, Aug 12, 2017

New Locale - Change Log 3.6.2

[​IMG]

IMPORTANT: Possible Errors.txt & DebugLog.txt should be deleted before installing this update.

Thanks to @fuzzlemann for contributing to this update & updating the locale_DE

New:
  • Rewrote Locale system - More flexible & Easier to read / change locale files. More about setting up your own locale
  • Added a Manage Dump command that dumps a lot of Debug information to Hastebin for easier issue reporting.
  • Added getValues(Collection<UUID>) method to PluginData (API)
Improvements:
  • Drastically improved SQLite Write performance. (Import - 60 minutes vs 20 seconds - Tested with 60000 users)
  • Slightly improved Export performance (Now reads the player.html once)
  • Optimized DB Batch operation sizes
  • Chart times now use Server's Local Timezone.
  • Player & Command Tables now have a scrollbar.
  • Updated to Abstract Plugin Framework 2.0.2
    - More readable DebugLog
    - More readable Errors log.
Bugfixes:
  • Players with names ending with dot or space no longer cause Export to fail on Windows machines.
  • Fixed NullPointerException when starting Plan with WebServer disabled.
  • Fixed IllegalStateException: Playtime is lower than last status change
Removed:
  • Manage Status command
Other:
  • SQLite Write performance improvement improved db test time from 14s to 4s.
  • Changed Issue template on Github
Looking forward to hearing what you think about this update :)
----------, Aug 11, 2017

Thanks to @fuzzlemann for contributing to this update.

Improvements:

  • MySQL connections are now using
    ?rewriteBatchedStatements=true (Performance improvement)
  • Cut up to 80 seconds from import. (Preparations for Import rewrite.)
Bugfixes:
  • Fixed NoSuchMethodError: org.bukkit.inventory.PlayerInventory.getItemInMainHand() in 1.8.X servers related to DeathEvent
Other:
  • Dropped support for 1.7.X
    This is due to Two caches using Google Guava 10 methods, which 1.7.X does not provide. 1.7.10 was released on Thursday, June 26 2014
    Attempts at fixing the issues were made, but support would have required completely rewriting the two caches.
----------, Aug 3, 2017

Https, HighCharts, World Playtimes & More - Change Log 3.6.0
[​IMG]

Oh boy, this update sure is a big one! Webserver Rewrite, All Graphs rewritten, World playtime tracking & A lot of improvements.

Special Thanks to @fuzzlemann for contributing to this update.

New:
  • Https Webserver:
    - If a Java keystore is installed the webserver uses that as the certificate Tutorial
    - Web Authentication (Login) when certificate is installed
    - If Certificate is not installed a new Http Server is used instead (WIth no login prompt).
  • HighCharts: Replaced EVERY Chart with HighCharts alternative. Highcharts is more optimized than Plotly.js or Chart.js
  • World Playtime Tracking: Playtime in each world is now tracked.
  • RAM, Chunk & Entity Load Graphs
  • In-Depth Command help - /plan <Command> ?
Improvements:
  • Rewritten Webserver can handle multiple connections at once.
  • Register command log on console now disabled (Passwords no longer visible in logs or console)
  • More Compact Display of Various Data elements.
  • Added Html Caching to the webserver, Improves WebServer response times.
  • Connecting to Webserver root when using Https now redirects to the appropriate page based on permission level
  • Multiple Smaller Code Improvements
  • Config:
    - Removed: GamemodeChangeListener, RemoveOutliersFromVisualization, UseMaxPlayersAsScale, OnlinePlayersFill
    - Renamed: LinkProtocol to ExternalWebServerLinkProtocol
    - Changed: Customization.Html.GamemodePie values
  • In game update notification when update is available (Permission: plan.* or apf.notify)
Bugfixes:
  • Kills Made by Dogs now counted
  • Fixed Multiple Exceptions related to PluginData.
  • "No Account" Notification not shown when not using Https Server (Login not possible)
  • Fixed Command Alias Detection
  • Fixed NPE Related to UserData hashCode
  • Refresh counters should no longer reset when page is reloaded
----------, Aug 1, 2017

Whole lot of Improvements - Change log 3.5.5

First off, a huge thanks to @fuzzlemann for contributing to this update.

This update brings a lot of Improvements, CPU Usage Graph & Bugfixes

New:
Improvements:
  • Duplicate Sessions added due to reloads no longer affect the visualization of "Sessions" page
  • Online graph on Inspect page now uses scatter graph as well.
  • Geolocations for IPs now cached when fetched - More IPs can be fetched & improves performance.
  • TPS calculation now utilizes Paper's method on PaperSpigot.
  • Many small code optimization fixes
  • Many code & string typo fixes
  • Recent player buttons now use relative link.
Bugfixes:
  • Fixed NPE that crashed the Webserver
  • Fixed IllegalStateException: Duplicate key
  • Fixed NullPointerException related to Vault Permission Table
  • Fixed NoSuchMethodError related to ViaVersion db table
  • Fixed NPE related to GriefPrevention claims
Other:
  • Moved to using IntelliJ IDEA as IDE
  • Project forks no longer require manual maven installs
----------, Jul 26, 2017

Bugfixes:
  • Fixed: IndexOutOfBoundException 0: Size 0 related to the Point reduction algorithm.
  • Fixed: SQLExceptions related to age & gender row NOT NULL restrainst in older databases (prior 3.5.2).
  • Temporarily disabled Manage Move, Backup & Restore commands - They will return once they are fixed.
Sorry about the amount of updates in such short time span, but these were too important to leave until the next bigger update.
Hopefully no more critical bugs show up. :)
----------, Jul 23, 2017

Improvements:
Bugfixes:
  • Fixed: Constant NPE related to ClearConsumer
  • Fixed: Disabled Security Prompt Temporarily until https-server has been implemented.
    Turns out insecure HTTP Basic Authorization only works on localhost & All browsers block the prompt from other servers.
----------, Jul 23, 2017

Code Cleanup - Change Log 3.5.2

This update brings a lot of changes to the structure of the code, removal of obsolete features & improvements.
WebServer structure was rewritten in this update.

New:
  • WebUser system for accessing the webpages
    - Register command
    - Manage commands for the webusers
    - Permission level for accessing different pages
    - Permission level either determined by user permissions or
  • Rewritten Webserver
    - Removed "SecurityCode" from addresses.
    - Added Basic Authentication over HTTP
    - Added /players page for listing cached player links
    - More in depth error response codes.
    - Only GET requests allowed because http is not secure enough for PUSH authorization.
  • List command for /players page link.
Improvements:
  • Restructured AnalysisData to multiple parts
  • Changed Players Online Graphs to use TPS data as source instead of unreliable SessionData. (TPS data is average of 60 seconds per point)
  • Changed TPS & Players Online graphs from Line Graphs to Scatter Graphs (Now downtime is visible-ish)
  • Graph labels now calculated client side (from unix time)
  • Removed Age, Gender & Location Gathering.
    - First start of plan might take longer than usual if you have had location gathering enabled as all the locations are cleared.
  • Moved to use new version of the Plugin Framework.
Bugfixes:
  • Fixed: Incorrect data of Players Online graphs on Analysis page
  • Fixed: WebServer memory leak
  • Fixed: Analysis Command now displays JSON link properly when used as a player.
  • Fixed: Search command no longer disconnects player due to too long message.
Other:
  • Improved Test Suite performance from 46s to 26s
  • Cleaned a lot of code
  • Cleaned Benchmark messages for /plan status timings
----------, Jul 22, 2017

- Accidental non notification update push -
----------, Jul 22, 2017

Bugfixes:
  • Fixed NullPointerException when fetching a player with the new Fetch utility added in last version.
  • Attempted to fix SQLException related to ViaVersion table attempting to insert existing players protocol number.
  • Attempted to fix PluginData related exception to Vault_balance
Sorry about these errors, they didn't come up in testing :)
----------, Jul 9, 2017

More Data! - Change log 3.5.0
[​IMG]

This update brings a lot more Plugin Data, 7 day TPS graph, Offline player import option & more.

In more detail:
  • Added TPS Tracking. A task runs every second & average for 60 seconds is saved.
    - TPS data older than a week is cleaned from the database on boot.
  • Added a new /plan status command (as well as /plan status timings) that displays what the plugin is up to.
  • Added PluginData:
  • New Plugin hooks: ASkyBlock, GriefPrevention, SuperbVote, LiteBans, ViaVersion
  • Vault: Added Eco balance table & Permission group information.
  • Added automatic plugindata config generation so that any plugin's datapoint can be disabled if it takes too long. (/plan status timings to check)
  • Added /plan manage import offline to import players who have not joined after plan was installed.
  • Analysis is now disabled while import is running, if you wish to see the results, run analysis before importing.
  • Limited Command usage table to 500 most used commands.
  • Limited Playerlist to 750 most recent players
  • Added config option to disable Minotaur playerhead images from analysis page. (May improve page loading times)
Bugfixes:
  • Fixed Queue functionality, everything is no longer dumped on get queue. (Lead to data loss when database was on high load)
  • Fixed Higher & Lowercase commands displaying separately on the command usage table.
  • Fixed exported analysis.html links pointing to wrong players html folder.
  • Fixed ConcurrentModificationException related to UserData#toString
This update was supposed to include a lot more, but the code needs an urgent clean-up before some of the things can be introduced (or removed) - I decided to release the update & work on cleaning up next.
----------, Jul 9, 2017

Enhancements - Changelog 3.4.3

This update brings a couple improvements & bugfixes.

In more detail:
  • Improved support for external https webservers:
    - All external links now use https
    - All internal webserver links now use relative protocol (// instead of http://)
    - Export now exports the analysis.html to /server/index.html instead.
    - Config option to choose the protocol used in links by commands
  • Essentials Warps are now in a Table with the command for the warp.
  • Changed Remove Outlier Threshold from 3 to 3.5
  • Added Day config option for 1 day time (formatting)
  • Added %zero% to Hour, Minute, Second formatting settings
    - If a settings contains it (For example %zero%%hours%h), a single '0' will be added in front of numbers from 1 to 9.
  • Split some functionality into new included packages from different jars - Easier to manage & less dependencies for project forks.
  • New Sessions now inserted in batches of 2048.
Bugfixes:
  • Fixed Command Aliases: analysis, analyse, qanalyse, qanalysis, m (for manage).
  • Analysis no longer returns 404 if the analysis has been run at least once.
  • Prevented multiple analysis tasks from starting if one is already running
  • Higher & Lowercase commands now combine properly.
  • NaN refresh clock display fixed.
  • Hopefully fixed java.sql.BatchUpdateException: Duplicate entry 'REDACTED' for key 'uuid'
  • Fixed java.util.ConcurrentModificationException: null when clearing cache.
Not in this update:

Attempts at combining extra sessions caused by reloads turned out to be highly inefficient - Test managed to combine only 4500 when there were 20000 extra sessions.
The saving took 50 minutes & all plugin's functions were impaired while the process was running. - That is why it was not included in this update.

----------, Jun 16, 2017

In detail:
  • Inspect & Qinspect commands are no longer case-sensitive. This is possible due to moving the bukkit data to the database earlier.
  • Inspect page address is not either. Some unaccessable pages that returned "500 - User has no UUID" now acacessable.
  • Added debug modes for writing a file. (Options true/both/console/file/false) - Still default false.
  • Added config options:
    - Disable use of Max players as scale for Players Online graph
    - Disable various listeners (Death/Command/GamemodeChange/Chat)
  • Optimized inserting of new data when using saveMultiple method.
  • Command Usage is no longer deleted when saving - Now using update instead.
  • Changed date formatting (Timestamp) to a better format. Register dates now include the year.
  • "Added to Cache" & "Cleared from Cache" messages moved to debug instead of info.
  • Added 2 new API methods for quickly accessing a lot of UserData objects.
Bugfixes:
  • Fixed SocketException: Broken pipe (Write failed) error related to webserver.
  • Fixed ArrayIndexOutOfBounds when accessing ip:port/code/player
  • Fixed /plan reload reloading the config and using the new config settings to disable the plugin, sometimes leading to an exception.
  • Fixed NullPointerException caused by the issue above.
----------, Jun 7, 2017

Details:
  • Inspect & Search commands now also export the inspect page if setting is enabled.
  • Session Length distribution graph now displays number of sessions instead of %.
  • Now using proper method of placing the scale limits on graphs. (Previously used dummy datapoints)
  • Manage status command now displays Process, Save, Get & Clear queue sizes
  • Punchcard graph now uses data from only last 30 days.
  • Some analysis console messages now display time taken.
  • Analysis complete console message now contains the link to the analysis page.
  • Refactoring
Bugfixes:
  • Fixed ConcurrentModificationException if a command was used while commanduse was being saved.
  • PeriodicSave task now processes refresh of data completely before beginning a save.
----------, Jun 4, 2017

Change log 3.4.0
[​IMG]
This update brings a new Html Export system, data anomaly removal & various small improvements.

The Html export system can be used to export the Html files to a folder used by another webserver running on the server. This is a better solution than the API previously provided.

In more detail:

  • Added new Html Export system:
    - Off by default
    - Can generate the html to any folder, just define the full path in the config. (Default /plugins/Plan/Analysis Results)
    - Uses same html file as the webserver (Supports HtmlCustomization).
    - Only exported after analysis, takes about 25 seconds/1000 files.
  • Added Unique Users & Average Unique Users / Day below the Player graphs
  • Added outlier removal to Player activity graph & Punchcard.
    - Attempts to remove big spikes with standard deviation analysis.
    - Can be disabled in the config
  • Last refresh clock now counts up from the moment of last refresh. (Instead of only changing on refresh)
  • Added Last refresh clock to Inspect pages.
  • Removed Gender Pie from the Analysis page due to terrible accuracy (5/1097 players identified)
  • Optimized PluginData code for Advanced Achievements v.5.2.0 & above
Bugfixes:
  • Fixed Jobs PluginData related NPE when player had not played after Jobs was installed.
  • Fixed Essentials & Towny showing blank on inspect page when player had not played after the plugin was installed.
----------, Jun 3, 2017

Optimizations for Large servers - Change log 3.3.0
[​IMG]
This update brings optimizations to Database & Analysis especially aimed at larger servers. Where previously (3.2.1) Analysis might have taken 16 minutes to complete, it should now complete under 10 seconds.
The update also contains various customization settings & improvements to the navigation.

After installing this update, a Conversion from Bukkit data to Database will be run. It takes ~5 minutes/1000 players & should only run once.

In more detail:
  • Benchmarked & Optimized Database get methods by converting bukkit data to database data.
  • Optimized Player Activity Graph calculation for large amount of sessions (40s vs 0,5s during testing)
  • Added settings to disable Built in plugin-support from the plugins tab
  • Added customization settings in the config:
    - Server name to the header ("Plan" in the picture)
    - Time amount format
    - Decimal point restriction format
  • Navigation now displays the page you're currently viewing (Online Activity in the picture)
  • Displayed Tab will now remain the same when page is refreshed
Bugfixes:
  • Fixed Customization.Colors.Html.UI-setting not changing the colors on the Inspect page.
----------, May 30, 2017

Resource Information
Author:
----------
Total Downloads: 77,977
First Release: Nov 30, 2016
Last Update: Feb 1, 2025
Category: ---------------
All-Time Rating:
255 ratings
Find more info at github.com...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings