diff --git a/pom.xml b/pom.xml
index ac27148fd8..7343e9fd9f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,7 @@
3.37.1
5.9.2
5.1.1
+ 3.1.4
@@ -50,6 +51,11 @@
jcip-annotations
${jcip-annotations.version}
+
+ com.github.ben-manes.caffeine
+ caffeine
+ ${caffeine.version}
+
diff --git a/src/main/java/database/maker/MakerInfoProvider.java b/src/main/java/database/maker/MakerInfoProvider.java
index e418af84d7..5c1bffa836 100644
--- a/src/main/java/database/maker/MakerInfoProvider.java
+++ b/src/main/java/database/maker/MakerInfoProvider.java
@@ -1,50 +1,30 @@
package database.maker;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
import net.jcip.annotations.ThreadSafe;
-import java.util.Map;
import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
@ThreadSafe
public class MakerInfoProvider {
private final MakerDao makerDao;
- private final Map reagentCache = new ConcurrentHashMap<>();
- private final Map recipeCache = new ConcurrentHashMap<>();
+ private final Cache> reagentCache = Caffeine.newBuilder().build();
+ private final Cache> recipeCache = Caffeine.newBuilder().build();
public MakerInfoProvider(MakerDao makerDao) {
if (makerDao == null) {
- throw new IllegalArgumentException("MakerDao is null");
+ throw new IllegalArgumentException("MakerDao must not be null");
}
this.makerDao = makerDao;
}
public Optional getMakerReagent(int itemId) {
- final MakerReagent cachedReagent = reagentCache.get(itemId);
- if (cachedReagent != null) {
- return Optional.of(cachedReagent);
- }
-
- final Optional reagentFromDb = makerDao.getReagent(itemId);
- if (reagentFromDb.isEmpty()) {
- return Optional.empty();
- }
- reagentCache.put(itemId, reagentFromDb.get());
- return reagentFromDb;
+ return reagentCache.get(itemId, makerDao::getReagent);
}
public Optional getMakerRecipe(int itemId) {
- final MakerRecipe cachedRecipe = recipeCache.get(itemId);
- if (cachedRecipe != null) {
- return Optional.of(cachedRecipe);
- }
-
- final Optional recipeFromDb = makerDao.getRecipe(itemId);
- if (recipeFromDb.isEmpty()) {
- return Optional.empty();
- }
- recipeCache.put(itemId, recipeFromDb.get());
- return recipeFromDb;
+ return recipeCache.get(itemId, makerDao::getRecipe);
}
public Optional getStimulant(int itemId) {