diff --git a/src/engine/ConfigParsing/EffectsParser.java b/src/engine/ConfigParsing/EffectsParser.java index 64437204..2776c857 100644 --- a/src/engine/ConfigParsing/EffectsParser.java +++ b/src/engine/ConfigParsing/EffectsParser.java @@ -8,144 +8,132 @@ package engine.ConfigParsing; + import engine.ConfigParsing.EffectsData.Condition; import engine.ConfigParsing.EffectsData.EffectData; import engine.ConfigParsing.EffectsData.Mod; import engine.gameManager.ConfigManager; import engine.mbEnums; +import org.pmw.tinylog.Logger; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class EffectsParser { + public static String EffectsPath = ConfigManager.DEFAULT_DATA_DIR + "wpak/Effects.cfg"; - public static HashMap effect_data = new HashMap<>(); + public static HashMap effect_data = new HashMap<>(); + public static void init() throws IOException { + ArrayList> compiledData = new ArrayList<>(); - String[] lines = readLines(EffectsPath); - ArrayList data = new ArrayList<>(); - for(String line : lines) - { - if (line.contains("EFFECTBEGIN")) - { - data = new ArrayList<>(); - } else if(!line.contains("EFFECTEND")) - { - data.add(line); - } - else if (line.contains("EFFECTEND")) - { - compiledData.add(data); + List fileData = Files.readAllLines(Paths.get(EffectsPath)); + ArrayList modData = new ArrayList<>(); + + for (String line : fileData) { + + if (line.contains("EFFECTBEGIN")) { + modData = new ArrayList<>(); + continue; } + + if (line.contains("EFFECTEND")) + compiledData.add(modData); + else + modData.add(line); } + CreateBlocks(compiledData); } - public static String[] readLines(String filename) throws IOException { - FileReader fileReader = new FileReader(filename); - BufferedReader bufferedReader = new BufferedReader(fileReader); - List lines = new ArrayList<>(); - String line; - while ((line = bufferedReader.readLine()) != null) { - lines.add(line); - } - bufferedReader.close(); - return lines.toArray(new String[0]); - } - public static void CreateBlocks(ArrayList> compiledData) - { - for (ArrayList lines : compiledData) - { - EffectData data = new EffectData(); - data.id = lines.get(1).replace(" ", "").split(" ")[0]; - try - { - data.name = lines.get(1).replace(" ", "").replace("\"", "").split(" ")[1]; - } - catch(Exception e) - { - } - try - { - data.icon = Integer.parseInt(lines.get(1).replace(" ", "").split(" ")[2]); - } - catch(Exception e) - { + public static void CreateBlocks(ArrayList> compiledData) { + + for (ArrayList compiledLines : compiledData) { + EffectData effectData = new EffectData(); + effectData.id = compiledLines.get(1).replace(" ", "").split(" ")[0]; + effectData.sources = new ArrayList<>(); + effectData.mods = new ArrayList<>(); + effectData.conditions = new ArrayList<>(); + + try { + effectData.name = compiledLines.get(1).replace(" ", "").replace("\"", "").split(" ")[1]; + effectData.icon = Integer.parseInt(compiledLines.get(1).replace(" ", "").split(" ")[2]); + } catch (Exception e) { + Logger.error(e); } - //log all sources - data.sources = new ArrayList<>(); + int index = 0; - for(String line : lines) { - if (line.contains("SOURCEBEGIN")) - { - data.sources.add(mbEnums.EffectSourceType.valueOf(lines.get(index + 1).replace(" ", ""))); + + //log all sources + + for (String line : compiledLines) { + + if (line.contains("SOURCEBEGIN")) + effectData.sources.add(mbEnums.EffectSourceType.valueOf(compiledLines.get(index + 1).replace(" ", ""))); + + index++; } - index++; - } //log all mods - data.mods = new ArrayList<>(); + index = 0; + for (String line : compiledLines) { + + if (line.contains("MODSBEGIN")) { - for (String line : lines) - { - if (line.contains("MODSBEGIN")) - { int extra = 1; Mod mod = new Mod(); - while(!lines.get(index + extra).contains("MODSEND")) - { + + while (!compiledLines.get(index + extra).contains("MODSEND")) { //data.mods.add(lines[index + extra].Replace(" ", "")); - mod.type = mbEnums.ModType.valueOf(lines.get(index + extra).replace(" ", "").split(" ")[0]); - GenerateModValues(mod, lines.get(index + extra).replace(" ", "").replace(" ", "").split(" ")); + mod.type = mbEnums.ModType.valueOf(compiledLines.get(index + extra).replace(" ", "").split(" ")[0]); + GenerateModValues(mod, compiledLines.get(index + extra).replace(" ", "").replace(" ", "").split(" ")); extra++; } - data.mods.add(mod); + effectData.mods.add(mod); } index++; } //log all conditions - data.conditions = new ArrayList<>(); + index = 0; - for (String line : lines) - { - if (line.contains("CONDITIONBEGIN")) - { + for (String line : compiledLines) { + + if (line.contains("CONDITIONBEGIN")) { + int extra = 1; - while (!lines.get(index + extra).contains("CONDITIONEND")) - { - if (!lines.get(index + extra).contains("#")) - { + + while (!compiledLines.get(index + extra).contains("CONDITIONEND")) { + + if (!compiledLines.get(index + extra).contains("#")) { //data.conditions.add(lines[index + extra].Replace(" ", "")); Condition condition = new Condition(); - condition.type = lines.get(index + extra).replace(" ", "").split(" ")[0]; - condition.value = lines.get(index + extra).replace(" ", "").split(" ")[1]; + condition.type = compiledLines.get(index + extra).replace(" ", "").split(" ")[0]; + condition.value = compiledLines.get(index + extra).replace(" ", "").split(" ")[1]; } extra++; } } index++; } - effect_data.put(data.id,data); + effect_data.put(effectData.id, effectData); } } - public static void GenerateModValues(Mod inMod, String[] data) - { + + public static void GenerateModValues(Mod inMod, String[] data) { + inMod.values = new ArrayList<>(); - for(int i = 1; i < data.length; i++) - { - if(data[i].length() != 0) - { + + for (int i = 1; i < data.length; i++) + if (!data[i].isEmpty()) inMod.values.add(data[i]); - } - } + } } \ No newline at end of file