diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-05-04 03:53:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-04 03:53:38 +0200 |
commit | 5aa996903132756d79496d17c1e3c64c13b6b9cd (patch) | |
tree | e40db60baad9a8f5836618049b0e4bfa71059c2f /src/main/java/at/hannibal2/skyhanni | |
parent | d8f1a2417cc48b9bfd3c9e75eff0bfc1c0d33a30 (diff) | |
download | skyhanni-5aa996903132756d79496d17c1e3c64c13b6b9cd.tar.gz skyhanni-5aa996903132756d79496d17c1e3c64c13b6b9cd.tar.bz2 skyhanni-5aa996903132756d79496d17c1e3c64c13b6b9cd.zip |
Improvement: Duplicate Rabbit Time (#1671)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni')
4 files changed, 45 insertions, 23 deletions
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 856ba0d05..a88e79023 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 @@ -89,6 +89,12 @@ public class ChocolateFactoryConfig { public boolean extraTooltipStats = true; @Expose + @ConfigOption(name = "Duplicate Rabbit Time", desc = "Show the production time of chocolate gained from duplicate rabbits.") + @ConfigEditorBoolean + @FeatureToggle + public boolean showDuplicateTime = false; + + @Expose @ConfigOption(name = "Time Tower Warning", desc = "Notification when you have a new time tower usage available and " + "continuously warn when your time tower is full.") @ConfigEditorBoolean diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt index 9351dac40..053af704b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt @@ -25,29 +25,9 @@ enum class ChocolateAmount(val chocolate: () -> Long) { } fun timeUntilGoal(goal: Long): Duration { - val profileStorage = ChocolateFactoryAPI.profileStorage ?: return Duration.ZERO - + val profileStorage = profileStorage ?: return Duration.ZERO val updatedAgo = SimpleTimeMark(profileStorage.lastDataSave).passedSince().inWholeSeconds - - val baseMultiplier = profileStorage.rawChocolateMultiplier - val rawChocolatePerSecond = profileStorage.rawChocPerSecond - val timeTowerMultiplier = baseMultiplier + profileStorage.timeTowerLevel * 0.1 - - if (rawChocolatePerSecond == 0) return Duration.INFINITE - - var needed = goal - chocolate() - val secondsUntilTowerExpires = ChocolateFactoryTimeTowerManager.timeTowerActiveDuration().inWholeSeconds - - val timeTowerChocPerSecond = rawChocolatePerSecond * timeTowerMultiplier - - val secondsAtRate = needed / timeTowerChocPerSecond - if (secondsAtRate < secondsUntilTowerExpires) { - return secondsAtRate.seconds - updatedAgo.seconds - } - - needed -= (secondsUntilTowerExpires * timeTowerChocPerSecond).toLong() - val basePerSecond = rawChocolatePerSecond * baseMultiplier - return (needed / basePerSecond + secondsUntilTowerExpires).seconds - updatedAgo.seconds + return ChocolateFactoryAPI.timeUntilNeed(goal - chocolate()) - updatedAgo.seconds } companion object { diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt index c9fa506b3..7418f3b39 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt @@ -13,6 +13,7 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter import at.hannibal2.skyhanni.utils.DelayedRun import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.formatLong +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SkyblockSeason import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.matches @@ -20,6 +21,8 @@ import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.UtilsPatterns import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds object ChocolateFactoryAPI { @@ -142,4 +145,30 @@ object ChocolateFactoryAPI { fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled fun isHoppityEvent() = SkyblockSeason.getCurrentSeason() == SkyblockSeason.SPRING + + fun timeUntilNeed(goal: Long): Duration { + var needed = goal + val profileStorage = profileStorage ?: return Duration.ZERO + + val updatedAgo = SimpleTimeMark(profileStorage.lastDataSave).passedSince().inWholeSeconds + + val baseMultiplier = profileStorage.rawChocolateMultiplier + val rawChocolatePerSecond = profileStorage.rawChocPerSecond + val timeTowerMultiplier = baseMultiplier + profileStorage.timeTowerLevel * 0.1 + + if (rawChocolatePerSecond == 0) return Duration.INFINITE + + val secondsUntilTowerExpires = ChocolateFactoryTimeTowerManager.timeTowerActiveDuration().inWholeSeconds + + val timeTowerChocPerSecond = rawChocolatePerSecond * timeTowerMultiplier + + val secondsAtRate = needed / timeTowerChocPerSecond + if (secondsAtRate < secondsUntilTowerExpires) { + return secondsAtRate.seconds - updatedAgo.seconds + } + + needed -= (secondsUntilTowerExpires * timeTowerChocPerSecond).toLong() + val basePerSecond = rawChocolatePerSecond * baseMultiplier + return (needed / basePerSecond + secondsUntilTowerExpires).seconds + } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt index 5d0a5c817..2d49fce3e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt @@ -9,6 +9,7 @@ import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.TimeUtils.format import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds @@ -50,7 +51,13 @@ object ChocolateFactoryBarnManager { rabbitDuplicatePattern.matchMatcher(event.message) { HoppityEggsManager.shareWaypointPrompt() - ChocolateAmount.addToAll(group("amount").formatLong()) + val amount = group("amount").formatLong() + if (config.showDuplicateTime) { + val format = ChocolateFactoryAPI.timeUntilNeed(amount).format(maxUnits = 2) + event.chatComponent.appendText("\n§7(§a+§b$format §aof production§7)") + ChocolateAmount.averageChocPerSecond() + } + ChocolateAmount.addToAll(amount) } rabbitCrashedPattern.matchMatcher(event.message) { |