| 
					
				 | 
			
			
				@@ -25,7 +25,7 @@ public abstract class BukkitConfig { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.fileName = fileName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.dataFolder = dataFolder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         configFile = new File(dataFolder, fileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        purgeComments(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // purgeComments(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.config = initConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         initDefaults(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         updateFile(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -124,84 +124,84 @@ public abstract class BukkitConfig { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return configFile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Somewhere between December 2021-January 2022 Spigot updated their 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * SnakeYAML dependency/API and due to our own crappy legacy code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * this introduced a very problematic bug where comments got duplicated 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * This method hotfixes the problem by just deleting any existing comments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * it's ugly, but it gets the job done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param silentFail when true mcMMO will report errors during the patch process or debug information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     *                   the option to have it fail silently is because mcMMO wants to check files before they are parsed as a file with a zillion comments will fail to even load 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void purgeComments(boolean silentFail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!configFile.exists()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int dupedLines = 0, lineCount = 0, lineCountAfter = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        try (FileReader fileReader = new FileReader(configFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             BufferedReader bufferedReader = new BufferedReader(fileReader)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            StringBuilder stringBuilder = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String line; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Set<String> seenBefore = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            stringBuilder.append(CURRENT_CONFIG_PATCH_VER).append(System.lineSeparator()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            boolean noPatchNeeded = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // While not at the end of the file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while ((line = bufferedReader.readLine()) != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                lineCount++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(line.startsWith(CURRENT_CONFIG_PATCH_VER)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    noPatchNeeded = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //Older version, don't append this line 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(line.startsWith(CONFIG_PATCH_PREFIX)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (isFirstCharAsciiCharacter(line, COMMENT_PREFIX)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(seenBefore.contains(line)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        dupedLines++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        seenBefore.add(line); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    continue; //Delete the line by not appending it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                stringBuilder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .append(line) //Convert existing files into two-spaced format 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .append(System.lineSeparator()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                lineCountAfter++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(noPatchNeeded) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(lineCount == 0 && !silentFail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.p.getLogger().info("[config patcher] Config line count: " + lineCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw new InvalidConfigurationException("[config patcher] Patching of config file resulted in an empty file, this will not be saved. Contact the mcMMO devs!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(dupedLines > 0 && !silentFail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.p.getLogger().info("[config patcher] Found "+dupedLines+" duplicate comments in config file: " + configFile.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.p.getLogger().info("[config patcher] Purging the duplicate comments... (Nothing is broken, this is just info used for debugging)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.p.getLogger().info("[config patcher] Line count before: "+lineCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.p.getLogger().info("[config patcher] Line count after: "+lineCountAfter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // Write out the *patched* file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // AKA the file without any comments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try (FileWriter fileWriter = new FileWriter(configFile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                fileWriter.write(stringBuilder.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } catch (IOException | InvalidConfigurationException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            mcMMO.p.getLogger().severe("Failed to patch config file: " + configFile.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ex.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * Somewhere between December 2021-January 2022 Spigot updated their 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * SnakeYAML dependency/API and due to our own crappy legacy code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * this introduced a very problematic bug where comments got duplicated 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * This method hotfixes the problem by just deleting any existing comments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * it's ugly, but it gets the job done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     * @param silentFail when true mcMMO will report errors during the patch process or debug information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     *                   the option to have it fail silently is because mcMMO wants to check files before they are parsed as a file with a zillion comments will fail to even load 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    private void purgeComments(boolean silentFail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        if(!configFile.exists()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        int dupedLines = 0, lineCount = 0, lineCountAfter = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        try (FileReader fileReader = new FileReader(configFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             BufferedReader bufferedReader = new BufferedReader(fileReader)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            StringBuilder stringBuilder = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            String line; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            Set<String> seenBefore = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            stringBuilder.append(CURRENT_CONFIG_PATCH_VER).append(System.lineSeparator()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            boolean noPatchNeeded = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // While not at the end of the file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            while ((line = bufferedReader.readLine()) != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                lineCount++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                if(line.startsWith(CURRENT_CONFIG_PATCH_VER)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    noPatchNeeded = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                //Older version, don't append this line 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                if(line.startsWith(CONFIG_PATCH_PREFIX)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                if (isFirstCharAsciiCharacter(line, COMMENT_PREFIX)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    if(seenBefore.contains(line)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        dupedLines++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        seenBefore.add(line); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    continue; //Delete the line by not appending it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                stringBuilder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        .append(line) //Convert existing files into two-spaced format 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        .append(System.lineSeparator()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                lineCountAfter++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            if(noPatchNeeded) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            if(lineCount == 0 && !silentFail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                mcMMO.p.getLogger().info("[config patcher] Config line count: " + lineCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                throw new InvalidConfigurationException("[config patcher] Patching of config file resulted in an empty file, this will not be saved. Contact the mcMMO devs!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            if(dupedLines > 0 && !silentFail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                mcMMO.p.getLogger().info("[config patcher] Found "+dupedLines+" duplicate comments in config file: " + configFile.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                mcMMO.p.getLogger().info("[config patcher] Purging the duplicate comments... (Nothing is broken, this is just info used for debugging)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                mcMMO.p.getLogger().info("[config patcher] Line count before: "+lineCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                mcMMO.p.getLogger().info("[config patcher] Line count after: "+lineCountAfter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // Write out the *patched* file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // AKA the file without any comments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            try (FileWriter fileWriter = new FileWriter(configFile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                fileWriter.write(stringBuilder.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } catch (IOException | InvalidConfigurationException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            mcMMO.p.getLogger().severe("Failed to patch config file: " + configFile.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            ex.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private boolean isFirstCharAsciiCharacter(String line, char character) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(line == null || line.isEmpty()) { 
			 |