diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java index db49702d9c04..f954015ac8bf 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java @@ -171,6 +171,20 @@ public class ChocolateFactoryConfig { @FeatureToggle public boolean hoppityMenuShortcut = true; + @Expose + @ConfigOption(name = "Highlight Requirement Rabbits", desc = "Highlight rabbits that have requirements.\n" + + "§cRed: Requirement not met.\n" + + "§aGreen: Requirement met.") + @ConfigEditorBoolean + @FeatureToggle + public boolean highlightRabbitsWithRequirement = false; + + @Expose + @ConfigOption(name = "Only Requirement Not Met", desc = "Only highlight the rabbits you don't have the requirement for.") + @ConfigEditorBoolean + @FeatureToggle + public boolean onlyHighlightRequirementNotMet = true; + @Expose @ConfigOption(name = "Chocolate Shop Price", desc = "") @Accordion diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt index f8ef5ac62061..b570ae37338d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt @@ -1,13 +1,16 @@ package at.hannibal2.skyhanni.features.event.hoppity import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.events.GuiContainerEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryAPI import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.DisplayTableEntry +import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.round import at.hannibal2.skyhanni.utils.NEUInternalName @@ -15,8 +18,10 @@ import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.formatInt import at.hannibal2.skyhanni.utils.RegexUtils.anyMatches +import at.hannibal2.skyhanni.utils.RegexUtils.find import at.hannibal2.skyhanni.utils.RegexUtils.matchFirst import at.hannibal2.skyhanni.utils.RegexUtils.matches +import at.hannibal2.skyhanni.utils.RenderUtils.highlight import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.renderables.Renderable @@ -49,6 +54,22 @@ object HoppityCollectionStats { "rabbits.found", "§.§l§m[ §a-z]+§r §.(?[0-9]+)§./§.(?[0-9]+)" ) + /** + * REGEX-TEST: §a✔ §7Requirement + */ + private val requirementMet by patternGroup.pattern( + "rabbit.requirement.met", + "§a✔ §7Requirement" + ) + /** + * REGEX-TEST: §c✖ §7Requirement §e0§7/§a15 + * REGEX-TEST: §c✖ §7Requirement §e6§7/§a20 + * REGEX-TEST: §c✖ §7Requirement §e651§7/§a1,000 + */ + private val requirementNotMet by patternGroup.pattern( + "rabbit.requirement.notmet", + "§c✖ §7Requirement.*", + ) private var display = emptyList() private val loggedRabbits @@ -82,6 +103,21 @@ object HoppityCollectionStats { ) } + // TODO cache with inventory update event + @SubscribeEvent + fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { + if (!config.highlightRabbitsWithRequirement) return + if (!inInventory) return + + for (slot in InventoryUtils.getItemsInOpenChest()) { + val lore = slot.stack.getLore() + if (lore.any { requirementMet.find(it) } && !config.onlyHighlightRequirementNotMet) + slot highlight LorenzColor.GREEN + if (lore.any { requirementNotMet.find(it) }) + slot highlight LorenzColor.RED + } + } + private fun buildDisplay(event: InventoryFullyOpenedEvent): MutableList { logRabbits(event)