package me.Danker.handlers; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Scanner; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class APIHandler { public static JsonObject getResponse(String urlString) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String input; StringBuffer response = new StringBuffer(); while ((input = in.readLine()) != null) { response.append(input); } in.close(); Gson gson = new Gson(); JsonObject object = gson.fromJson(response.toString(), JsonObject.class); return object; } else { if (urlString.startsWith("https://api.hypixel.net/")) { InputStream errorStream = conn.getErrorStream(); try (Scanner scanner = new Scanner(errorStream)) { scanner.useDelimiter("\\Z"); String error = scanner.next(); Gson gson = new Gson(); JsonObject object = gson.fromJson(error, JsonObject.class); return object; } } else if (urlString.startsWith("https://api.mojang.com/users/profiles/minecraft/") && conn.getResponseCode() == 204) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: Player does not exist.")); } else { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Request failed. HTTP Error Code: " + conn.getResponseCode())); } } } catch (MalformedURLException ex) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "An error has occured. See logs for more details.")); System.err.println(ex); } catch (IOException ex) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "An error has occured. See logs for more details.")); System.err.println(ex); } return new JsonObject(); } // Only used for UUID => Username public static JsonArray getArrayResponse(String urlString) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String input; StringBuffer response = new StringBuffer(); while ((input = in.readLine()) != null) { response.append(input); } in.close(); Gson gson = new Gson(); JsonArray array = gson.fromJson(response.toString(), JsonArray.class); return array; } else { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Request failed. HTTP Error Code: " + conn.getResponseCode())); } } catch (MalformedURLException ex) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "An error has occured. See logs for more details.")); System.err.println(ex); } catch (IOException ex) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "An error has occured. See logs for more details.")); System.err.println(ex); } return new JsonArray(); } public static String getUUID(String username) { Gson gson = new Gson(); JsonObject uuidResponse = getResponse("https://api.mojang.com/users/profiles/minecraft/" + username); String UUID = uuidResponse.get("id").getAsString(); return UUID; } public static String getLatestProfileID(String UUID, String key) { Gson gson = new Gson(); EntityPlayer player = Minecraft.getMinecraft().thePlayer; // Get profiles System.out.println("Fetching profiles..."); JsonObject profilesResponse = getResponse("https://api.hypixel.net/skyblock/profiles?uuid=" + UUID + "&key=" + key); if (!profilesResponse.get("success").getAsBoolean()) { String reason = profilesResponse.get("cause").getAsString(); player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason)); return null; } if (profilesResponse.get("profiles").isJsonNull()) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This player doesn't appear to have played SkyBlock.")); return null; } // Loop through profiles to find latest System.out.println("Looping through profiles..."); String latestProfile = ""; long latestSave = 0; JsonArray profilesArray = profilesResponse.get("profiles").getAsJsonArray(); for (JsonElement profile : profilesArray) { JsonObject profileJSON = profile.getAsJsonObject(); long profileLastSave = 1; if (profileJSON.get("members").getAsJsonObject().get(UUID).getAsJsonObject().has("last_save")) { profileLastSave = profileJSON.get("members").getAsJsonObject().get(UUID).getAsJsonObject().get("last_save").getAsLong(); } if (profileLastSave > latestSave) { latestProfile = profileJSON.get("profile_id").getAsString(); latestSave = profileLastSave; } } return latestProfile; } }