From fe0449b9b8161135874ac99c1685233349f06f0d Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Fri, 24 May 2024 14:36:56 +0200 Subject: Backend: GetOrPut in TimeLimitedCache (#1875) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt | 1 + src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt | 10 ++++++++-- src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 20bf02bb7..3aa530c22 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -1040,6 +1040,7 @@ object RenderUtils { } fun exactLocation(entity: Entity, partialTicks: Float): LorenzVec { + if (entity.isDead) return entity.getLorenzVec() val x = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * partialTicks val y = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * partialTicks val z = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * partialTicks diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt index 8b4b0c372..182b1381b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt @@ -4,10 +4,10 @@ import com.google.common.cache.CacheBuilder import java.util.concurrent.TimeUnit import kotlin.time.Duration -class TimeLimitedCache( +class TimeLimitedCache( expireAfterWrite: Duration, private val removalListener: (K?, V?) -> Unit = { _, _ -> }, -) { +): Iterable> { private val cache = CacheBuilder.newBuilder() .expireAfterWrite(expireAfterWrite.inWholeMilliseconds, TimeUnit.MILLISECONDS) @@ -18,11 +18,17 @@ class TimeLimitedCache( fun getOrNull(key: K): V? = cache.getIfPresent(key) + fun getOrPut(key: K, defaultValue: () -> V) = getOrNull(key) ?: defaultValue().also { put(key, it) } + fun clear() = cache.invalidateAll() + fun entries(): Set> = cache.asMap().entries + fun values(): Collection = cache.asMap().values fun keys(): Set = cache.asMap().keys fun containsKey(key: K): Boolean = cache.getIfPresent(key) != null + + override fun iterator(): Iterator> = entries().iterator() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt index 5f0ccd404..fae86fac5 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt @@ -2,7 +2,7 @@ package at.hannibal2.skyhanni.utils import kotlin.time.Duration -class TimeLimitedSet( +class TimeLimitedSet( expireAfterWrite: Duration, private val removalListener: (T) -> Unit = {}, ) { -- cgit