PlayerPageExporter was exporting player json file to player%3Duuid.json
but browser parsed that to be file player=uuid.json, leading to the
player page not loading the value
This was because copy-pasting the PageExporter from Server page missed
server= being replaced, while player= was supposed to be replaced.
Fixed by changing server= to player=
Affects issues:
- Fixed#1223
Previous path did not match the path used in player.html, leading to
the path not being replaced in the exported files.
Now the new path should be replaced into the files, allowing people to
view exported player.html data.
Affects issues:
- Fixed#1223
On networks register date is not available so plan_users register date
was set as the first login date Plan sees the player. This lead to
confusion when Plan was installed and old players were counted as
new players by Plan since it had not seen them before.
Code was changed to reduce confusion by updating the register date
in plan_users to smallest possible value if register date exists on a
bukkit server.
Activity index grouping query for /network page was using plan_user_info
instead of plan_users.
This lead to duplication of users if a player had played on multiple
servers.
Affects issues:
- Fixed#1216
Changed Redirects
From / -> "/server/" to /server/ServerName
From /server/Unexisting -> "/server/" to "/server/ServerName"
Affects issues:
- Close 1210
Fixes an issue where authentication is not required but is present
anyway, leading to WebAuthFailException when trying to get
web user for authentication headers coming from a reverse-proxy.
Affects issues:
- #1215
- This might increase memory usage when viewing player page by a little
- This might increase time it takes to get player page json
- 'avg_ping' is not always present for a session
Affects issues:
- Close#864
Playtime was not being updated live for the player placeholders because
the Active session was not added in the PlayerContainer before
calculations.
- Added the active session (if present) to the placeholders
- Updated session state when it is fetched from the cache (world time)
Affects issues:
- Close#1209
- Fixed possible null issues with NicknameCache
- Removed bunch of unused code, such as:
- Point reduction algorithm implementations
- HighCharts data String parsing methods
- Unused Mutators
- Unused AnalysisKeys
- Leftovers from ConnectionSystem (Response codes)
- Unused queries (Leftovers from Server box and Players table queries)
- rendering.html.icon.Icons
- Made bunch of fields final
Note that old deprecated API classes do not have signature changes.
Recommended behavior for MySQL deadlock is to retry the transaction.
Added code that performs 3 attempts with recursion if deadlocks occur.
Affects issues:
- Fixed#1212
NOT IN has a long execution time and leads to lock time being large.
Modified the transaction to select the duplicates and then remove them
Affects issues:
- Possibly fixed#1212
Redirection from the root page / was pointed towards address like
/server leading to reverse-proxies using subdirectories to misbehave
Fixed by changing all known redirections:
- / now uses relative redirects
- /server/wrong_name now redirects to [Configured address]/server
Configured address takes Alternative IP settings into account.
Affects issues:
- Fixed#1207
MySQL is very strict about subquery size in insert, so duplicate rows
would cause issues in next inserts (Duplicates can occur if two servers
do the same work at the same time)
Due to the way Optional#orElse works, the part inside orElse was run
even when the UUID could be parsed from the given String, leading to
unnecessary work as well as errors in the player UUID query
(That uses names and doesn't look at uuids like the server query)
Fixed by splitting the two execution branches
Affects issues:
- Fixed#1200 (Manually tested)
Favorite server is determined by playtime and if player has no sessions
the player's favorite server will be null, leading to NPE while parsing
JSON.
Added Optional to the source of the null value