diff --git a/src/main/java/net/server/Server.java b/src/main/java/net/server/Server.java index 44333c1d38..3051ee6781 100644 --- a/src/main/java/net/server/Server.java +++ b/src/main/java/net/server/Server.java @@ -856,15 +856,11 @@ public class Server { final List> futures = new ArrayList<>(); futures.add(initExecutor.submit(() -> SkillFactory.loadAllSkills())); futures.add(initExecutor.submit(() -> CashItemFactory.loadAllCashItems())); + futures.add(initExecutor.submit(() -> MapleQuest.loadAllQuests())); ThreadManager.getInstance().start(); initializeTimelyTasks(); // aggregated method for timely tasks thanks to lxconan - long timeToTake = System.currentTimeMillis(); - MapleQuest.loadAllQuest(); - final double questLoadTime = (System.currentTimeMillis() - timeToTake) / 1000.0; - log.info("Quest loaded in {} seconds", questLoadTime); - NewYearCardRecord.startPendingNewYearCardRequests(); if (YamlConfig.config.server.USE_THREAD_TRACKER) { @@ -888,7 +884,7 @@ public class Server { } if (YamlConfig.config.server.USE_FAMILY_SYSTEM) { - timeToTake = System.currentTimeMillis(); + long timeToTake = System.currentTimeMillis(); MapleFamily.loadAllFamilies(); final double familyLoadTime = (System.currentTimeMillis() - timeToTake) / 1000.0; log.info("Families loaded in {} seconds", familyLoadTime); diff --git a/src/main/java/server/quest/MapleQuest.java b/src/main/java/server/quest/MapleQuest.java index 73f08f5ed5..bff4ba65a2 100644 --- a/src/main/java/server/quest/MapleQuest.java +++ b/src/main/java/server/quest/MapleQuest.java @@ -21,20 +21,10 @@ */ package server.quest; -import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; import client.MapleCharacter; import client.MapleQuestStatus; import client.MapleQuestStatus.Status; import config.YamlConfig; -import java.util.Collection; -import java.util.EnumMap; -import java.util.Map.Entry; -import java.util.Set; import provider.MapleData; import provider.MapleDataProvider; import provider.MapleDataProviderFactory; @@ -44,6 +34,10 @@ import server.quest.requirements.*; import tools.MaplePacketCreator; import tools.StringUtil; +import java.io.File; +import java.util.*; +import java.util.Map.Entry; + /** * * @author Matze @@ -51,8 +45,8 @@ import tools.StringUtil; */ public class MapleQuest { - private static Map quests = new HashMap<>(); - private static Map infoNumberQuests = new HashMap<>(); + private static volatile Map quests = new HashMap<>(); + private static volatile Map infoNumberQuests = new HashMap<>(); private static Map medals = new HashMap<>(); private static final Set exploitableQuests = new HashSet<>(); @@ -459,9 +453,7 @@ public class MapleQuest { } public static void clearCache(int quest) { - if(quests.containsKey(quest)){ - quests.remove(quest); - } + quests.remove(quest); } public static void clearCache() { @@ -656,29 +648,31 @@ public class MapleQuest { return ret; } - - public static void loadAllQuest() { - try { - for(MapleData quest : questInfo.getChildren()) { - int questID = Integer.parseInt(quest.getName()); - - MapleQuest q = new MapleQuest(questID); - quests.put(questID, q); - - int infoNumber; - - infoNumber = q.getInfoNumber(Status.STARTED); - if (infoNumber > 0) { - infoNumberQuests.put(infoNumber, questID); - } - - infoNumber = q.getInfoNumber(Status.COMPLETED); - if (infoNumber > 0) { - infoNumberQuests.put(infoNumber, questID); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } + + public static void loadAllQuests() { + final Map loadedQuests = new HashMap<>(); + final Map loadedInfoNumberQuests = new HashMap<>(); + + for (MapleData quest : questInfo.getChildren()) { + int questID = Integer.parseInt(quest.getName()); + + MapleQuest q = new MapleQuest(questID); + loadedQuests.put(questID, q); + + int infoNumber; + + infoNumber = q.getInfoNumber(Status.STARTED); + if (infoNumber > 0) { + loadedInfoNumberQuests.put(infoNumber, questID); + } + + infoNumber = q.getInfoNumber(Status.COMPLETED); + if (infoNumber > 0) { + loadedInfoNumberQuests.put(infoNumber, questID); + } + } + + MapleQuest.quests = loadedQuests; + MapleQuest.infoNumberQuests = loadedInfoNumberQuests; + } }