diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 0390cebab5..d2ce0818d6 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -169,7 +178,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 0390cebab5..d2ce0818d6 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -169,7 +178,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 0390cebab5..d2ce0818d6 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -169,7 +178,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java index 6ae680c499..f62891cd28 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java @@ -17,8 +17,10 @@ package org.l2jmobius.gameserver.datatables.xml; import java.io.File; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.logging.Logger; import org.w3c.dom.Document; @@ -36,7 +38,7 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - public Map _armorSets = new HashMap<>(); + private ArmorSet[] _armorSets; private ArmorSetData() { @@ -47,12 +49,13 @@ public class ArmorSetData implements IXmlReader public void load() { parseDatapackFile("data/ArmorSets.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); } @Override public void parseDocument(Document doc, File f) { + final Map armorSets = new HashMap<>(); + // StatsSet used to feed informations. Cleaned on every entry. final StatSet set = new StatSet(); @@ -75,18 +78,27 @@ public class ArmorSetData implements IXmlReader // Feed the map with new data. final int chestId = set.getInt("chest"); - _armorSets.put(chestId, new ArmorSet(chestId, set.getInt("legs"), set.getInt("head"), set.getInt("gloves"), set.getInt("feet"), set.getInt("skillId"), set.getInt("shield"), set.getInt("shieldSkillId"), set.getInt("enchant6Skill"))); + armorSets.put(chestId, new ArmorSet(chestId, set.getInt("legs"), set.getInt("head"), set.getInt("gloves"), set.getInt("feet"), set.getInt("skillId"), set.getInt("shield"), set.getInt("shieldSkillId"), set.getInt("enchant6Skill"))); } + + _armorSets = new ArmorSet[Collections.max(armorSets.keySet()) + 1]; + for (Entry armorSet : armorSets.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + armorSets.size() + " armor sets."); + armorSets.clear(); } public boolean setExists(int chestId) { - return _armorSets.containsKey(chestId); + return _armorSets[chestId] != null; } public ArmorSet getSet(int chestId) { - return _armorSets.get(chestId); + return _armorSets[chestId]; } public static ArmorSetData getInstance() diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java index 6ae680c499..f62891cd28 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/ArmorSetData.java @@ -17,8 +17,10 @@ package org.l2jmobius.gameserver.datatables.xml; import java.io.File; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.logging.Logger; import org.w3c.dom.Document; @@ -36,7 +38,7 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - public Map _armorSets = new HashMap<>(); + private ArmorSet[] _armorSets; private ArmorSetData() { @@ -47,12 +49,13 @@ public class ArmorSetData implements IXmlReader public void load() { parseDatapackFile("data/ArmorSets.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); } @Override public void parseDocument(Document doc, File f) { + final Map armorSets = new HashMap<>(); + // StatsSet used to feed informations. Cleaned on every entry. final StatSet set = new StatSet(); @@ -75,18 +78,27 @@ public class ArmorSetData implements IXmlReader // Feed the map with new data. final int chestId = set.getInt("chest"); - _armorSets.put(chestId, new ArmorSet(chestId, set.getInt("legs"), set.getInt("head"), set.getInt("gloves"), set.getInt("feet"), set.getInt("skillId"), set.getInt("shield"), set.getInt("shieldSkillId"), set.getInt("enchant6Skill"))); + armorSets.put(chestId, new ArmorSet(chestId, set.getInt("legs"), set.getInt("head"), set.getInt("gloves"), set.getInt("feet"), set.getInt("skillId"), set.getInt("shield"), set.getInt("shieldSkillId"), set.getInt("enchant6Skill"))); } + + _armorSets = new ArmorSet[Collections.max(armorSets.keySet()) + 1]; + for (Entry armorSet : armorSets.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + armorSets.size() + " armor sets."); + armorSets.clear(); } public boolean setExists(int chestId) { - return _armorSets.containsKey(chestId); + return _armorSets[chestId] != null; } public ArmorSet getSet(int chestId) { - return _armorSets.get(chestId); + return _armorSets[chestId]; } public static ArmorSetData getInstance() diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 5fd52a6acf..ff5ef02392 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -17,8 +17,10 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import java.util.Map.Entry; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -34,7 +36,8 @@ import org.l2jmobius.gameserver.model.holders.SkillHolder; */ public class ArmorSetData implements IXmlReader { - private final Map _armorSets = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); /** * Instantiates a new armor sets data. @@ -47,9 +50,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -152,7 +162,7 @@ public class ArmorSetData implements IXmlReader } } } - _armorSets.put(set.getChestId(), set); + _armorSetMap.put(set.getChestId(), set); } } } @@ -166,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public boolean isArmorSet(int chestId) { - return _armorSets.containsKey(chestId); + return _armorSets[chestId] != null; } /** @@ -176,7 +186,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int chestId) { - return _armorSets.get(chestId); + return _armorSets[chestId]; } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 5fd52a6acf..ff5ef02392 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -17,8 +17,10 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import java.util.Map.Entry; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -34,7 +36,8 @@ import org.l2jmobius.gameserver.model.holders.SkillHolder; */ public class ArmorSetData implements IXmlReader { - private final Map _armorSets = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); /** * Instantiates a new armor sets data. @@ -47,9 +50,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -152,7 +162,7 @@ public class ArmorSetData implements IXmlReader } } } - _armorSets.put(set.getChestId(), set); + _armorSetMap.put(set.getChestId(), set); } } } @@ -166,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public boolean isArmorSet(int chestId) { - return _armorSets.containsKey(chestId); + return _armorSets[chestId] != null; } /** @@ -176,7 +186,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int chestId) { - return _armorSets.get(chestId); + return _armorSets[chestId]; } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 0390cebab5..d2ce0818d6 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -169,7 +178,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 0390cebab5..d2ce0818d6 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -169,7 +178,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 0390cebab5..d2ce0818d6 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -169,7 +178,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /** diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java index 57d074127b..1a7b0e966b 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/ArmorSetData.java @@ -20,12 +20,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.stream.Stream; @@ -48,8 +49,9 @@ public class ArmorSetData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); - private final Map _armorSets = new ConcurrentHashMap<>(); - private final Map> _armorSetItems = new ConcurrentHashMap<>(); + private ArmorSet[] _armorSets; + private final Map _armorSetMap = new HashMap<>(); + private final Map> _armorSetItems = new HashMap<>(); protected ArmorSetData() { @@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader @Override public void load() { - _armorSets.clear(); parseDatapackDirectory("data/stats/armorsets", false); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets."); + + _armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1]; + for (Entry armorSet : _armorSetMap.entrySet()) + { + _armorSets[armorSet.getKey()] = armorSet.getValue(); + } + + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets."); + _armorSetMap.clear(); } @Override @@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader } final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); - if (_armorSets.putIfAbsent(id, set) != null) + if (_armorSetMap.putIfAbsent(id, set) != null) { LOGGER.warning("Duplicate set entry with id: " + id + " in file: " + f.getName()); } @@ -167,7 +176,7 @@ public class ArmorSetData implements IXmlReader */ public ArmorSet getSet(int setId) { - return _armorSets.get(setId); + return _armorSets[setId]; } /**