From d03dce8b859a263de4ec06b3ddc7427b83842aa1 Mon Sep 17 00:00:00 2001 From: Conutik <60240193+Conutik@users.noreply.github.com> Date: Sun, 24 Mar 2024 12:49:30 +0300 Subject: Feature: Added Highlighting for tab widgets. (#1175) Co-authored-by: hannibal2 <24389977+hannibal002@users.noreply.github.com> --- .../skyhanni/features/misc/TabWidgetSettings.kt | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/misc/TabWidgetSettings.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features/misc') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/TabWidgetSettings.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/TabWidgetSettings.kt new file mode 100644 index 000000000..c3bc3a38e --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/TabWidgetSettings.kt @@ -0,0 +1,99 @@ +package at.hannibal2.skyhanni.features.misc + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.GuiContainerEvent +import at.hannibal2.skyhanni.events.InventoryCloseEvent +import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent +import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.RenderUtils.highlight +import at.hannibal2.skyhanni.utils.StringUtils.anyMatches +import at.hannibal2.skyhanni.utils.StringUtils.matches +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class TabWidgetSettings { + private val patternGroup = RepoPattern.group("tab.widget.setting") + private val mainPageSettingPattern by patternGroup.pattern( + "gui", + "(Widgets in.*|Widgets on.*)" + ) + private val mainPageWidgetPattern by patternGroup.pattern( + "main", + "§7Currently:.*" + ) + private val subPageWidgetPattern by patternGroup.pattern( + "sub", + "§eClick to .*" + ) + private val shownSettingPattern by patternGroup.pattern( + "show", + "Shown .* Setting.*|.*Widget Settings" + ) + private val clickToDisablePattern by patternGroup.pattern( + "click.disable", + ".*(disable!)" + ) + private val enabledPattern by patternGroup.pattern( + "is.enabled", + ".*ENABLED" + ) + + var inInventory = false + var highlights = mutableMapOf() + + @SubscribeEvent + fun onInventoryOpen(event: InventoryFullyOpenedEvent) { + if (!isEnabled()) return + highlights.clear() + + val inventoryName = event.inventoryName + if (mainPageSettingPattern.matches(inventoryName)) { + inInventory = true + val items = event.inventoryItems.filter { mainPageWidgetPattern.anyMatches(it.value.getLore()) } + for ((slot, stack) in items) { + highlights[slot] = if (enabledPattern.anyMatches(stack.getLore())) { + LorenzColor.GREEN + } else { + LorenzColor.RED + } + } + } + + if (shownSettingPattern.matches(inventoryName)) { + inInventory = true + val items = event.inventoryItems.filter { + subPageWidgetPattern.matches(it.value.getLore().lastOrNull()) + } + + for ((slot, stack) in items) { + highlights[slot] = if (clickToDisablePattern.anyMatches(stack.getLore())) { + LorenzColor.GREEN + } else { + LorenzColor.RED + } + } + } + } + + @SubscribeEvent + fun onInventoryClose(event: InventoryCloseEvent) { + inInventory = false + highlights.clear() + } + + @SubscribeEvent + fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { + if (!isEnabled()) return + if (!inInventory) return + + event.gui.inventorySlots.inventorySlots + .associateWith { highlights[it.slotNumber] } + .forEach { (slot, color) -> + color?.let { slot.highlight(it) } + } + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.inventory.highlightWidgets +} -- cgit