diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/SkyblockerMod.java | 2 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/mixin/ClientPlayerEntityMixin.java | 4 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java | 71 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java | 4 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java (renamed from src/main/java/de/hysky/skyblocker/skyblock/searchOverlay/OverlayScreen.java) | 2 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java (renamed from src/main/java/de/hysky/skyblocker/skyblock/searchOverlay/SearchOverManager.java) | 14 | ||||
-rw-r--r-- | src/test/java/de/hysky/skyblocker/skyblock/searchoverlay/SplitStringTest.java (renamed from src/test/java/de/hysky/skyblocker/skyblock/searchOverlay/SplitStringTest.java) | 2 |
7 files changed, 54 insertions, 45 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index 1aa97526..b8722fc6 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -26,7 +26,7 @@ import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.quicknav.QuickNav; import de.hysky.skyblocker.skyblock.rift.TheRift; -import de.hysky.skyblocker.skyblock.searchOverlay.SearchOverManager; +import de.hysky.skyblocker.skyblock.searchoverlay.SearchOverManager; import de.hysky.skyblocker.skyblock.shortcut.Shortcuts; import de.hysky.skyblocker.skyblock.special.SpecialEffects; import de.hysky.skyblocker.skyblock.tabhud.TabHud; diff --git a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayerEntityMixin.java index 2a4c38a7..ceda9ed4 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -6,8 +6,8 @@ import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen; import de.hysky.skyblocker.skyblock.item.HotbarSlotLock; import de.hysky.skyblocker.skyblock.item.ItemProtection; import de.hysky.skyblocker.skyblock.rift.HealingMelonIndicator; -import de.hysky.skyblocker.skyblock.searchOverlay.OverlayScreen; -import de.hysky.skyblocker.skyblock.searchOverlay.SearchOverManager; +import de.hysky.skyblocker.skyblock.searchoverlay.OverlayScreen; +import de.hysky.skyblocker.skyblock.searchoverlay.SearchOverManager; import de.hysky.skyblocker.utils.Utils; import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java index 68f09344..2f748792 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java @@ -10,9 +10,6 @@ import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Http.ApiResponse; import de.hysky.skyblocker.utils.Utils; -import it.unimi.dsi.fastutil.ints.IntIntPair; -import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.minecraft.client.MinecraftClient; @@ -24,6 +21,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.CompletableFuture; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -43,8 +41,6 @@ public class SecretsTracker { ClientReceiveMessageEvents.GAME.register(SecretsTracker::onMessage); } - //If -1 is somehow encountered, it would be very rare, so I just disregard its possibility for now - //people would probably recognize if it was inaccurate so yeah private static void calculate(RunPhase phase) { switch (phase) { case START -> CompletableFuture.runAsync(() -> { @@ -57,11 +53,11 @@ public class SecretsTracker { //The player name will be blank if there isn't a player at that index if (!playerName.isEmpty()) { - //If the player was a part of the last run (and didn't have -1 secret count) and that run ended less than 5 mins ago then copy the secrets over - if (lastRun != null && System.currentTimeMillis() <= lastRunEnded + 300_000 && lastRun.secretCounts().getOrDefault(playerName, -1) != -1) { - newlyStartedRun.secretCounts().put(playerName, lastRun.secretCounts().getInt(playerName)); + //If the player was a part of the last run, had non-empty secret data and that run ended less than 5 mins ago then copy the secret data over + if (lastRun != null && System.currentTimeMillis() <= lastRunEnded + 300_000 && lastRun.playersSecretData().getOrDefault(playerName, SecretData.EMPTY) != SecretData.EMPTY) { + newlyStartedRun.playersSecretData().put(playerName, lastRun.playersSecretData().get(playerName)); } else { - newlyStartedRun.secretCounts().put(playerName, getPlayerSecrets(playerName).leftInt()); + newlyStartedRun.playersSecretData().put(playerName, getPlayerSecrets(playerName)); } } } @@ -72,22 +68,23 @@ public class SecretsTracker { case END -> CompletableFuture.runAsync(() -> { //In case the game crashes from something if (currentRun != null) { - Object2ObjectOpenHashMap<String, IntIntPair> secretsFound = new Object2ObjectOpenHashMap<>(); + Object2ObjectOpenHashMap<String, SecretData> secretsFound = new Object2ObjectOpenHashMap<>(); //Update secret counts - for (Entry<String> entry : currentRun.secretCounts().object2IntEntrySet()) { + for (Entry<String, SecretData> entry : currentRun.playersSecretData().entrySet()) { String playerName = entry.getKey(); - int startingSecrets = entry.getIntValue(); - IntIntPair secretsNow = getPlayerSecrets(playerName); - int secretsPlayerFound = secretsNow.leftInt() - startingSecrets; + SecretData startingSecrets = entry.getValue(); + SecretData secretsNow = getPlayerSecrets(playerName); + int secretsPlayerFound = secretsNow.secrets() - startingSecrets.secrets(); - secretsFound.put(playerName, IntIntPair.of(secretsPlayerFound, secretsNow.rightInt())); - entry.setValue(secretsNow.leftInt()); + //Add an entry to the secretsFound map with the data - if the secret data from now or the start was cached a warning will be shown + secretsFound.put(playerName, secretsNow.updated(secretsPlayerFound, startingSecrets.cached() || secretsNow.cached())); + entry.setValue(secretsNow); } //Print the results all in one go, so its clean and less of a chance of it being broken up - for (Map.Entry<String, IntIntPair> entry : secretsFound.entrySet()) { - sendResultMessage(entry.getKey(), entry.getValue().leftInt(), entry.getValue().rightInt(), true); + for (Map.Entry<String, SecretData> entry : secretsFound.entrySet()) { + sendResultMessage(entry.getKey(), entry.getValue(), true); } //Swap the current and last run as well as mark the run end time @@ -95,30 +92,31 @@ public class SecretsTracker { lastRun = currentRun; currentRun = null; } else { - sendResultMessage(null, -1, -1, false); + sendResultMessage(null, null, false); } }); } } - private static void sendResultMessage(String player, int secrets, int cacheAge, boolean success) { + private static void sendResultMessage(String player, SecretData secretData, boolean success) { + @SuppressWarnings("resource") PlayerEntity playerEntity = MinecraftClient.getInstance().player; if (playerEntity != null) { if (success) { - playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.dungeons.secretsTracker.feedback", Text.literal(player).withColor(0xf57542), "§7" + secrets, getCacheText(cacheAge)))); + playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.dungeons.secretsTracker.feedback", Text.literal(player).withColor(0xf57542), "§7" + secretData.secrets(), getCacheText(secretData.cached(), secretData.cacheAge())))); } else { playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.dungeons.secretsTracker.failFeedback"))); } } } - private static Text getCacheText(int cacheAge) { - return Text.literal("\u2139").styled(style -> style.withColor(cacheAge == -1 ? 0x218bff : 0xeac864).withHoverEvent( - new HoverEvent(HoverEvent.Action.SHOW_TEXT, cacheAge == -1 ? Text.translatable("skyblocker.api.cache.MISS") : Text.translatable("skyblocker.api.cache.HIT", cacheAge)))); + private static Text getCacheText(boolean cached, int cacheAge) { + return Text.literal("\u2139").styled(style -> style.withColor(cached ? 0xeac864 : 0x218bff).withHoverEvent( + new HoverEvent(HoverEvent.Action.SHOW_TEXT, cached ? Text.translatable("skyblocker.api.cache.HIT", cacheAge) : Text.translatable("skyblocker.api.cache.MISS")))); } private static void onMessage(Text text, boolean overlay) { - if (Utils.isInDungeons() && SkyblockerConfigManager.get().locations.dungeons.playerSecretsTracker) { + if (Utils.isInDungeons() && SkyblockerConfigManager.get().locations.dungeons.playerSecretsTracker && !overlay) { String message = Formatting.strip(text.getString()); try { @@ -136,35 +134,44 @@ public class SecretsTracker { return matcher != null ? matcher.group("name") : ""; } - private static IntIntPair getPlayerSecrets(String name) { + private static SecretData getPlayerSecrets(String name) { String uuid = ApiUtils.name2Uuid(name); if (!uuid.isEmpty()) { try (ApiResponse response = Http.sendHypixelRequest("player", "?uuid=" + uuid)) { - return IntIntPair.of(getSecretCountFromAchievements(JsonParser.parseString(response.content()).getAsJsonObject()), response.age()); + return new SecretData(getSecretCountFromAchievements(JsonParser.parseString(response.content()).getAsJsonObject()), response.cached(), response.age()); } catch (Exception e) { LOGGER.error("[Skyblocker] Encountered an error while trying to fetch {} secret count!", name + "'s", e); } } - return IntIntPair.of(-1, -1); + return SecretData.EMPTY; } /** * Gets a player's secret count from their hypixel achievements */ private static int getSecretCountFromAchievements(JsonObject playerJson) { - JsonObject player = playerJson.get("player").getAsJsonObject(); - JsonObject achievements = (player.has("achievements")) ? player.get("achievements").getAsJsonObject() : null; + JsonObject player = playerJson.getAsJsonObject("player"); + JsonObject achievements = player.has("achievements") ? player.getAsJsonObject("achievements") : null; return (achievements != null && achievements.has("skyblock_treasure_hunter")) ? achievements.get("skyblock_treasure_hunter").getAsInt() : 0; } /** * This will either reflect the value at the start or the end depending on when this is called */ - private record TrackedRun(Object2IntOpenHashMap<String> secretCounts) { + private record TrackedRun(Object2ObjectOpenHashMap<String, SecretData> playersSecretData) { private TrackedRun() { - this(new Object2IntOpenHashMap<>()); + this(new Object2ObjectOpenHashMap<>()); + } + } + + private record SecretData(int secrets, boolean cached, int cacheAge) { + private static final SecretData EMPTY = new SecretData(0, false, 0); + + //If only we had Derived Record Creation :( - https://bugs.openjdk.org/browse/JDK-8321133 + private SecretData updated(int secrets, boolean cached) { + return new SecretData(secrets, cached, this.cacheAge); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java index 5913a3c6..608873c0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -203,8 +203,8 @@ public class DwarvenHud { } public static void update() { - if (client.player == null || client.getNetworkHandler() == null || !SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions || (!Utils.isInCrystalHollows() - && !Utils.isInDwarvenMines())) + if (client.player == null || client.getNetworkHandler() == null || (!SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledPowder) + || (!Utils.isInCrystalHollows() && !Utils.isInDwarvenMines())) return; commissionList = new ArrayList<>(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchOverlay/OverlayScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java index e1545c6c..b8907e27 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchOverlay/OverlayScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java @@ -1,4 +1,4 @@ -package de.hysky.skyblocker.skyblock.searchOverlay; +package de.hysky.skyblocker.skyblock.searchoverlay; import de.hysky.skyblocker.config.SkyblockerConfigManager; import net.minecraft.client.gui.DrawContext; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchOverlay/SearchOverManager.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java index b2a453a9..1d740601 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchOverlay/SearchOverManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java @@ -1,4 +1,4 @@ -package de.hysky.skyblocker.skyblock.searchOverlay; +package de.hysky.skyblocker.skyblock.searchoverlay; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -96,13 +96,15 @@ public class SearchOverManager { HashMap<String, String> namesToId = new HashMap<>(); //get bazaar items - try (Http.ApiResponse response = Http.sendHypixelRequest("skyblock/bazaar", "")) { - JsonObject products = JsonParser.parseString(response.content()).getAsJsonObject().get("products").getAsJsonObject(); + try { + if (TooltipInfoType.BAZAAR.getData() == null) TooltipInfoType.BAZAAR.run(); + + JsonObject products = TooltipInfoType.BAZAAR.getData(); for (Map.Entry<String, JsonElement> entry : products.entrySet()) { if (entry.getValue().isJsonObject()) { JsonObject product = entry.getValue().getAsJsonObject(); - String id = product.get("product_id").getAsString(); - int sellVolume = product.get("quick_status").getAsJsonObject().get("sellVolume").getAsInt(); + String id = product.get("id").getAsString(); + int sellVolume = product.get("sellVolume").getAsInt(); if (sellVolume == 0) continue; //do not add items that do not sell e.g. they are not actual in the bazaar Matcher matcher = BAZAAR_ENCHANTMENT_PATTERN.matcher(id); @@ -334,7 +336,7 @@ public class SearchOverManager { } } - static Pair<String, String> splitString(String s) { + public static Pair<String, String> splitString(String s) { if (s.length() <= 15) { return Pair.of(s, ""); } diff --git a/src/test/java/de/hysky/skyblocker/skyblock/searchOverlay/SplitStringTest.java b/src/test/java/de/hysky/skyblocker/skyblock/searchoverlay/SplitStringTest.java index c397b5a4..a9fd541f 100644 --- a/src/test/java/de/hysky/skyblocker/skyblock/searchOverlay/SplitStringTest.java +++ b/src/test/java/de/hysky/skyblocker/skyblock/searchoverlay/SplitStringTest.java @@ -1,4 +1,4 @@ -package de.hysky.skyblocker.skyblock.searchOverlay; +package de.hysky.skyblocker.skyblock.searchoverlay; import it.unimi.dsi.fastutil.Pair; import org.junit.jupiter.api.Assertions; |