diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/mining/FlowstateHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/mining/FlowstateHelperConfig.java index 634126cd3b6f..e6996461109a 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/mining/FlowstateHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/mining/FlowstateHelperConfig.java @@ -9,6 +9,7 @@ import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorSlider; import io.github.notenoughupdates.moulconfig.annotations.ConfigLink; import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; +import io.github.notenoughupdates.moulconfig.annotations.SearchTag; import java.util.List; @@ -30,7 +31,8 @@ public class FlowstateHelperConfig { public boolean colorfulTimer = false; @Expose - @ConfigOption(name = "Auto Hide", desc = "Automatically hides the GUI after a certain time idle, in seconds.") + @ConfigOption(name = "Auto Hide", desc = "Automatically hides the GUI after being idle or having the max bonus, in seconds.") + @SearchTag("autohide") @ConfigEditorSlider( minValue = -1, maxValue = 30, diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/FlowstateHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/FlowstateHelper.kt index 1d490d69ffd1..28fec6008eac 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/FlowstateHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/FlowstateHelper.kt @@ -39,6 +39,8 @@ object FlowstateHelper { private var displayDirty = false private var displayHibernating = true private var timeSinceHibernation = SimpleTimeMark.farPast() + private var timeSinceMax = SimpleTimeMark.farPast() + private var displayMaxed = false private var flowstateCache: Int? = null @@ -64,6 +66,8 @@ object FlowstateHelper { private fun attemptClearDisplay() { if (streakEndTimer.isInFuture()) return blockBreakStreak = 0 + timeSinceMax = SimpleTimeMark.farPast() + displayMaxed = false displayDirty = true if (!displayHibernating) timeSinceHibernation = SimpleTimeMark.now() displayHibernating = true @@ -73,9 +77,9 @@ object FlowstateHelper { @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!MiningAPI.inCustomMiningIsland() || !config.enabled) return - if (flowstateCache == null || !streakEndTimer.isInFuture()) return + if (flowstateCache == null && !streakEndTimer.isInFuture()) return - if (displayHibernating && config.autoHide > -1 && timeSinceHibernation.passedSince() > config.autoHide.seconds) return + if (shouldAutoHide()) return if (display.isEmpty() || streakEndTimer.isInFuture()) { createDisplay() } @@ -83,21 +87,37 @@ object FlowstateHelper { config.position.renderRenderables(display, extraSpace = 1, "Flowstate Helper") } + private fun shouldAutoHide(): Boolean { + if (config.autoHide < 0) return false + val autoHide = config.autoHide.seconds + if (streakEndTimer.minus(10.seconds - autoHide).isInPast()) return true + if (displayMaxed && timeSinceMax.passedSince() > autoHide) return true + return false + } + private fun createDisplay() { if (displayDirty) { displayDirty = false FlowstateElements.STREAK.create() FlowstateElements.SPEED.create() } - FlowstateElements.TIMER.create() - FlowstateElements.COMPACT.create() + if (!displayHibernating) { + FlowstateElements.TIMER.create() + FlowstateElements.COMPACT.create() + } display = config.appearance.map { it.renderable } } fun getSpeedBonus(): Int { val flowstateLevel = flowstateCache ?: 0 - if (blockBreakStreak >= 200) return 200 * flowstateLevel - return blockBreakStreak * flowstateLevel + + return if (blockBreakStreak >= 200) { + if (!displayMaxed) { + displayMaxed = true + timeSinceMax = SimpleTimeMark.now() + } + 200 * flowstateLevel + } else blockBreakStreak * flowstateLevel } @SubscribeEvent