diff --git a/src/engine/ConfigParsing/EffectsParser.java b/src/engine/ConfigParsing/EffectsParser.java index 605d25c1..bb923b7e 100644 --- a/src/engine/ConfigParsing/EffectsParser.java +++ b/src/engine/ConfigParsing/EffectsParser.java @@ -9,12 +9,8 @@ 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.IOException; import java.nio.file.Files; @@ -22,179 +18,29 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class EffectsParser { public static String EffectsPath = ConfigManager.DEFAULT_DATA_DIR + "wpak/Effects.cfg"; public static HashMap effect_data = new HashMap<>(); + private static final Pattern EFFECT_REGEX = Pattern.compile("(.+?)", Pattern.DOTALL); + private static final Pattern SOURCE_REGEX = Pattern.compile("(.+?)", Pattern.DOTALL); + private static final Pattern MODS_REGEX = Pattern.compile("(.+?)", Pattern.DOTALL); public static void init() throws IOException { - ArrayList> compiledData = new ArrayList<>(); - List fileData = Files.readAllLines(Paths.get(EffectsPath)); - ArrayList modData = new ArrayList<>(); + byte[] fileData = Files.readAllBytes(Paths.get(EffectsPath)); + String fileContents = new String(fileData); - for (String line : fileData) { + final List effectEntries = new ArrayList<>(); + final Matcher matcher = EFFECT_REGEX.matcher(fileContents); - if (line.contains("EFFECTBEGIN")) { - modData = new ArrayList<>(); - continue; - } - - if (line.contains("EFFECTEND")) - compiledData.add(modData); - else - modData.add(line); + while (matcher.find()) { + effectEntries.add(matcher.group(1)); } - CreateBlocks(compiledData); } - 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 { - String rawData = compiledLines.get(1).replace(" ", ""); - if(rawData.contains("\"")){ - int startIndex = rawData.indexOf('"') + 1; - int endIndex = rawData.lastIndexOf('"'); - char[] nameValue = rawData.toCharArray(); - String name = ""; - for(int i = startIndex; i < endIndex; i++){ - name += nameValue[i]; - } - effectData.name = name; - } - int iconID; - try { - iconID = Integer.parseInt(compiledLines.get(1).replace(" ", "").split(" ")[2]); - } catch(Exception e){ - iconID = 0; - } - effectData.icon = iconID; - } catch (Exception e) { - Logger.error(e); - } - - int index = 0; - - //log all sources - - for (String line : compiledLines) { - String rawValue; - if (line.contains("SOURCEBEGIN")) { - rawValue = compiledLines.get(index + 1).replace(" ", ""); - switch (rawValue) { - case "Crush": - rawValue = "Crushing"; - break; - case "Slash": - rawValue = "Slashing"; - break; - case "Pierce": - rawValue = "Piercing"; - break; - - } - effectData.sources.add(mbEnums.EffectSourceType.valueOf(rawValue)); - } - index++; - } - - //log all mods - - index = 0; - - for (String line : compiledLines) { - - if (line.contains("MODSBEGIN")) { - - int extra = 1; - Mod mod = new Mod(); - - while (!compiledLines.get(index + extra).contains("MODSEND")) { - //data.mods.add(lines[index + extra].Replace(" ", "")); - String rawValue = compiledLines.get(index + extra).replace(" ", "").split(" ")[0]; - try { - mod.type = mbEnums.ModType.valueOf(rawValue); - }catch(Exception e){ - mod.type = mbEnums.ModType.None; - } - GenerateModValues(mod, compiledLines.get(index + extra).replace(" ", "").replace(" ", "").split(" ")); - extra++; - } - effectData.mods.add(mod); - } - index++; - } - - //log all conditions - - index = 0; - for (String line : compiledLines) { - - if (line.contains("CONDITIONBEGIN")) { - - int extra = 1; - - 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 = compiledLines.get(index + extra).replace(" ", "").split(" ")[0]; - condition.value = compiledLines.get(index + extra).replace(" ", "").split(" ")[1]; - } - extra++; - } - } - index++; - } - effect_data.put(effectData.id, effectData); - } - Logger.info("Effects.cfg Parsing Completed"); - } - - public static void GenerateModValues(Mod inMod, String[] data) { - - - - int maxValue = 5; - - if(inMod.type != null && inMod.type.name().equals("Health")){ - maxValue = 7; - } - - if(data.length < maxValue) - maxValue = data.length; - - inMod.values = new ArrayList<>(); - - for (int i = 1; i < data.length; i++) - if (!data[i].isEmpty()) { - if (i >= maxValue) - continue; - - if (i == maxValue - 1) - try { - String entry = ""; - for (int j = i; j < data.length; j ++){ - entry += data[j] + " "; - } - entry = entry.trim(); - inMod.values.add(entry.trim()); - } catch (Exception e) { - inMod.values.add(data[i]); - } - else - inMod.values.add(data[i]); - } - } -} \ No newline at end of file +}