blob: c96aa50794b62d7b1bac1be0c88a3e0981fa7dc9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
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 me.Danker.TheMod;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
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(TheMod.ERROR_COLOUR + "Failed with reason: Player does not exist."));
} else {
player.addChatMessage(new ChatComponentText(TheMod.ERROR_COLOUR + "Request failed. HTTP Error Code: " + conn.getResponseCode()));
}
}
} catch (MalformedURLException ex) {
player.addChatMessage(new ChatComponentText(TheMod.ERROR_COLOUR + "An error has occured. See logs for more details."));
System.err.println(ex);
} catch (IOException ex) {
player.addChatMessage(new ChatComponentText(TheMod.ERROR_COLOUR + "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(TheMod.ERROR_COLOUR + "Request failed. HTTP Error Code: " + conn.getResponseCode()));
}
} catch (MalformedURLException ex) {
player.addChatMessage(new ChatComponentText(TheMod.ERROR_COLOUR + "An error has occured. See logs for more details."));
System.err.println(ex);
} catch (IOException ex) {
player.addChatMessage(new ChatComponentText(TheMod.ERROR_COLOUR + "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(TheMod.ERROR_COLOUR + "Failed with reason: " + reason));
return null;
}
if (profilesResponse.get("profiles").isJsonNull()) {
player.addChatMessage(new ChatComponentText(TheMod.ERROR_COLOUR + "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;
}
}
|