diff options
author | vicisacat <victor.branchu@gmail.com> | 2024-03-23 23:26:51 +0100 |
---|---|---|
committer | vicisacat <victor.branchu@gmail.com> | 2024-04-12 17:18:23 +0200 |
commit | 7dc87dce4304a9d563be8d491cb047db6e9a81d3 (patch) | |
tree | 252f0a7a28185d26d3356a186b104f2937e4a94f /src/main/java/de | |
parent | 7e9fb689583c640cd664b9578402eb434fe15f17 (diff) | |
download | Skyblocker-7dc87dce4304a9d563be8d491cb047db6e9a81d3.tar.gz Skyblocker-7dc87dce4304a9d563be8d491cb047db6e9a81d3.tar.bz2 Skyblocker-7dc87dce4304a9d563be8d491cb047db6e9a81d3.zip |
slot highlight
Diffstat (limited to 'src/main/java/de')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java | 139 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java | 49 |
2 files changed, 124 insertions, 64 deletions
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<AuctionHouseS public static final int PREV_PAGE_BUTTON = 46; public static final int NEXT_PAGE_BUTTON = 53; + private final Int2BooleanOpenHashMap isSlotHighlighted = new Int2BooleanOpenHashMap(24); + // WIDGETS private SortWidget sortWidget; @@ -154,6 +161,14 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI<AuctionHouseS } @Override + protected void drawSlot(DrawContext context, Slot slot) { + if (isSlotHighlighted.getOrDefault(slot.id, false)) { + context.drawBorder(slot.x, slot.y, 16, 16, new Color(0, 255, 0, 100).getRGB()); + } + super.drawSlot(context, slot); + } + + @Override protected void onMouseClick(Slot slot, int slotId, int button, SlotActionType actionType) { if (slotId >= handler.getRows()*9) return; super.onMouseClick(slot, slotId, button, actionType); @@ -199,50 +214,88 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI<AuctionHouseS public void onSlotChange(AuctionHouseScreenHandler handler, int slotId, ItemStack stack) { if (client == null || stack.isEmpty()) return; isWaitingForServer = false; - if (slotId == PREV_PAGE_BUTTON) prevPageVisible = false; - if (slotId == NEXT_PAGE_BUTTON) nextPageVisible = false; - if (slotId == SORT_BUTTON_SLOT) { - sortWidget.setCurrent(SortWidget.Option.get(getOrdinal(stack.getTooltip(client.player, TooltipContext.BASIC)))); - } else if (slotId == AUCTION_TYPE_BUTTON_SLOT) { - auctionTypeWidget.setCurrent(AuctionTypeWidget.Option.get(getOrdinal(stack.getTooltip(client.player, TooltipContext.BASIC)))); - } else if (slotId == RARITY_BUTTON_SLOT) { - List<Text> 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<Text> 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<Text> 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<Text> 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<Text> 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<Text> 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<Text> 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<Text> 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); |