From 7dc87dce4304a9d563be8d491cb047db6e9a81d3 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sat, 23 Mar 2024 23:26:51 +0100 Subject: slot highlight --- .../skyblock/auction/AuctionBrowserScreen.java | 139 ++++++++++++++------- .../skyblock/item/tooltip/ItemTooltip.java | 49 ++++---- 2 files changed, 124 insertions(+), 64 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java index 360c0cd3..0e40758f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java @@ -1,11 +1,15 @@ package de.hysky.skyblocker.skyblock.auction; +import com.google.gson.JsonElement; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.auction.widgets.AuctionTypeWidget; import de.hysky.skyblocker.skyblock.auction.widgets.CategoryTabWidget; import de.hysky.skyblocker.skyblock.auction.widgets.RarityWidget; import de.hysky.skyblocker.skyblock.auction.widgets.SortWidget; +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import de.hysky.skyblocker.utils.render.gui.AbstractCustomHypixelGUI; +import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -25,6 +29,7 @@ import net.minecraft.util.Colors; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; +import java.awt.*; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; @@ -50,6 +55,8 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI= handler.getRows()*9) return; @@ -199,50 +214,88 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI tooltip = stack.getTooltip(client.player, TooltipContext.BASIC); - int ordinal = getOrdinal(tooltip); - String split = tooltip.get(ordinal+2).getString().substring(2); - rarityWidget.setText(tooltip.subList(1, tooltip.size()-3), split); - } else if (slotId == RESET_BUTTON_SLOT) { - if (resetFiltersButton != null) resetFiltersButton.active = handler.getSlot(slotId).getStack().isOf(Items.ANVIL); - } else if (slotId < this.handler.getRows()*9 && slotId%9 == 0) { - CategoryTabWidget categoryTabWidget = categoryTabWidgets.get(slotId / 9); - categoryTabWidget.setSlotId(slotId); - categoryTabWidget.setIcon(handler.getSlot(slotId).getStack()); - List tooltip = handler.getSlot(slotId).getStack().getTooltip(client.player, TooltipContext.BASIC); - for (int j = tooltip.size() - 1; j >= 0; j--) { - String lowerCase = tooltip.get(j).getString().toLowerCase(); - if (lowerCase.contains("currently")) { - categoryTabWidget.setToggled(true); - break; - } else if (lowerCase.contains("click")) { - categoryTabWidget.setToggled(false); - break; - } else categoryTabWidget.setToggled(false); + + switch (slotId) { + case PREV_PAGE_BUTTON -> { + prevPageVisible = false; + if (stack.isOf(Items.ARROW)) { + prevPageVisible = true; + parsePage(stack); + } + } + case NEXT_PAGE_BUTTON -> { + nextPageVisible = false; + if (stack.isOf(Items.ARROW)) { + nextPageVisible = true; + parsePage(stack); + } + } + case SORT_BUTTON_SLOT -> sortWidget.setCurrent(SortWidget.Option.get(getOrdinal(stack.getTooltip(client.player, TooltipContext.BASIC)))); + case AUCTION_TYPE_BUTTON_SLOT -> auctionTypeWidget.setCurrent(AuctionTypeWidget.Option.get(getOrdinal(stack.getTooltip(client.player, TooltipContext.BASIC)))); + case RARITY_BUTTON_SLOT -> { + List tooltip = stack.getTooltip(client.player, TooltipContext.BASIC); + int ordinal = getOrdinal(tooltip); + String split = tooltip.get(ordinal+2).getString().substring(2); + rarityWidget.setText(tooltip.subList(1, tooltip.size()-3), split); + } + case RESET_BUTTON_SLOT -> { + if (resetFiltersButton != null) resetFiltersButton.active = handler.getSlot(slotId).getStack().isOf(Items.ANVIL); + } + case SEARCH_BUTTON_SLOT -> { + List tooltipSearch = stack.getTooltip(client.player, TooltipContext.BASIC); + for (Text text : tooltipSearch) { + String string = text.getString(); + if (string.contains("Filtered:")) { + String[] splitSearch = string.split(":"); + if (splitSearch.length < 2) { + search = ""; + } else search = splitSearch[1].trim(); + break; + } + } } - } else if (slotId == PREV_PAGE_BUTTON && stack.isOf(Items.ARROW)) { - prevPageVisible = true; - parsePage(stack); - } else if (slotId == NEXT_PAGE_BUTTON && stack.isOf(Items.ARROW)) { - nextPageVisible = true; - parsePage(stack); - } else if (slotId == SEARCH_BUTTON_SLOT) { - List tooltip = stack.getTooltip(client.player, TooltipContext.BASIC); - for (Text text : tooltip) { - String string = text.getString(); - if (string.contains("Filtered:")) { - String[] split = string.split(":"); - if (split.length < 2) { - search = ""; - } else search = split[1].trim(); - break; + default -> { + if (slotId < this.handler.getRows()*9 && slotId%9 == 0) { + CategoryTabWidget categoryTabWidget = categoryTabWidgets.get(slotId / 9); + categoryTabWidget.setSlotId(slotId); + categoryTabWidget.setIcon(handler.getSlot(slotId).getStack()); + List tooltipDefault = handler.getSlot(slotId).getStack().getTooltip(client.player, TooltipContext.BASIC); + for (int j = tooltipDefault.size() - 1; j >= 0; j--) { + String lowerCase = tooltipDefault.get(j).getString().toLowerCase(); + if (lowerCase.contains("currently")) { + categoryTabWidget.setToggled(true); + break; + } else if (lowerCase.contains("click")) { + categoryTabWidget.setToggled(false); + break; + } else categoryTabWidget.setToggled(false); + } + } else if (slotId > 9 && slotId < (handler.getRows()-1)*9 && slotId%9 > 1 && slotId%9 < 8) { + List tooltip = stack.getTooltip(client.player, TooltipContext.BASIC); + for (int k = tooltip.size() - 1; k >= 0; k--) { + Text text = tooltip.get(k); + String string = text.getString(); + if (string.toLowerCase().contains("buy it now:")) { + String[] split = string.split(":"); + if (split.length < 2) continue; + String coins = split[1].replace(",", "").replace("coins", "").trim(); + try { + int parsed = Integer.parseInt(coins); + String name = ItemTooltip.getInternalNameFromNBT(stack, false); + String internalID = ItemTooltip.getInternalNameFromNBT(stack, true); + String neuName = name; + if (name == null || internalID == null) break; + if (name.startsWith("ISSHINY_")) { + neuName = internalID; + } + JsonElement jsonElement = TooltipInfoType.THREE_DAY_AVERAGE.getData().get(ItemTooltip.getNeuName(internalID, neuName)); + if (jsonElement == null) break; + else { + isSlotHighlighted.put(slotId, jsonElement.getAsDouble() > parsed); + } + } catch (NumberFormatException ignored) {} + } + } } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index 62c50735..7c3be9c9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -20,6 +20,7 @@ import net.minecraft.nbt.NbtElement; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,27 +93,7 @@ public class ItemTooltip { We are skipping check average prices for potions, runes and enchanted books because there is no data for their in API. */ - switch (internalID) { - case "PET" -> { - neuName = neuName.replaceAll("LVL_\\d*_", ""); - String[] parts = neuName.split("_"); - String type = parts[0]; - neuName = neuName.replaceAll(type + "_", ""); - neuName = neuName + "-" + type; - neuName = neuName.replace("UNCOMMON", "1") - .replace("COMMON", "0") - .replace("RARE", "2") - .replace("EPIC", "3") - .replace("LEGENDARY", "4") - .replace("MYTHIC", "5") - .replace("-", ";"); - } - case "RUNE" -> neuName = neuName.replaceAll("_(?!.*_)", ";"); - case "POTION" -> neuName = ""; - case "ATTRIBUTE_SHARD" -> - neuName = internalID + "+" + neuName.replace("SHARD-", "").replaceAll("_(?!.*_)", ";"); - default -> neuName = neuName.replace(":", "-"); - } + neuName = getNeuName(internalID, neuName); if (!neuName.isEmpty() && lbinExist) { SkyblockerConfig.Average type = config.avg; @@ -264,6 +245,32 @@ public class ItemTooltip { } } + @NotNull + public static String getNeuName(String internalID, String neuName) { + switch (internalID) { + case "PET" -> { + neuName = neuName.replaceAll("LVL_\\d*_", ""); + String[] parts = neuName.split("_"); + String type = parts[0]; + neuName = neuName.replaceAll(type + "_", ""); + neuName = neuName + "-" + type; + neuName = neuName.replace("UNCOMMON", "1") + .replace("COMMON", "0") + .replace("RARE", "2") + .replace("EPIC", "3") + .replace("LEGENDARY", "4") + .replace("MYTHIC", "5") + .replace("-", ";"); + } + case "RUNE" -> neuName = neuName.replaceAll("_(?!.*_)", ";"); + case "POTION" -> neuName = ""; + case "ATTRIBUTE_SHARD" -> + neuName = internalID + "+" + neuName.replace("SHARD-", "").replaceAll("_(?!.*_)", ";"); + default -> neuName = neuName.replace(":", "-"); + } + return neuName; + } + private static void addExoticTooltip(List lines, String internalID, NbtCompound nbt, String colorHex, String expectedHex, String existingTooltip) { if (expectedHex != null && !colorHex.equalsIgnoreCase(expectedHex) && !ExoticTooltip.isException(internalID, colorHex) && !ExoticTooltip.intendedDyed(nbt)) { final ExoticTooltip.DyeType type = ExoticTooltip.checkDyeType(colorHex); -- cgit