aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-08-27 15:52:27 -0400
committerGitHub <noreply@github.com>2024-08-27 15:52:27 -0400
commit5e94a562ad234e27e08b5eb39ff8f999f6f3aaef (patch)
tree15661a30fff89f4f4c2705c7de5598f2aebf2780 /src/main/java/de
parentb97b085426de3a9310f87667a2b502bf24f12e9b (diff)
parent23fd52d0a8ce68bd4b908353e8b2c792dc02d5ef (diff)
downloadSkyblocker-5e94a562ad234e27e08b5eb39ff8f999f6f3aaef.tar.gz
Skyblocker-5e94a562ad234e27e08b5eb39ff8f999f6f3aaef.tar.bz2
Skyblocker-5e94a562ad234e27e08b5eb39ff8f999f6f3aaef.zip
Merge pull request #959 from AzureAaron/fix-pv-collections-crash
Fix PV Collections Crash
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java70
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java9
2 files changed, 40 insertions, 39 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
index 80af2935..1939e0f6 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
@@ -16,9 +16,8 @@ import de.hysky.skyblocker.utils.ApiUtils;
import de.hysky.skyblocker.utils.Http;
import de.hysky.skyblocker.utils.ProfileUtils;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
-import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntImmutableList;
import it.unimi.dsi.fastutil.ints.IntList;
-import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
@@ -34,12 +33,10 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerModelPart;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
-import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.*;
-import java.io.IOException;
import java.util.List;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -50,10 +47,11 @@ public class ProfileViewerScreen extends Screen {
public static final Logger LOGGER = LoggerFactory.getLogger(ProfileViewerScreen.class);
private static final Text TITLE = Text.of("Skyblocker Profile Viewer");
private static final String HYPIXEL_COLLECTIONS = "https://api.hypixel.net/v2/resources/skyblock/collections";
- private static final Object2ObjectOpenHashMap<String, Map<String, ?>> COLLECTIONS_CACHE = new Object2ObjectOpenHashMap<>();
private static final Identifier TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/base_plate.png");
private static final int GUI_WIDTH = 322;
private static final int GUI_HEIGHT = 180;
+ private static Map<String, String[]> COLLECTIONS;
+ private static Map<String, IntList> TIER_REQUIREMENTS;
private String playerName;
private JsonObject hypixelProfile;
@@ -202,7 +200,7 @@ public class ProfileViewerScreen extends Screen {
fetchCollectionsData(); // caching on launch
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> {
- LiteralArgumentBuilder<FabricClientCommandSource> literalArgumentBuilder = ClientCommandManager.literal("pv")
+ LiteralArgumentBuilder<FabricClientCommandSource> literalArgumentBuilder = ClientCommandManager.literal("pv")
.then(ClientCommandManager.argument("username", StringArgumentType.string())
.suggests((source, builder) -> CommandSource.suggestMatching(getPlayerSuggestions(source.getSource()), builder))
.executes(Scheduler.queueOpenScreenFactoryCommand(context -> new ProfileViewerScreen(StringArgumentType.getString(context, "username"))))
@@ -213,35 +211,41 @@ public class ProfileViewerScreen extends Screen {
});
}
- @NotNull
- public static Map<String, Map<String, ?>> fetchCollectionsData() {
- if (!COLLECTIONS_CACHE.isEmpty()) return COLLECTIONS_CACHE;
- try {
- JsonObject jsonObject = JsonParser.parseString(Http.sendGetRequest(HYPIXEL_COLLECTIONS)).getAsJsonObject();
- if (jsonObject.get("success").getAsBoolean()) {
- Map<String, String[]> collectionsMap = new HashMap<>();
- Map<String, IntList> tierRequirementsMap = new HashMap<>();
- JsonObject collections = jsonObject.getAsJsonObject("collections");
- collections.entrySet().forEach(entry -> {
- String category = entry.getKey();
- JsonObject itemsObject = entry.getValue().getAsJsonObject().getAsJsonObject("items");
- String[] items = itemsObject.keySet().toArray(new String[0]);
- collectionsMap.put(category, items);
- itemsObject.entrySet().forEach(itemEntry -> {
- IntList tierReqs = new IntArrayList();
- itemEntry.getValue().getAsJsonObject().getAsJsonArray("tiers").forEach(req ->
- tierReqs.add(req.getAsJsonObject().get("amountRequired").getAsInt()));
- tierRequirementsMap.put(itemEntry.getKey(), tierReqs);
+ private static void fetchCollectionsData() {
+ CompletableFuture.runAsync(() -> {
+ try {
+ JsonObject jsonObject = JsonParser.parseString(Http.sendGetRequest(HYPIXEL_COLLECTIONS)).getAsJsonObject();
+ if (jsonObject.get("success").getAsBoolean()) {
+ Map<String, String[]> collectionsMap = new HashMap<>();
+ Map<String, IntList> tierRequirementsMap = new HashMap<>();
+ JsonObject collections = jsonObject.getAsJsonObject("collections");
+ collections.entrySet().forEach(entry -> {
+ String category = entry.getKey();
+ JsonObject itemsObject = entry.getValue().getAsJsonObject().getAsJsonObject("items");
+ String[] items = itemsObject.keySet().toArray(new String[0]);
+ collectionsMap.put(category, items);
+ itemsObject.entrySet().forEach(itemEntry -> {
+ IntImmutableList tierReqs = IntImmutableList.toList(itemEntry.getValue().getAsJsonObject().getAsJsonArray("tiers").asList().stream()
+ .mapToInt(tier -> tier.getAsJsonObject().get("amountRequired").getAsInt())
+ );
+ tierRequirementsMap.put(itemEntry.getKey(), tierReqs);
+ });
});
- });
- COLLECTIONS_CACHE.put("COLLECTIONS", collectionsMap);
- COLLECTIONS_CACHE.put("TIER_REQS", tierRequirementsMap);
- return COLLECTIONS_CACHE;
+ COLLECTIONS = collectionsMap;
+ TIER_REQUIREMENTS = tierRequirementsMap;
+ }
+ } catch (Exception e) {
+ LOGGER.error("[Skyblocker Profile Viewer] Failed to fetch collections data", e);
}
- } catch (IOException | InterruptedException e) {
- LOGGER.error("[Skyblocker Profile Viewer] Failed to fetch collections data", e);
- }
- return Collections.emptyMap();
+ });
+ }
+
+ public static Map<String, String[]> getCollections() {
+ return COLLECTIONS;
+ }
+
+ public static Map<String, IntList> getTierRequirements() {
+ return TIER_REQUIREMENTS;
}
/**
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java
index 10778adc..b2e0e702 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java
@@ -4,6 +4,7 @@ import com.google.gson.JsonObject;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerPage;
+import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerScreen;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
import it.unimi.dsi.fastutil.ints.IntList;
import net.minecraft.client.MinecraftClient;
@@ -26,7 +27,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import static de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerScreen.fetchCollectionsData;
import static de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils.COMMA_FORMATTER;
public class GenericCategory implements ProfileViewerPage {
@@ -45,11 +45,8 @@ public class GenericCategory implements ProfileViewerPage {
private final String[] ROMAN_NUMERALS = {"-", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX"};
public GenericCategory(JsonObject hProfile, JsonObject pProfile, String collection) {
- Map<String, Map<String, ?>> fetchedData = fetchCollectionsData();
- //noinspection unchecked
- collectionsMap = (Map<String, String[]>) fetchedData.get("COLLECTIONS");
- //noinspection unchecked
- tierRequirementsMap = (Map<String, IntList>) fetchedData.get("TIER_REQS");
+ collectionsMap = ProfileViewerScreen.getCollections();
+ tierRequirementsMap = ProfileViewerScreen.getTierRequirements();
this.category = collection;
setupItemStacks(hProfile, pProfile);
}