diff options
Diffstat (limited to 'src/main/java/de/hysky')
3 files changed, 55 insertions, 7 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java index 12547018..fd373f73 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.config.categories; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.utils.waypoint.Waypoint; import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.Option; @@ -210,6 +211,15 @@ public class HelperCategory { newValue -> config.helpers.bazaar.enableBazaarHelper = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.<BazaarHelper.HighlightingScheme>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.bazaar.highlightingScheme")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.bazaar.highlightingScheme.@Tooltip"))) + .binding(defaults.helpers.bazaar.highlightingScheme, + () -> config.helpers.bazaar.highlightingScheme, + newValue -> config.helpers.bazaar.highlightingScheme = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build() + ) .build()) .build(); diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java index 6ddb1a74..f805d69f 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.config.configs; +import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.utils.waypoint.Waypoint; import dev.isxander.yacl3.config.v2.api.SerialEntry; @@ -98,5 +99,7 @@ public class HelperConfig { public static class Bazaar { @SerialEntry public boolean enableBazaarHelper = true; + @SerialEntry + public BazaarHelper.HighlightingScheme highlightingScheme = BazaarHelper.HighlightingScheme.ORDER_TYPE; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java index c9a4b732..8a9a7aa3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java @@ -6,6 +6,9 @@ import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import de.hysky.skyblocker.utils.render.gui.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Formatting; +import org.apache.commons.lang3.math.NumberUtils; import java.util.ArrayList; import java.util.List; @@ -14,6 +17,7 @@ import java.util.regex.Pattern; public class BazaarHelper extends ContainerSolver { private static final Pattern ORDER_PATTERN = Pattern.compile("You have [\\d,]+ (items|coins) to claim!"); + private static final Pattern FILLED_PATTERN = Pattern.compile("Filled: \\S+ \\(?([\\d.]+)%\\)?!?"); public BazaarHelper() { super("Your Bazaar Orders"); @@ -27,20 +31,51 @@ public class BazaarHelper extends ContainerSolver { @Override protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) { ArrayList<ColorHighlight> highlights = new ArrayList<>(); - for (int slot = 0; slot < slots.size(); slot++) { + // Skip the first and last 10 slots as those are always glass panes. + for (int slot = 10; slot < slots.size() - 10; slot++) { + ItemStack item = slots.get(slot); + if (item.isEmpty() || item.isOf(Items.BLACK_STAINED_GLASS_PANE)) continue; if (ItemUtils.getLoreLineIf(slots.get(slot), str -> str.equals("Expired!")) != null) { highlights.add(ColorHighlight.red(slot)); continue; } - - Matcher matcher = ItemUtils.getLoreLineIfMatch(slots.get(slot), ORDER_PATTERN); - if (matcher != null) { - switch (matcher.group(1)) { - case "items" -> highlights.add(new ColorHighlight(slot, 0x7000AA00)); - case "coins" -> highlights.add(new ColorHighlight(slot, 0x70FFAA00)); + switch (SkyblockerConfigManager.get().helpers.bazaar.highlightingScheme) { + case ORDER_TYPE -> { + Matcher matcher = ItemUtils.getLoreLineIfMatch(slots.get(slot), ORDER_PATTERN); + if (matcher != null) { + switch (matcher.group(1)) { + case "items" -> highlights.add(new ColorHighlight(slot, Formatting.DARK_GREEN.getColorValue() & 0x70000000)); + case "coins" -> highlights.add(new ColorHighlight(slot, Formatting.GOLD.getColorValue() & 0x70000000)); + } + } + } + case FULFILLMENT -> { + Matcher matcher = ItemUtils.getLoreLineIfMatch(slots.get(slot), FILLED_PATTERN); + if (matcher != null) { + int filled = NumberUtils.toInt(matcher.group(1)); + if (filled < 100) { + highlights.add(ColorHighlight.yellow(slot)); + } else if (filled == 100) { + highlights.add(ColorHighlight.green(slot)); + } + } } } } + return highlights; } + + public enum HighlightingScheme { + ORDER_TYPE, + FULFILLMENT; + + @Override + public String toString() { + return switch (this) { + case ORDER_TYPE -> "Order Type"; + case FULFILLMENT -> "Fulfillment"; + }; + } + } } |