diff --git a/build.gradle b/build.gradle index ef42bbe11..d06cf3555 100644 --- a/build.gradle +++ b/build.gradle @@ -52,22 +52,18 @@ shadowJar { minimize() dependencies { - include(dependency('com.github.ben-manes.caffeine:caffeine:2.8.5')) include(dependency('org.zeroturnaround:zt-zip:1.14')) include(dependency('io.papermc:paperlib:1.0.5')) + include(dependency('com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2')) } } dependencies { compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' - - // Shade - implementation 'com.github.ben-manes.caffeine:caffeine:3.0.2' implementation 'org.zeroturnaround:zt-zip:1.14' implementation 'io.papermc:paperlib:1.0.5' - - // Provided + implementation 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2' implementation 'org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT' implementation 'org.bukkit.craftbukkit:1.17:1.17' implementation 'com.bergerkiller.bukkit:BKCommonLib:1.16.4-v2' diff --git a/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java b/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java index e9b8e570c..a96fa5ef5 100644 --- a/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java +++ b/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java @@ -1,23 +1,28 @@ package com.volmit.iris.scaffold.stream.utility; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.github.benmanes.caffeine.cache.LoadingCache; +import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; +import com.volmit.iris.Iris; import com.volmit.iris.scaffold.cache.Cache; import com.volmit.iris.scaffold.stream.BasicStream; import com.volmit.iris.scaffold.stream.ProceduralStream; +import com.volmit.iris.util.ChronoLatch; +import com.volmit.iris.util.Form; public class CachedStream2D extends BasicStream implements ProceduralStream { private final ProceduralStream stream; - private final LoadingCache cache; + private final ConcurrentLinkedHashMap cache; + private ChronoLatch cl = new ChronoLatch(1000); public CachedStream2D(ProceduralStream stream, int size) { super(); this.stream = stream; - cache = Caffeine.newBuilder() - .maximumSize(size) - .build((b) -> stream.get(Cache.keyX(b), Cache.keyZ(b))); + cache = new ConcurrentLinkedHashMap.Builder() + .initialCapacity(size) + .maximumWeightedCapacity(size) + .concurrencyLevel(32) + .build(); } @Override @@ -35,7 +40,12 @@ public class CachedStream2D extends BasicStream implements ProceduralStrea @Override public T get(double x, double z) { - return cache.get(Cache.key((int) x, (int) z)); + if(cl.flip()) + { + Iris.info("Cache: " + Form.f(cache.size()) + " / " + Form.f(cache.weightedSize())); + } + long ck = Cache.key((int) x, (int) z); + return cache.compute(ck, (k, v) -> v != null ? v : stream.get(Cache.keyX(ck), Cache.keyZ(ck))); } @Override