|  |  |  | @ -9,12 +9,8 @@@@ -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;@@ -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<String, EffectData> effect_data = new HashMap<>(); | 
			
		
	
		
			
				
					|  |  |  |  |     private static final Pattern EFFECT_REGEX = Pattern.compile("<EFFECTBEGIN>(.+?)</EFFECTEND>", Pattern.DOTALL); | 
			
		
	
		
			
				
					|  |  |  |  |     private static final Pattern SOURCE_REGEX = Pattern.compile("<SOURCEBEGIN>(.+?)</SOURCEEND>", Pattern.DOTALL); | 
			
		
	
		
			
				
					|  |  |  |  |     private static final Pattern MODS_REGEX = Pattern.compile("<MODSBEGIN>(.+?)</MODSEND>", Pattern.DOTALL); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static void init() throws IOException { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         ArrayList<ArrayList<String>> compiledData = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         List<String> fileData = Files.readAllLines(Paths.get(EffectsPath)); | 
			
		
	
		
			
				
					|  |  |  |  |         ArrayList<String> modData = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         byte[] fileData = Files.readAllBytes(Paths.get(EffectsPath)); | 
			
		
	
		
			
				
					|  |  |  |  |         String fileContents = new String(fileData); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         for (String line : fileData) { | 
			
		
	
		
			
				
					|  |  |  |  |         final List<String> 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<ArrayList<String>> compiledData) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         for (ArrayList<String> 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]); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |