11package com .fibermc .essentialcommands ;
22
3- import com .google .gson .JsonArray ;
4- import com .google .gson .JsonParser ;
3+ import com .google .gson .stream .JsonReader ;
4+ import java .io .IOException ;
5+ import java .io .InputStream ;
6+ import java .io .InputStreamReader ;
57import java .net .URI ;
68import java .net .URLEncoder ;
79import java .net .http .HttpClient ;
@@ -67,7 +69,7 @@ public static void checkForUpdates() {
6769 )
6870 .GET ()
6971 .build (),
70- HttpResponse .BodyHandlers .ofString ()
72+ HttpResponse .BodyHandlers .ofInputStream ()
7173 )
7274 .thenApply (response -> parseLatestVersionFromResponse (response , mcVersion ))
7375 .thenAccept (latestVersionStr -> {
@@ -79,7 +81,7 @@ public static void checkForUpdates() {
7981 }
8082
8183 private static Optional <String > parseLatestVersionFromResponse (
82- HttpResponse <String > response ,
84+ HttpResponse <InputStream > response ,
8385 String mcVersion
8486 ) {
8587 if (response .statusCode () != 200 ) {
@@ -90,15 +92,31 @@ private static Optional<String> parseLatestVersionFromResponse(
9092 return Optional .empty ();
9193 }
9294
93- JsonArray versions = JsonParser .parseString (response .body ()).getAsJsonArray ();
94- if (versions .isEmpty ()) {
95- EssentialCommands .LOGGER .info (
96- "No Essential Commands release found for Minecraft {}." ,
97- mcVersion
98- );
99- return Optional .empty ();
95+ // Response body: [ { "version_number": "x.y.z-mcA.B", ... }, ... ], newest-first.
96+ try (
97+ JsonReader reader = new JsonReader (
98+ new InputStreamReader (response .body (), StandardCharsets .UTF_8 )
99+ )
100+ ) {
101+ reader .beginArray ();
102+ if (!reader .hasNext ()) {
103+ EssentialCommands .LOGGER .info (
104+ "No Essential Commands release found for Minecraft {}." ,
105+ mcVersion
106+ );
107+ return Optional .empty ();
108+ }
109+ reader .beginObject ();
110+ while (reader .hasNext ()) {
111+ if (reader .nextName ().equals ("version_number" )) {
112+ return Optional .of (reader .nextString ());
113+ }
114+ reader .skipValue ();
115+ }
116+ } catch (IOException e ) {
117+ EssentialCommands .LOGGER .warn ("Failed to parse update check response." , e );
100118 }
101- return Optional .of ( versions . get ( 0 ). getAsJsonObject (). get ( "version_number" ). getAsString () );
119+ return Optional .empty ( );
102120 }
103121
104122 private static void compareAndNotify (String currentVersionStr , String latestVersionStr ) {
0 commit comments