diff options
3 files changed, 107 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index ed35585ad..27dd3c914 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -294,6 +294,7 @@ import at.hannibal2.skyhanni.features.misc.RestorePieceOfWizardPortalLore import at.hannibal2.skyhanni.features.misc.ServerRestartTitle import at.hannibal2.skyhanni.features.misc.SkyBlockKickDuration import at.hannibal2.skyhanni.features.misc.SuperpairsClicksAlert +import at.hannibal2.skyhanni.features.misc.TabWidgetSettings import at.hannibal2.skyhanni.features.misc.TimeFeatures import at.hannibal2.skyhanni.features.misc.TpsCounter import at.hannibal2.skyhanni.features.misc.compacttablist.AdvancedPlayerList @@ -772,6 +773,7 @@ class SkyHanniMod { loadModule(LockMouseLook) loadModule(SensitivityReducer) loadModule(DungeonFinderFeatures()) + loadModule(TabWidgetSettings()) loadModule(PabloHelper()) loadModule(FishingBaitWarnings()) loadModule(CustomScoreboard()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java index 874fde7d7..1908b6ef7 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java @@ -138,6 +138,12 @@ public class InventoryConfig { } @Expose + @ConfigOption(name = "Highlight Widgets", desc = "Highlight enabled and disabled widgets in /tab.") + @ConfigEditorBoolean + @FeatureToggle + public boolean highlightWidgets = true; + + @Expose @ConfigOption(name = " Vacuum Bag Cap", desc = "Cap the Garden Vacuum Bag item number display to 40.") @ConfigEditorBoolean public boolean vacuumBagCap = true; 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<Int, LorenzColor>() + + @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 +} |