From 047b356c63d5e271930f09a8ac40073bae6c8167 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sun, 24 Mar 2024 16:04:12 +0100 Subject: Auction view edge cases --- .../skyblock/auction/AuctionViewScreen.java | 111 ++++++++++++++++++--- .../skyblocker/skyblock/auction/EditBidPopup.java | 16 ++- 2 files changed, 109 insertions(+), 18 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionViewScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionViewScreen.java index d8612abc..1654334c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionViewScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionViewScreen.java @@ -17,11 +17,15 @@ import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.MutableText; import net.minecraft.text.Style; import net.minecraft.text.Text; +import net.minecraft.text.TextColor; import net.minecraft.util.Colors; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; public class AuctionViewScreen extends AbstractCustomHypixelGUI { protected static final Identifier BACKGROUND_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/auctions_gui/browser/background_view.png"); @@ -34,12 +38,13 @@ public class AuctionViewScreen extends AbstractCustomHypixelGUI { if (buySlotID == -1) return; clickSlot(buySlotID); - }).size(50, 12).build(); + }).size(60, 15).build(); verticalLayout.add(buyButton); verticalLayout.forEachChild(this::addDrawableChild); updateLayout(); @@ -84,12 +90,44 @@ public class AuctionViewScreen extends AbstractCustomHypixelGUI cantAffordText.setMessage(Text.literal("Can't Afford!").withColor(Colors.RED)); - case TOP_BID -> cantAffordText.setMessage(Text.literal("Already top bid!").withColor(Colors.LIGHT_YELLOW)); - case AFFORD -> cantAffordText.setMessage(Text.empty()); + case CANT_AFFORD -> { + infoTextWidget.setMessage(Text.literal("Can't Afford!").withColor(Colors.RED)); + buyButton.active = false; + } + case TOP_BID -> infoTextWidget.setMessage(Text.literal("Already top bid!").withColor(Colors.LIGHT_YELLOW)); + case AFFORD -> infoTextWidget.setMessage(Text.empty()); + case COLLECT_AUCTION -> { + infoTextWidget.setMessage(changeProfile ? Text.literal("On a different profile"): wonAuction ? Text.empty() : Text.literal("Didn't win :(")); + //priceWidget.setMessage(Text.empty()); + priceWidget.active = false; + + if (changeProfile) { + buyButton.setMessage(Text.literal("Change Profile").setStyle(Style.EMPTY.withColor(Formatting.AQUA))); + } else if (wonAuction) { + buyButton.setMessage(Text.literal("Collect Auction")); + } else { + buyButton.setMessage(Text.literal("Collect Bid")); + } + buyButton.setWidth(textRenderer.getWidth(buyButton.getMessage()) + 4); + + priceTextWidget.setMessage(Text.literal("Auction Ended!")); + priceTextWidget.setWidth(textRenderer.getWidth(priceTextWidget.getMessage())); + } + case CANCELLABLE_AUCTION -> { + buyButton.setMessage(Text.literal("Cancel Auction").setStyle(Style.EMPTY.withColor(Formatting.RED))); + buyButton.setWidth(textRenderer.getWidth(buyButton.getMessage()) + 4); + + buyButton.active = true; + buyButton.visible = true; + } + case OWN_AUCTION -> { + buyButton.visible = false; + priceWidget.active = false; + + infoTextWidget.setMessage(Text.literal("This is your auction!")); + } } - cantAffordText.setWidth(textRenderer.getWidth(cantAffordText.getMessage())); - buyButton.active = buyState != BuyState.CANT_AFFORD; + infoTextWidget.setWidth(textRenderer.getWidth(infoTextWidget.getMessage())); updateLayout(); } @@ -120,7 +158,7 @@ public class AuctionViewScreen extends AbstractCustomHypixelGUI tooltip) { if (priceParsed) return; String minBid = null; - String priceString = "???"; + String priceString = null; + AtomicReference stringAtomicReference = new AtomicReference<>(""); + for (Text text : tooltip) { String string = text.getString(); String thingToLookFor = (isBinAuction) ? "price:" : "new bid:"; - if (string.toLowerCase().contains(thingToLookFor)) { + String lowerCase = string.toLowerCase(); + if (lowerCase.contains(thingToLookFor)) { String[] split = string.split(":"); if (split.length < 2) continue; priceString = split[1].trim(); - break; - } else if (string.toLowerCase().contains("minimum bid:") && !isBinAuction) { + } else if (lowerCase.contains("minimum bid:") && !isBinAuction) { String[] split = string.split(":"); if (split.length < 2) continue; minBid = split[1].replace("coins", "").replace(",", "").trim(); + } else if (lowerCase.contains("you pay:")) { + String[] split = string.split(":"); + if (split.length < 2) continue; + if (buyState != BuyState.CANT_AFFORD && !isBinAuction) { + infoTextWidget.setMessage(Text.literal("You pay: " + split[1].trim())); + infoTextWidget.setWidth(textRenderer.getWidth(infoTextWidget.getMessage())); + } + + } else if (lowerCase.contains("top bid:")) { // Shows up when an auction ended and you lost + wonAuction = false; + } else if (lowerCase.contains("correct profile")) { // When an auction ended but on a different profile + changeProfile = true; + priceWidget.setMessage(Text.empty()); + } else if (lowerCase.contains("own auction")) { // it's yours + changeState(BuyState.OWN_AUCTION); } + text.visit((style, asString) -> { + // The regex removes [, ] and +. To ignore mvp++ rank and orange + in mvp+ + String res = Objects.equals(style.getColor(), TextColor.fromFormatting(Formatting.GOLD)) && !asString.matches(".*[]\\[+].*") && !asString.contains("Collect") ? asString: null; + return Optional.ofNullable(res); + }, Style.EMPTY).ifPresent(s -> stringAtomicReference.set(stringAtomicReference.get()+s)); } + //System.out.println("Experiment: " + stringAtomicReference.get()); + if (priceString == null) priceString = stringAtomicReference.get(); if (minBid != null) this.minBid = minBid; else this.minBid = priceString; priceText = Text.literal(priceString).setStyle(Style.EMPTY.withFormatting(Formatting.BOLD).withColor(Formatting.GOLD)); @@ -211,6 +287,9 @@ public class AuctionViewScreen extends AbstractCustomHypixelGUI