Fixes:
- Boot analysis no longer run if /plan analyze is used before boot
analysis
- Config now responds properly (with exception of colors) [Settings
Enum]
- Seriously revamped style of the html
- Added Html enum for better readability of the code
- Removed Jheatmap dependency
- Nicknames now have colors
- Moved some more things to Phrase
- Changed Phrase.parse to allow multiple values
Bugfixes:
- Socket server no longer requires refresh to properly load pages
- Plugin now reloads config when using /reload
- Fixed manage command not giving explanation for errors when database
connection is not establishable
- Fixed hotswap causing plugin reload to fail if database connection is
not establsihable.
- Added Phrase.GRABBING_DATA_MESSAGE to Analysis, Inspect & search
- Moved some methods from MiscUtils to DataCombineUtils
- Added Manage Import command that can be used to import data to the
database from other plugins. Currently supports only ontime.
- Added aliases to analyze and manage command
- Added OfflinePlayer object support to NewPlayerCreator
- Added database managment command:
- Copy & Overwrite data from one database to another (moving from one db
to another)
- Copy & Combine data from one database to another (in case both were
used)
- Remove player's data from the active database
- Clear a database
- Check what database is in use, also on info command. Also now told on
enable.
- Hotswap to another database, reloads plugin with new database set in
config
- Reload command now restarts the plugin, DOES NOT LOAD NEWLY PLACED JAR
- Fixed typo in search command arguments
- Import command for OnTime in PlanLite
- Recent Players
- Lists of players
- Location heatmap
- Investigate Bungee support possibility
- Make Analysis.java readable
- Move the data combine methods from MiscUtils to new class
- Database Cleaning
- Change database initiation message to include "connection"
- If you feel like it make better html
- Bugfix for #2 (Catch for NoSuchFieldError, null checks)
- Database now uses Batch processing with Commanduse, IPs, Nicknames &
Locations. Also used when saving whole cache.
- Uncommented Location gathering and swapped the location saving to use
batch processing. TODO: Worlds table
- Added placeholders for top lists & recent players to analysis &
planlite.html
TODO:
- Worlds Table
- Links to players
- New HashMaps in Analysis for recent players
- InspectCache clear multiper
- InspectCache clear task check. (Time value for each task)
This update brings more customization options, couple bugfixes and extra
slice to the player composition pie that tells how many players have
only joined once, but never returned (previously counted as inactive).
In more detail:
Added "Unknown" slice to the Player Composition Pie (Players who have
joined only once)
ServerData and UserData now saved with seperate timers to avoid loss of
player activity data with less dense cache saves.
Added possibility to turn off the WebServer.
- API will return HTML without webserver if the server is off.
- If AlternativeIP is in use, all commands will use that as link,
otherwise:
- Analysis & Search commands are disabled if the webserver is off.
- If PlanLite is installed and is used as alternative UI (config),
Inspect command is passed to PlanLite.
Added possibility to use PlanLite as an alternative UI.
- Use /plan lite inspect <player> to view the data in the chatbox.
- Graphs, piecharts & list available only on the web UI.
- Analysis not yet available in PlanLite UI.
Added possibility to change all colors of the Web UI and command
messages.
- Changes in the color settings require plugin restart, fix for this in
the future.
- Web UI Colors use the HTML Color Codes without the # (hashtag)
Added possibility to translate & add/remove Demographics triggers
Bugfixes:
- Fixed ConcurrentModificationException when data is being cleared after
a save.
- Attempted fix of PlanLite balance analysis by rewriting a formatting
utility method.
Fixed bugs:
- Demographics data properly detected.
- MapComparator now compares values as integers.
- ServerData is now saved properly, and playersOnline is updated
properly.
Other:
- Graph is untested
- MySQL untested
- PlanLite features done.
Fixed bugs:
- Demographics data is not properly detected (partial fix)
-> Geolocation untested.
Known bugs:
- MapComparator compares values as strings (causes wrong order)
- Graph is wrong way around
- Graph is written to points with no data present
- (Player activity graph data might not be properly saved)
-> Graph uses players from a single point and draws a line
Other:
- (MySQL not tested)
- new API unimplemented
- Started creating planlite html,
-> html unfinished.
- Tested all 3 plugins working together, fixed bugs and typos
accordingly
-> Swapped planlite permissions and commands from plan to planlite
Following bugs have been fixed:
- Changed command links to say "Click me"
- Concurrent modification exception: Cachehandler 83, Cachehandler 208
- GMTimes on analysis page still shows 0 but graph works
- Page has to be refreshed multiple times to view (Faulty response)
- Data not saved to db on login
- Command usages upside down
- New Players set to 0 too easily (Wrong data was fetched)
Known bugs:
- Graph is wrong way around
- Graph is written to points with no data present
- (Player activity graph data might not be properly saved)
-> Graph uses players from a single point and draws a line
- Demographics data is not saved properly/detected
Other:
- (MySQL not tested)
- PlanLite features
- Added Player Activity graph
- Top 50 Commands now looks proper
Fixed bugs:
- Activity now determined properly (two weeks seconds multiplied by
1000)
Known Bugs:
- GMTimes on analysis page still shows 0 but graph works
- Page has to be refreshed multiple times to view (Faulty response)
- (Player activity graph data might not be properly saved)
Not implemented:
- PlanLite features
- Updated config file to clearer structure
Fixed bugs:
- Commands now show link with /tellraw command.
- PieCharts now check if total is not 100,
- Piecharts now render correctly (There was some issues with int)
- InspectCache updates properly.
- ClassCastException on start-up when PlanLite is not installed fixed.
- DataCache now returns active data to InspectCache if it is present.
Known Bugs:
- GMTimes on analysis page still shows 0 but graph works
- Page has to be refreshed multiple times to view (Faulty response)
- Top50Commands not pretty yet.
- Extra panel to put PlanLite stuff on is empty
Not implemented:
- PlanLite features
- Player Activity Graph
Known bugs:
- Commands: Link does not show ip, might be related to localhost
- Page has to be refreshed multiple times to view (Faulty response
probably)
- Gamemode Times corrupted somehow
- 0 0 0 0 0 debug in console
- GM Pie doesn't check if total 100
- Average Age shows NaN because dividing by 0
- (Inspect cache not updating properly)
- PlanLite features not implemented yet
- Moved to Maven project to solve dependencies
- > Added Chart4j (Google Charts) to render graphs and pie charts.
- More AnalysisUtils
- Added GMTimesChartCreator
- Changed format of all BukkitRunnables to be the same.
- Added a delayed task for cache clearing if data is being saved.
- Changed PlanLite packages from com.djrapitops.plan to
com.djrapitops.planlite
- Moved useful utilities to com.djrapitops.plan.utilities and removed
rest
- Location Handling (and saving) disabled for now because of inefficient
saving to SQL.
- Added more javadocs
Fixed bugs:
- Locations not saved when player moves (Fixed, but location handling
will be disabled for now)
Known Bugs:
- Times don't update on inspect (Just need to call update if player is
online, one line missing.)
- ClassCastException on start-up when PlanLite is not installed. (Will
fix with try catch tomorrow.)
- Optimized GamemodeTimes table.
- Added LastPlayed to the users table.
Fixed bugs:
- Last Played now handling correctly
Known bugs:
- Locations not saved when player moves
- Times don't update on inspect
Fixed bugs:
- Logintimes now 1 instead of 2 after first login.
- Location ID now primary key
- Database now saves UserID correctly, might have been old database file
causing the error.
- Confirmed that database doesn't save multiples of entries
- API now handling deprecated methods through PlanLiteHook
- Optimized GamemodeTimesHandler code
Other:
- GameModeTimes Table is optimizable: Can save all entries on one line
instead of 4.
- OP and Banned are not checked yet.
Known bugs:
- LastPlayed is handling weird (0 on logout)
-> PlayTime is getting assigned wrong value
-> GamemodeTimes are getting assigned wrong value
- Locations not saved when player moves
Fixed Bugs:
- LastGameMode no longer null (PlayerLoginEvent > PlayerJoinEvent)
- Playtime no longer negative
- Logintimes now updated
- Serverdata now updating properly (PlayerLoginEvent > PlayerJoinEvent)
Known bugs:
- !! Database UserID is null when saving
- (GamemodeTimes is handling weird)
- (LastPlayed might be handling weird)
- (Database saves multiples of known things.)
- Locations not saved when player moves (UserID faulty)
- !! Location ID not primary key
Fixed Bugs:
- database now contains LoginTimes
- Commandlistener now gives proper command.
- Logintimes no longer null on inspect
- ServerData load SQL format fixed
- NickList and IpList changed to Set
Known bugs:
- (Id while saving might be faulty)
- (Database saves multiples of known things.)
- LastGameMode is set to null when player joins
- (Playtime is negative)
- ServerData not updating properly
- (DataBase saves non-existent ids)
- (LoginTimes is not updated)
- Locations not saved when player moves
- Location ID not primary key
- Async tasks for database.
- Proper save on disable.
- Debugging with inspect command.
- Database now manages to save and load data, data needs to be debugged.
Known bugs:
- CommandListener things every command is /
- LastGameMode is set to null when player joins
- NullPointerException: LoginTimes when player not online on inspect
- Some values are negative (Probably times)
- ServerData not updating properly
- (DataBase saves non-existent ids)
- LoginTimes is not updated
- LoginTimes not found from database with sqlite3
- Renamed old Plan to PlanLite with refractor
- Deprecated PlanLite API classes in Plan (Hook, DataPoint, DataType)
- API not yet changed
- extra hook calls passed onto PlanLite
- Created the new data structure that saves all the information needed
by analysis. (Not Bugtested)
- Refractored PlanDemographics code into DemographicsHandler
- Added Gender Enum
- Added Phrase Enum (plugin messages)
TODO:
- Bugtest SQL
- Bugtest UserData
- Bugtest ServerData
- Inspect command
- Analysis
- Search command (No clue yet)
- Bugtest Listeners
- Bugtest Handlers
- Command listener
- ServerData newPlayers / day reset
- Config
- html webserver for results
Created two copies of the project, and left plugin yml with version so
version checking on current versions will not break.
Plan Lite:
- Current version
- Uses plugins to get the data
Plan Advanced:
- Will be almost complete rewrite of the plugin.
- Will be released as Plan 2.0.0 when ready
- Current Plan will be released as Plan Lite 1.6.3 when rewrite is
complete.
- Will gather data and save it
- Better consistency and Time axis to analysis.
- Better analysis, possibly web page creation for results
- Support for Plan Lite
- More options
- Removed getData for plugins that did not offer OfflinePlayer support.
- PlaceholderAPI is no longer returns data.
- placeholders.yml is no longer read or created.
- Unsupported Advanced Achievements versions no longer return data.
Bugfixes:
- Fixed Essentials Online Since, now shows proper value. (Was using afk
check method instead of LastLogin.)
- Essentials Offline Since now shows correct value even after reloads
(Same cause as above)
- Fixed Analysis failing because Time Average could not be converted to
long from double. (Caused by DataType.TIME values)
Other:
- Hooks no longer return data if player has not played on the server.
- Replaced some null checks with Optional.of().isPresent()
- Changed data format to include the Type the data is for easier
analysis (Of Future data and API Using plugins)
- API Changes:
- Hook moved to com.djrapitops.plan.api
- Hook now returns HashMap<Strring, DataPoint>
- added DataPoint to ..plan.api
- added DataType Enum to ..plan.api
- New format uses: data.put("XXX-Key", new Datapoint(String data,
Enum(DataType) datatype));
- Depricated getData(String playername) that returns old format of data,
still returns correct format
- Depricated getAllData(String playername)
- Move to get(All)Data(String name, boolean [anything]) to get the new
format of data.
- Added Player Logger Hook
- Added Info Command that gives version, hooks and checks for new
version.
- Check for new version upon startup