From a0009df1ed646a0711de1364eb575aa803091a5b Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Thu, 31 Jul 2025 22:07:44 +0200 Subject: Fix social / cata xp --- .../model/NetherIslandPlayerData.java | 2 +- .../skyblock/profileviewer/model/PlayerData.java | 5 ++++ .../rework/ProfileViewerScreenRework.java | 29 +++++++++++++++++++--- .../profileviewer/rework/pages/SkillsPage.java | 12 +++++++-- 4 files changed, 42 insertions(+), 6 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/NetherIslandPlayerData.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/NetherIslandPlayerData.java index 4daac13b..736858fc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/NetherIslandPlayerData.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/NetherIslandPlayerData.java @@ -27,7 +27,7 @@ public class NetherIslandPlayerData { } @SerializedName("last_minibosses_killed") - public List lastMinibossesKilled = new ArrayList<>(); + public List lastMinibossesKilled = new ArrayList<>(); public Dojo dojo = new Dojo(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/PlayerData.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/PlayerData.java index 705d99a9..e7ea16e7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/PlayerData.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/PlayerData.java @@ -81,6 +81,7 @@ public class PlayerData { FORAGING("Foraging", Ico.JUNGLE_SAPLING), SOCIAL("Social", Ico.EMERALD, "Social"), CARPENTRY("Carpentry", Ico.CRAFTING_TABLE), + CATACOMBS("Catacombs", Ico.SKULL, "Catacombs"), COMBAT("Combat", Ico.STONE_SWORD), ; private final String name; @@ -98,6 +99,10 @@ public class PlayerData { this.levelFinderOverride = override; } + public LevelFinder.LevelInfo getLevelInfo(double experience) { + return LevelFinder.getLevelInfo(levelFinderOverride, (long) experience); + } + public String getName() { return name; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java index c0773771..5afb5b1b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java @@ -16,16 +16,25 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.awt.*; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; import java.util.function.Function; public class ProfileViewerScreenRework extends Screen { + public static Logger LOGGER = LogManager.getLogger(); public static final Gson GSON = new GsonBuilder() .registerTypeAdapter(UUID.class, new UUIDTypeAdapter()) .create(); @@ -94,7 +103,7 @@ public class ProfileViewerScreenRework extends Screen { super.init(); int rootX = width / 2 - GUI_WIDTH / 2; int rootY = height / 2 - GUI_HEIGHT / 2 + 5; - for (var widget : pages.get(selectedIndex).getWidgets()) { + for (var widget : widgets) { widget.setPositionFromRoot(rootX + 5, rootY + 7); addDrawableChild(widget); } @@ -106,7 +115,18 @@ public class ProfileViewerScreenRework extends Screen { } this.displayLoadedProfile(new ProfileLoadState.Loading()); return reload = ProfileUtils.fetchFullProfile(name) - .thenApplyAsync(jsonObject -> GSON.fromJson(jsonObject, ApiProfileResponse.class)) + .thenApplyAsync(jsonObject -> { + try { + return GSON.fromJson(jsonObject, ApiProfileResponse.class); + } catch (Exception ex) { + try (var buffer = Files.newBufferedWriter(Path.of("last_failed_profile_response.json"))) { + SkyblockerMod.GSON.toJson(jsonObject, buffer); + } catch (IOException e) { + ex.addSuppressed(e); + } + throw ex; + } + }) .thenApplyAsync(apiProfileResponse -> apiProfileResponse .profiles .stream() @@ -120,7 +140,10 @@ public class ProfileViewerScreenRework extends Screen { ); }) .orElseGet(() -> new ProfileLoadState.Error("No profile found"))) - .exceptionally(ex -> new ProfileLoadState.Error(ex.getMessage())) + .exceptionally(ex -> { + LOGGER.error("Failed to load profile of {}", name, ex); + return new ProfileLoadState.Error(ex.getMessage()); + }) .thenApplyAsync(load -> { displayLoadedProfile(load); return load; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java index cc01ac5d..b4d7f362 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.profileviewer.rework.pages; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.skyblock.profileviewer.model.PlayerData; import de.hysky.skyblocker.skyblock.profileviewer.rework.*; +import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.item.ItemStack; @@ -25,9 +26,16 @@ public class SkillsPage implements ProfileViewerPage { skills.add(new SkillWidget(PlayerData.Skill.ALCHEMY, playerData.getSkillLevel(PlayerData.Skill.ALCHEMY), OptionalInt.empty())); skills.add(new SkillWidget(PlayerData.Skill.TAMING, playerData.getSkillLevel(PlayerData.Skill.TAMING), OptionalInt.of(50))); skills.add(new SkillWidget(PlayerData.Skill.CARPENTRY, playerData.getSkillLevel(PlayerData.Skill.CARPENTRY), OptionalInt.empty())); -// skills.add(new SkillWidget(PlayerData.Skill., playerData.getSkillLevel(PlayerData.Skill.COMBAT), OptionalInt.empty())); + + skills.add(new SkillWidget(PlayerData.Skill.CATACOMBS, PlayerData.Skill.CATACOMBS.getLevelInfo(load.member().dungeons.dungeonInfo.catacombs.experience), OptionalInt.empty())); skills.add(new SkillWidget(PlayerData.Skill.RUNECRAFTING, playerData.getSkillLevel(PlayerData.Skill.RUNECRAFTING), OptionalInt.empty())); - skills.add(new SkillWidget(PlayerData.Skill.SOCIAL, playerData.getSkillLevel(PlayerData.Skill.SOCIAL), OptionalInt.empty())); // TODO: cross player member + skills.add(new SkillWidget( + PlayerData.Skill.SOCIAL, + PlayerData.Skill.SOCIAL.getLevelInfo( + load.profile().members.values() + .stream().mapToDouble(it -> it.playerData.getSkillExperience(PlayerData.Skill.SOCIAL)) + .sum()), + OptionalInt.empty())); int i = 0; -- cgit