From f3ac04f7b60b0037cc29c4be7483289be48523c5 Mon Sep 17 00:00:00 2001 From: alex <8379108+Alex33856@users.noreply.github.com> Date: Sat, 2 May 2026 21:29:47 -0400 Subject: [PATCH 1/5] Fix Pets in Search Overlay --- .../skyblock/searchoverlay/SearchOverManager.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 8b63fc4a76a..a2abc0edc74 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java @@ -10,6 +10,7 @@ import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.injected.SkyblockerStack; +import de.hysky.skyblocker.skyblock.item.SkyblockItemRarity; import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.museum.Donation; @@ -44,6 +45,7 @@ import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -176,6 +178,15 @@ private static void loadItems() { for (Object2DoubleMap.Entry entry : TooltipInfoType.THREE_DAY_AVERAGE.getData().object2DoubleEntrySet()) { String id = entry.getKey(); + // Convert API ID to NEU ID for Pets + if (id.startsWith("LVL_1_")) { + id = id.substring(6); + var parts = id.split("_", 2); + if (parts.length != 2) continue; + Optional rarity = SkyblockItemRarity.containsName(parts[0]); + if (rarity.isEmpty()) continue; + id = parts[1] + ";" + rarity.get().ordinal(); + } //look up in NEU repo. id = id.split("[+-]")[0]; NEUItem neuItem = NEURepoManager.getItemByNeuId(id); From 79cb2a04df399d7dacb46d776450f2c23b6889c9 Mon Sep 17 00:00:00 2001 From: alex <8379108+Alex33856@users.noreply.github.com> Date: Mon, 4 May 2026 20:55:26 -0400 Subject: [PATCH 2/5] Separate and process level --- .../skyblock/searchoverlay/SearchOverManager.java | 12 +----------- .../java/de/hysky/skyblocker/utils/ItemUtils.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 11 deletions(-) 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 a2abc0edc74..17d31a282d7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java @@ -10,7 +10,6 @@ import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.injected.SkyblockerStack; -import de.hysky.skyblocker.skyblock.item.SkyblockItemRarity; import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.museum.Donation; @@ -45,7 +44,6 @@ import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -178,15 +176,7 @@ private static void loadItems() { for (Object2DoubleMap.Entry entry : TooltipInfoType.THREE_DAY_AVERAGE.getData().object2DoubleEntrySet()) { String id = entry.getKey(); - // Convert API ID to NEU ID for Pets - if (id.startsWith("LVL_1_")) { - id = id.substring(6); - var parts = id.split("_", 2); - if (parts.length != 2) continue; - Optional rarity = SkyblockItemRarity.containsName(parts[0]); - if (rarity.isEmpty()) continue; - id = parts[1] + ";" + rarity.get().ordinal(); - } + id = ItemUtils.getNeuIdFromApiId(id); //look up in NEU repo. id = id.split("[+-]")[0]; NEUItem neuItem = NEURepoManager.getItemByNeuId(id); diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 532a51f0359..724d9db89d7 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -24,6 +24,7 @@ import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; import de.hysky.skyblocker.utils.networth.NetworthCalculator; +import io.github.moulberry.repo.util.NEUId; import it.unimi.dsi.fastutil.doubles.DoubleBooleanPair; import it.unimi.dsi.fastutil.ints.IntIntPair; import it.unimi.dsi.fastutil.longs.LongBooleanPair; @@ -326,6 +327,20 @@ public static String getNeuId(DataComponentGetter stack) { }; } + public static @NEUId String getNeuIdFromApiId(String apiId) { + // Convert API ID to NEU ID for Pets + if (apiId.startsWith("LVL_")) { + String[] parts = apiId.split("_", 4); + if (parts.length != 4) return apiId; + Optional rarity = SkyblockItemRarity.containsName(parts[2]); + //noinspection OptionalIsPresent + if (rarity.isEmpty()) return apiId; + return parts[3] + ";" + rarity.get().ordinal() + "+" + parts[1]; + } + + return apiId; + } + /** * Parses the {@code petInfo} field from a pet item that has it into the {@link PetInfo} record. * From 262f5501157c52a4458f46d4f2c5b9d1ce728567 Mon Sep 17 00:00:00 2001 From: alex <8379108+Alex33856@users.noreply.github.com> Date: Mon, 4 May 2026 20:57:30 -0400 Subject: [PATCH 3/5] Store level 200 pets from API response --- .../searchoverlay/SearchOverManager.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) 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 17d31a282d7..c50a2cf875f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java @@ -17,6 +17,7 @@ import de.hysky.skyblocker.utils.BazaarProduct; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.FlexibleItemStack; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; import io.github.moulberry.repo.data.NEUItem; @@ -71,6 +72,7 @@ public class SearchOverManager { private static HashSet bazaarItems = new HashSet<>(); private static HashSet auctionItems = new HashSet<>(); private static HashSet auctionPets = new HashSet<>(); + private static HashSet level200Pets = new HashSet<>(); private static HashSet starableItems = new HashSet<>(); private static HashMap namesToNeuId = new HashMap<>(); @@ -124,6 +126,7 @@ private static void loadItems() { HashSet bazaarItems = new HashSet<>(); HashSet auctionItems = new HashSet<>(); HashSet auctionPets = new HashSet<>(); + HashSet level200Pets = new HashSet<>(); HashSet starableItems = new HashSet<>(); HashMap namesToNeuId = new HashMap<>(); @@ -178,14 +181,19 @@ private static void loadItems() { String id = entry.getKey(); id = ItemUtils.getNeuIdFromApiId(id); //look up in NEU repo. - id = id.split("[+-]")[0]; + String[] parts = id.split("[+-]"); + id = parts[0]; NEUItem neuItem = NEURepoManager.getItemByNeuId(id); if (neuItem != null) { String name = ChatFormatting.stripFormatting(neuItem.getDisplayName()); //add names that are pets to the list of pets to work with the lvl 100 button if (name != null && name.startsWith(PET_NAME_START)) { name = name.replace(PET_NAME_START, ""); - auctionPets.add(name.toLowerCase(Locale.ENGLISH)); + String petName = name.toLowerCase(Locale.ENGLISH); + auctionPets.add(petName); + if (parts.length >= 2 && parts[1].equals("200")) { + level200Pets.add(petName); + } } //if it has essence cost add to starable items if (name != null && essenceCosts.contains(neuItem.getSkyblockItemId())) { @@ -202,6 +210,7 @@ private static void loadItems() { SearchOverManager.bazaarItems = bazaarItems; SearchOverManager.auctionItems = auctionItems; SearchOverManager.auctionPets = auctionPets; + SearchOverManager.level200Pets = level200Pets; SearchOverManager.starableItems = starableItems; SearchOverManager.namesToNeuId = namesToNeuId; } @@ -446,11 +455,8 @@ private static void addExtras() { if (maxPetLevel) { String lcSearch = search.toLowerCase(Locale.ENGLISH); if (auctionPets.contains(lcSearch)) { - if (lcSearch.endsWith("dragon") && !lcSearch.startsWith("ender")) { - search = "[Lvl 200] " + search; - } else { - search = "[Lvl 100] " + search; - } + int maxLevel = level200Pets.contains(lcSearch) ? 200 : 100; + search = "[Lvl %d] %s".formatted(maxLevel, search); } } else { // still filter for only pets From 5022d6d6081cbc0374a16622cacb2273794b7ced Mon Sep 17 00:00:00 2001 From: alex <8379108+Alex33856@users.noreply.github.com> Date: Mon, 4 May 2026 21:12:34 -0400 Subject: [PATCH 4/5] Convert Potion Id --- .../java/de/hysky/skyblocker/utils/ItemUtils.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 724d9db89d7..8ec4f6c452e 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -328,7 +328,7 @@ public static String getNeuId(DataComponentGetter stack) { } public static @NEUId String getNeuIdFromApiId(String apiId) { - // Convert API ID to NEU ID for Pets + // Pets if (apiId.startsWith("LVL_")) { String[] parts = apiId.split("_", 4); if (parts.length != 4) return apiId; @@ -338,6 +338,16 @@ public static String getNeuId(DataComponentGetter stack) { return parts[3] + ";" + rarity.get().ordinal() + "+" + parts[1]; } + // Potions + if (apiId.contains("_POTION_")) { + String[] parts = apiId.split("_POTION_", 2); + if (parts.length != 2) return apiId; + String potionName = parts[0]; + parts = parts[1].split("_", 2); + String potionLevel = parts[0]; + return "POTION_" + potionName + ";" + potionLevel; + } + return apiId; } From 90979eea727231767275dcd019877a62b5b1f2f5 Mon Sep 17 00:00:00 2001 From: alex <8379108+Alex33856@users.noreply.github.com> Date: Mon, 4 May 2026 21:13:20 -0400 Subject: [PATCH 5/5] Fix Potions API ID --- src/main/java/de/hysky/skyblocker/utils/ItemUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 8ec4f6c452e..8c3201bfff3 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -211,9 +211,9 @@ public static String getSkyblockApiId(DataComponentGetter stack) { } } case "POTION" -> { - String enhanced = customData.contains("enhanced") ? "_ENHANCED" : ""; - String extended = customData.contains("extended") ? "_EXTENDED" : ""; - String splash = customData.contains("splash") ? "_SPLASH" : ""; + String enhanced = customData.getBooleanOr("enhanced", false) ? "_ENHANCED" : ""; + String extended = customData.getBooleanOr("extended", false) ? "_EXTENDED" : ""; + String splash = customData.getBooleanOr("splash", false) ? "_SPLASH" : ""; if (customData.contains("potion") && customData.contains("potion_level")) { return (customData.getStringOr("potion", "") + "_" + id + "_" + customData.getIntOr("potion_level", 0) + enhanced + extended + splash).toUpperCase(Locale.ENGLISH);