aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java37
1 files changed, 20 insertions, 17 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java b/src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java
index a786e79f..aa7a0492 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ProfileUtils.java
@@ -4,7 +4,6 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import de.hysky.skyblocker.SkyblockerMod;
import it.unimi.dsi.fastutil.objects.ObjectLongPair;
-import net.minecraft.client.MinecraftClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -17,13 +16,24 @@ public class ProfileUtils {
private static final long HYPIXEL_API_COOLDOWN = 300000; // 5min = 300000
public static Map<String, ObjectLongPair<JsonObject>> players = new HashMap<>();
-
- public static CompletableFuture<JsonObject> updateProfile() {
- return updateProfile(MinecraftClient.getInstance().getSession().getUsername());
+ public static Map<String, ObjectLongPair<JsonObject>> profiles = new HashMap<>();
+
+ public static CompletableFuture<JsonObject> updateProfileByName(String name) {
+ return fetchFullProfile(name).thenApply(profile -> {
+ JsonObject player = profile.getAsJsonArray("profiles").asList().stream()
+ .map(JsonElement::getAsJsonObject)
+ .filter(profileObj -> profileObj.getAsJsonPrimitive("selected").getAsBoolean())
+ .findFirst()
+ .orElseThrow(() -> new IllegalStateException("No selected profile found!?"))
+ .getAsJsonObject("members").get(name).getAsJsonObject();
+
+ players.put(name, ObjectLongPair.of(player, System.currentTimeMillis()));
+ return player;
+ });
}
- public static CompletableFuture<JsonObject> updateProfile(String name) {
- ObjectLongPair<JsonObject> playerCache = players.get(name);
+ public static CompletableFuture<JsonObject> fetchFullProfile(String name) {
+ ObjectLongPair<JsonObject> playerCache = profiles.get(name);
if (playerCache != null && playerCache.rightLong() + HYPIXEL_API_COOLDOWN > System.currentTimeMillis()) {
return CompletableFuture.completedFuture(playerCache.left());
}
@@ -32,19 +42,12 @@ public class ProfileUtils {
String uuid = ApiUtils.name2Uuid(name);
try (Http.ApiResponse response = Http.sendHypixelRequest("skyblock/profiles", "?uuid=" + uuid)) {
if (!response.ok()) {
- throw new IllegalStateException("Failed to get profile uuid for players " + name + "! Response: " + response.content());
+ throw new IllegalStateException("Failed to get profile uuid for player: " + name + "! Response: " + response.content());
}
- JsonObject responseJson = SkyblockerMod.GSON.fromJson(response.content(), JsonObject.class);
-
- JsonObject player = responseJson.getAsJsonArray("profiles").asList().stream()
- .map(JsonElement::getAsJsonObject)
- .filter(profile -> profile.getAsJsonPrimitive("selected").getAsBoolean())
- .findFirst()
- .orElseThrow(() -> new IllegalStateException("No selected profile found!?"))
- .getAsJsonObject("members").get(uuid).getAsJsonObject();
+ JsonObject profile = SkyblockerMod.GSON.fromJson(response.content(), JsonObject.class);
+ profiles.put(name, ObjectLongPair.of(profile, System.currentTimeMillis()));
- players.put(name, ObjectLongPair.of(player, System.currentTimeMillis()));
- return player;
+ return profile;
} catch (Exception e) {
LOGGER.error("[Skyblocker Profile Utils] Failed to get Player Profile Data for players {}, is the API Down/Limited?", name, e);
}