From 17f88db09fc85f2469095524fb9c4475f21669fc Mon Sep 17 00:00:00 2001 From: Krakenied Date: Wed, 13 Mar 2024 18:52:09 +0100 Subject: Use optimized map implementation for quest progress file if available --- .../questprogressfile/QuestProgressFile.java | 31 +++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'common/src/main') 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 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 Map newOptimizedMapInstance() { + try { + return (Map) optimizedMapCtor.newInstance(); + } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) { + throw new IllegalStateException(e); + } + } + + private final Map questProgress = newOptimizedMapInstance(); private final UUID playerUUID; private final Quests plugin; -- cgit v1.2.3-70-g09d2