aboutsummaryrefslogtreecommitdiffstats
path: root/common/src/main/java/com
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2024-03-13 18:52:09 +0100
committerLeonardo Bishop <13875753+LMBishop@users.noreply.github.com>2024-03-16 00:18:37 +0000
commit17f88db09fc85f2469095524fb9c4475f21669fc (patch)
tree80f2a3b7b50daf206e8c8fcdc732a9467a444ccd /common/src/main/java/com
parent9ccf0753cff441a19b45bb1bbd1ab24a1fb3184d (diff)
Use optimized map implementation for quest progress file if available
Diffstat (limited to 'common/src/main/java/com')
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java31
1 files changed, 30 insertions, 1 deletions
diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java
index b1f048b7..dc400912 100644
--- a/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java
@@ -5,6 +5,8 @@ import com.leonardobishop.quests.common.plugin.Quests;
import com.leonardobishop.quests.common.quest.Quest;
import com.leonardobishop.quests.common.quest.Task;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -18,7 +20,34 @@ import java.util.concurrent.TimeUnit;
*/
public class QuestProgressFile {
- private final Map<String, QuestProgress> questProgress = new HashMap<>();
+ private static final Constructor<?> optimizedMapCtor;
+
+ static {
+ Class<?> optimizedMapClazz;
+
+ try {
+ optimizedMapClazz = Class.forName("it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap");
+ } catch (ClassNotFoundException ignored) {
+ optimizedMapClazz = HashMap.class;
+ }
+
+ try {
+ optimizedMapCtor = optimizedMapClazz.getDeclaredConstructor();
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <K, V> Map<K, V> newOptimizedMapInstance() {
+ try {
+ return (Map<K, V>) optimizedMapCtor.newInstance();
+ } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private final Map<String, QuestProgress> questProgress = newOptimizedMapInstance();
private final UUID playerUUID;
private final Quests plugin;