diff options
| author | Krakenied <Krakenied1@gmail.com> | 2024-03-13 18:52:09 +0100 |
|---|---|---|
| committer | Leonardo Bishop <13875753+LMBishop@users.noreply.github.com> | 2024-03-16 00:18:37 +0000 |
| commit | 17f88db09fc85f2469095524fb9c4475f21669fc (patch) | |
| tree | 80f2a3b7b50daf206e8c8fcdc732a9467a444ccd /common/src/main/java | |
| parent | 9ccf0753cff441a19b45bb1bbd1ab24a1fb3184d (diff) | |
Use optimized map implementation for quest progress file if available
Diffstat (limited to 'common/src/main/java')
| -rw-r--r-- | common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java | 31 |
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; |
