Use simple array for ArmorSetData.

Contributed by Sahar.
This commit is contained in:
MobiusDevelopment 2020-07-04 00:00:41 +00:00
parent e11a5bb916
commit e4b5be8916
19 changed files with 308 additions and 129 deletions

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -17,8 +17,10 @@
package org.l2jmobius.gameserver.datatables.xml; package org.l2jmobius.gameserver.datatables.xml;
import java.io.File; import java.io.File;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.w3c.dom.Document; import org.w3c.dom.Document;
@ -36,7 +38,7 @@ public class ArmorSetData implements IXmlReader
{ {
private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
public Map<Integer, ArmorSet> _armorSets = new HashMap<>(); private ArmorSet[] _armorSets;
private ArmorSetData() private ArmorSetData()
{ {
@ -47,12 +49,13 @@ public class ArmorSetData implements IXmlReader
public void load() public void load()
{ {
parseDatapackFile("data/ArmorSets.xml"); parseDatapackFile("data/ArmorSets.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
} }
@Override @Override
public void parseDocument(Document doc, File f) public void parseDocument(Document doc, File f)
{ {
final Map<Integer, ArmorSet> armorSets = new HashMap<>();
// StatsSet used to feed informations. Cleaned on every entry. // StatsSet used to feed informations. Cleaned on every entry.
final StatSet set = new StatSet(); final StatSet set = new StatSet();
@ -75,18 +78,27 @@ public class ArmorSetData implements IXmlReader
// Feed the map with new data. // Feed the map with new data.
final int chestId = set.getInt("chest"); 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<Integer, ArmorSet> armorSet : armorSets.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + armorSets.size() + " armor sets.");
armorSets.clear();
} }
public boolean setExists(int chestId) public boolean setExists(int chestId)
{ {
return _armorSets.containsKey(chestId); return _armorSets[chestId] != null;
} }
public ArmorSet getSet(int chestId) public ArmorSet getSet(int chestId)
{ {
return _armorSets.get(chestId); return _armorSets[chestId];
} }
public static ArmorSetData getInstance() public static ArmorSetData getInstance()

View File

@ -17,8 +17,10 @@
package org.l2jmobius.gameserver.datatables.xml; package org.l2jmobius.gameserver.datatables.xml;
import java.io.File; import java.io.File;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.w3c.dom.Document; import org.w3c.dom.Document;
@ -36,7 +38,7 @@ public class ArmorSetData implements IXmlReader
{ {
private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName()); private static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
public Map<Integer, ArmorSet> _armorSets = new HashMap<>(); private ArmorSet[] _armorSets;
private ArmorSetData() private ArmorSetData()
{ {
@ -47,12 +49,13 @@ public class ArmorSetData implements IXmlReader
public void load() public void load()
{ {
parseDatapackFile("data/ArmorSets.xml"); parseDatapackFile("data/ArmorSets.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
} }
@Override @Override
public void parseDocument(Document doc, File f) public void parseDocument(Document doc, File f)
{ {
final Map<Integer, ArmorSet> armorSets = new HashMap<>();
// StatsSet used to feed informations. Cleaned on every entry. // StatsSet used to feed informations. Cleaned on every entry.
final StatSet set = new StatSet(); final StatSet set = new StatSet();
@ -75,18 +78,27 @@ public class ArmorSetData implements IXmlReader
// Feed the map with new data. // Feed the map with new data.
final int chestId = set.getInt("chest"); 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<Integer, ArmorSet> armorSet : armorSets.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + armorSets.size() + " armor sets.");
armorSets.clear();
} }
public boolean setExists(int chestId) public boolean setExists(int chestId)
{ {
return _armorSets.containsKey(chestId); return _armorSets[chestId] != null;
} }
public ArmorSet getSet(int chestId) public ArmorSet getSet(int chestId)
{ {
return _armorSets.get(chestId); return _armorSets[chestId];
} }
public static ArmorSetData getInstance() public static ArmorSetData getInstance()

View File

@ -17,8 +17,10 @@
package org.l2jmobius.gameserver.data.xml.impl; package org.l2jmobius.gameserver.data.xml.impl;
import java.io.File; import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.Map.Entry;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NamedNodeMap;
@ -34,7 +36,8 @@ import org.l2jmobius.gameserver.model.holders.SkillHolder;
*/ */
public class ArmorSetData implements IXmlReader public class ArmorSetData implements IXmlReader
{ {
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
/** /**
* Instantiates a new armor sets data. * Instantiates a new armor sets data.
@ -47,9 +50,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @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) 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) public ArmorSet getSet(int chestId)
{ {
return _armorSets.get(chestId); return _armorSets[chestId];
} }
/** /**

View File

@ -17,8 +17,10 @@
package org.l2jmobius.gameserver.data.xml.impl; package org.l2jmobius.gameserver.data.xml.impl;
import java.io.File; import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.Map.Entry;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NamedNodeMap;
@ -34,7 +36,8 @@ import org.l2jmobius.gameserver.model.holders.SkillHolder;
*/ */
public class ArmorSetData implements IXmlReader public class ArmorSetData implements IXmlReader
{ {
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
/** /**
* Instantiates a new armor sets data. * Instantiates a new armor sets data.
@ -47,9 +50,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @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) 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) public ArmorSet getSet(int chestId)
{ {
return _armorSets.get(chestId); return _armorSets[chestId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -151,7 +160,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**

View File

@ -20,12 +20,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Stream; 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 static final Logger LOGGER = Logger.getLogger(ArmorSetData.class.getName());
private final Map<Integer, ArmorSet> _armorSets = new ConcurrentHashMap<>(); private ArmorSet[] _armorSets;
private final Map<Integer, List<ArmorSet>> _armorSetItems = new ConcurrentHashMap<>(); private final Map<Integer, ArmorSet> _armorSetMap = new HashMap<>();
private final Map<Integer, List<ArmorSet>> _armorSetItems = new HashMap<>();
protected ArmorSetData() protected ArmorSetData()
{ {
@ -59,9 +61,16 @@ public class ArmorSetData implements IXmlReader
@Override @Override
public void load() public void load()
{ {
_armorSets.clear();
parseDatapackDirectory("data/stats/armorsets", false); parseDatapackDirectory("data/stats/armorsets", false);
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " armor sets.");
_armorSets = new ArmorSet[Collections.max(_armorSetMap.keySet()) + 1];
for (Entry<Integer, ArmorSet> armorSet : _armorSetMap.entrySet())
{
_armorSets[armorSet.getKey()] = armorSet.getValue();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _armorSetMap.size() + " armor sets.");
_armorSetMap.clear();
} }
@Override @Override
@ -149,7 +158,7 @@ public class ArmorSetData implements IXmlReader
} }
final ArmorSet set = new ArmorSet(id, minimumPieces, isVisual, requiredItems, optionalItems, skills, stats); 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()); 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) public ArmorSet getSet(int setId)
{ {
return _armorSets.get(setId); return _armorSets[setId];
} }
/** /**