From 680b20370ad4563f202a08eae5713d0d1d7f9078 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 20 Jan 2024 20:21:00 +0100 Subject: [PATCH] creating and using TimeLimitedCache and TimeLimitedSet instead of guava cache. --- .../at/hannibal2/skyhanni/data/SlayerAPI.kt | 10 ++++----- .../features/fishing/ShowFishingItemName.kt | 10 ++++----- .../misc/compacttablist/AdvancedPlayerList.kt | 9 ++++---- .../misc/visualwords/ModifyVisualWords.kt | 9 ++++---- .../misc/visualwords/VisualWordGui.kt | 2 +- .../features/slayer/SlayerItemsOnGround.kt | 10 ++++----- .../skyhanni/test/command/ErrorManager.kt | 15 +++++++------ .../skyhanni/utils/TimeLimitedCache.kt | 21 +++++++++++++++++++ .../skyhanni/utils/TimeLimitedSet.kt | 14 +++++++++++++ 9 files changed, 63 insertions(+), 37 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt diff --git a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt index ee6899340344..ddb5943a02e6 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt @@ -16,16 +16,14 @@ import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.RecalculatingValue -import com.google.common.cache.CacheBuilder +import at.hannibal2.skyhanni.utils.TimeLimitedCache import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds object SlayerAPI { - private var nameCache = - CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES) - .build, Pair>() + private var nameCache = TimeLimitedCache, Pair>(1.minutes) var questStartTime = 0L var isInCorrectArea = false @@ -43,7 +41,7 @@ object SlayerAPI { fun getItemNameAndPrice(internalName: NEUInternalName, amount: Int): Pair { val key = internalName to amount - nameCache.getIfPresent(key)?.let { + nameCache.getOrNull(key)?.let { return it } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt index 4a41b332c611..97945eb21774 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt @@ -13,17 +13,15 @@ import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RenderUtils.drawString import at.hannibal2.skyhanni.utils.RenderUtils.exactLocation import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import com.google.common.cache.CacheBuilder +import at.hannibal2.skyhanni.utils.TimeLimitedCache import net.minecraft.entity.item.EntityItem import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.milliseconds class ShowFishingItemName { private val config get() = SkyHanniMod.feature.fishing.fishedItemName private var hasRodInHand = false - private var cache = - CacheBuilder.newBuilder().expireAfterWrite(750, TimeUnit.MILLISECONDS) - .build>() + private var cache = TimeLimitedCache>(750.milliseconds) // Taken from Skytils private val cheapCoins = setOf( @@ -77,7 +75,7 @@ class ShowFishingItemName { } } - for ((location, text) in cache.asMap().values) { + for ((location, text) in cache.values()) { event.drawString(location, text) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt index 86b0be8dd4b0..b5684265f1bc 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt @@ -18,10 +18,10 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import com.google.common.cache.CacheBuilder +import at.hannibal2.skyhanni.utils.TimeLimitedCache import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.concurrent.TimeUnit import kotlin.random.Random +import kotlin.time.Duration.Companion.minutes object AdvancedPlayerList { private val config get() = SkyHanniMod.feature.misc.compactTabList.advancedPlayerList @@ -188,11 +188,10 @@ object AdvancedPlayerList { return "$level $playerName ${suffix.trim()}" } - private var randomOrderCache = - CacheBuilder.newBuilder().expireAfterWrite(20, TimeUnit.MINUTES).build() + private var randomOrderCache = TimeLimitedCache(20.minutes) private fun getRandomOrder(name: String): Int { - val saved = randomOrderCache.getIfPresent(name) + val saved = randomOrderCache.getOrNull(name) if (saved != null) { return saved } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt index 44c4f8cac8a5..5f0ee64942ca 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt @@ -3,13 +3,12 @@ package at.hannibal2.skyhanni.features.misc.visualwords import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.StringUtils.convertToFormatted -import com.google.common.cache.Cache -import com.google.common.cache.CacheBuilder -import java.util.concurrent.TimeUnit +import at.hannibal2.skyhanni.utils.TimeLimitedCache +import kotlin.time.Duration.Companion.minutes object ModifyVisualWords { private val config get() = SkyHanniMod.feature.gui.modifyWords - var textCache: Cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build() + var textCache = TimeLimitedCache(5.minutes) var modifiedWords = mutableListOf() @@ -23,7 +22,7 @@ object ModifyVisualWords { modifiedWords = SkyHanniMod.feature.storage.modifiedWords } - val cachedResult = textCache.getIfPresent(originalText) + val cachedResult = textCache.getOrNull(originalText) if (cachedResult != null) { return cachedResult } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index 03cf21b1d5e6..b88171e96d4d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -554,7 +554,7 @@ open class VisualWordGui : GuiScreen() { private fun saveChanges() { ModifyVisualWords.modifiedWords = modifiedWords - ModifyVisualWords.textCache.invalidateAll() + ModifyVisualWords.textCache.clear() SkyHanniMod.feature.storage.modifiedWords = modifiedWords } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt index f0f80ace448e..fedc9593ae08 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt @@ -11,18 +11,16 @@ import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.RenderUtils.drawString import at.hannibal2.skyhanni.utils.RenderUtils.exactLocation -import com.google.common.cache.CacheBuilder +import at.hannibal2.skyhanni.utils.TimeLimitedCache import net.minecraft.entity.item.EntityItem import net.minecraft.init.Items import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.seconds class SlayerItemsOnGround { private val config get() = SkyHanniMod.feature.slayer.itemsOnGround - private var itemsOnGround = - CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS) - .build>() + private var itemsOnGround = TimeLimitedCache>(2.seconds) @SubscribeEvent fun onRenderWorld(event: LorenzRenderWorldEvent) { @@ -47,7 +45,7 @@ class SlayerItemsOnGround { itemsOnGround.put(entityItem, location to itemName) } - for ((location, text) in itemsOnGround.asMap().values) { + for ((location, text) in itemsOnGround.values()) { event.drawString(location, text) } } diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt index eaeed6abae45..092800c1012c 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt @@ -5,20 +5,19 @@ import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import com.google.common.cache.CacheBuilder +import at.hannibal2.skyhanni.utils.TimeLimitedSet import net.minecraft.client.Minecraft import java.util.UUID -import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.minutes object ErrorManager { // random id -> error message private val errorMessages = mutableMapOf() private val fullErrorMessages = mutableMapOf() - private var cache = - CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build, Unit>() + private var cache = TimeLimitedSet>(10.minutes) fun resetCache() { - cache.asMap().clear() + cache.clear() } fun skyHanniError(message: String): Nothing { @@ -77,10 +76,10 @@ object ErrorManager { if (!ignoreErrorCache) { val pair = if (throwable.stackTrace.isNotEmpty()) { - throwable.stackTrace[0].let { it.fileName to it.lineNumber } + throwable.stackTrace[0].let { it.fileName!! to it.lineNumber } } else message to 0 - if (cache.getIfPresent(pair) != null) return - cache.put(pair, Unit) + if (cache.contains(pair)) return + cache.add(pair) } val fullStackTrace = throwable.getCustomStackTrace(true).joinToString("\n") diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt new file mode 100644 index 000000000000..8aab176efd1a --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt @@ -0,0 +1,21 @@ +package at.hannibal2.skyhanni.utils + +import com.google.common.cache.CacheBuilder +import java.util.concurrent.TimeUnit +import kotlin.time.Duration + +class TimeLimitedCache(expireAfterWrite: Duration) { + + private val cache = CacheBuilder.newBuilder() + .expireAfterWrite(expireAfterWrite.inWholeMilliseconds, TimeUnit.MILLISECONDS).build() + + fun put(key: K, value: V) = cache.put(key, value) + + fun getOrNull(key: K): V? = cache.getIfPresent(key) + + fun clear() = cache.invalidateAll() + + fun values(): MutableCollection = cache.asMap().values + + fun containsKey(key: K): Boolean = cache.getIfPresent(key) != null +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt new file mode 100644 index 000000000000..97caf70adc1f --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt @@ -0,0 +1,14 @@ +package at.hannibal2.skyhanni.utils + +import kotlin.time.Duration + +class TimeLimitedSet(expireAfterWrite: Duration) { + + private val cache = TimeLimitedCache(expireAfterWrite) + + fun add(element: T) = cache.put(element, Unit) + + fun contains(element: T): Boolean = cache.containsKey(element) + + fun clear() = cache.clear() +}