diff --git a/src/main/java/server/life/MonsterInformationProvider.java b/src/main/java/server/life/MonsterInformationProvider.java index 6055a4fdb0..7c7891b543 100644 --- a/src/main/java/server/life/MonsterInformationProvider.java +++ b/src/main/java/server/life/MonsterInformationProvider.java @@ -58,7 +58,7 @@ public class MonsterInformationProvider { private final Map> drops = new HashMap<>(); private final List globaldrops = new ArrayList<>(); - private final Map> continentdrops = new HashMap<>(); + private final Map> continentDrops = new HashMap<>(); private final Map> dropsChancePool = new HashMap<>(); // thanks to ronan private final Set hasNoMultiEquipDrops = new HashSet<>(); @@ -76,23 +76,15 @@ public class MonsterInformationProvider { retrieveGlobal(); } - public final List getRelevantGlobalDrops(int mapid) { - int continentid = mapid / 100000000; + public final List getRelevantGlobalDrops(int mapId) { + final int continentId = mapId / 100000000; + return continentDrops.computeIfAbsent(continentId, this::loadContinentDrops); + } - List contiItems = continentdrops.get(continentid); - if (contiItems == null) { // continent separated global drops found thanks to marcuswoon - contiItems = new ArrayList<>(); - - for (MonsterGlobalDropEntry e : globaldrops) { - if (e.continentid < 0 || e.continentid == continentid) { - contiItems.add(e); - } - } - - continentdrops.put(continentid, contiItems); - } - - return contiItems; + private List loadContinentDrops(int continentId) { + return globaldrops.stream() + .filter(dropEntry -> dropEntry.continentid < 0 || dropEntry.continentid == continentId) + .toList(); } private void retrieveGlobal() { @@ -291,7 +283,7 @@ public class MonsterInformationProvider { extraMultiEquipDrops.clear(); dropsChancePool.clear(); globaldrops.clear(); - continentdrops.clear(); + continentDrops.clear(); retrieveGlobal(); } } diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index d07fbddd66..9ab159af1b 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -751,7 +751,7 @@ public class MapleMap { } final MonsterInformationProvider mi = MonsterInformationProvider.getInstance(); - final List globalEntry = mi.getRelevantGlobalDrops(this.getId()); + final List globalEntry = new ArrayList<>(mi.getRelevantGlobalDrops(mapid)); final List dropEntry = new ArrayList<>(); final List visibleQuestEntry = new ArrayList<>();