LogUtil now creates the launcher's directory, if it does not already exist.
ServerListScreen now works with GameService.getServerListAsync
Added auto-column-sizing to server list table, and improved feedback while list loads.
Tweaked lint settings to avoid serialization-related warnings. Nothing serializable here!
Refactored the whole service/session management part of the launcher. Also, last-used service type is now remembered between runs.
Started on client update code.
ClientUpdateTask mostly working. Just gotta hook it up to the rest of the code.
Cleaned up imports.
ClientUpdateTask is now fired up on launcher start. SignInScreen an ServerListScreen start out centered on screen.
Improved logging all over
ClientUpdateTask now downloads to a temporary file before replacing the local JAR, to avoid accidentally corrupting the local copy (in case of aborted downloads).
Hooked up some temporary updater code to ServerListScreen to make sure that it works. It does!
Code cleanup: argument null checks, using "private" where possible, using "final" where possible.
Made GameSession.getServerPass async, like the other potentially-long-running methods.
Changed the way logging is done, to improve the amount of available information. Other misc cleanup.
Fixed minecraft.net server list parsing.
Server list is now sortable, and is selectable row-at-once, not cell-at-once.
A few more logging tweaks/improvements.
Implemented Minecraft.net play page parsing. Also wrapped generic SwingWorker types (that GameSession used to return) into nice named abstract types, e.g. "SwingWorker<ServerInfo[],ServerInfo>" became "GetServerListTask"
Fixed MinecraftNetSession.GetServerDetailsWorker erroring. Hooked up some temp code in ServerListScreen to test server detail fetching.