// Path: src/heroesgrave/utils/io/IOUtils.java
// public class IOUtils
// {
// 	private static Class<?> MAIN_CLASS;
// 	
// 	private IOUtils()
// 	{
// 		
// 	}
// 	
// 	public static void setMainClass(Class<?> c)
// 	{
// 		MAIN_CLASS = c;
// 	}
// 	
// 	public static String jarDir()
// 	{
// 		try
// 		{
// 			return new File(MAIN_CLASS.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent();
// 		}
// 		catch(URISyntaxException e)
// 		{
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// 	
// 	public static String jarPath()
// 	{
// 		try
// 		{
// 			return MAIN_CLASS.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
// 		}
// 		catch(URISyntaxException e)
// 		{
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// 	
// 	public static String assemblePath(String... path)
// 	{
// 		String fullPath = "";
// 		for(String p : path)
// 		{
// 			fullPath += File.separator + p;
// 		}
// 		return fullPath;
// 	}
// 	
// 	public static String fileToString(String path)
// 	{
// 		StringBuffer sBuffer = new StringBuffer();
// 		try
// 		{
// 			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
// 			char[] buffer = new char[1024];
// 			
// 			int c;
// 			
// 			while((c = reader.read(buffer, 0, buffer.length)) != -1)
// 			{
// 				sBuffer.append(buffer, 0, c);
// 			}
// 			reader.close();
// 		}
// 		catch(IOException e)
// 		{
// 			e.printStackTrace();
// 		}
// 		
// 		return sBuffer.toString();
// 	}
// 	
// 	public static String fileToStringOneLine(String path)
// 	{
// 		String string = new String();
// 		try
// 		{
// 			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
// 			
// 			String line;
// 			while((line = reader.readLine()) != null)
// 			{
// 				string += line;
// 			}
// 			reader.close();
// 		}
// 		catch(IOException e)
// 		{
// 			e.printStackTrace();
// 		}
// 		
// 		return string;
// 	}
// 	
// 	public static String relativeFrom(File from, File to)
// 	{
// 		return from.toURI().relativize(to.toURI()).getPath();
// 	}
// }


import heroesgrave.utils.io.IOUtils;
		}
	}
	
	public static Version parse(String version)
	{
		if(version.startsWith("\"") && version.endsWith("\""))
		{
			return new Version(version.substring(1, version.length() - 1));
		}
		try
		{
			String[] dot = version.split("\\.");
			String[] dash = dot[2].split("-");
			
			String major = dot[0];
			String minor = dot[1];
			String patch = dash[0];
			String type = null;
			
			if(dash.length == 2)
			{
				type = dash[1];
			}
			return new Version(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch), type);
		}
		catch(Exception e)
		{
			System.err.println("Badly formatted version: " + version);
			System.err.println("Due to the recent switch to semantic versioning, outdated plugins using the wrong versioning scheme will eventually cause a crash here.\n" +
					"Please clear out all plugin directories (\n\t" +
// Path: src/heroesgrave/utils/io/IOUtils.java
// public class IOUtils
// {
// 	private static Class<?> MAIN_CLASS;
// 	
// 	private IOUtils()
// 	{
// 		
// 	}
// 	
// 	public static void setMainClass(Class<?> c)
// 	{
// 		MAIN_CLASS = c;
// 	}
// 	
// 	public static String jarDir()
// 	{
// 		try
// 		{
// 			return new File(MAIN_CLASS.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent();
// 		}
// 		catch(URISyntaxException e)
// 		{
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// 	
// 	public static String jarPath()
// 	{
// 		try
// 		{
// 			return MAIN_CLASS.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
// 		}
// 		catch(URISyntaxException e)
// 		{
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// 	
// 	public static String assemblePath(String... path)
// 	{
// 		String fullPath = "";
// 		for(String p : path)
// 		{
// 			fullPath += File.separator + p;
// 		}
// 		return fullPath;
// 	}
// 	
// 	public static String fileToString(String path)
// 	{
// 		StringBuffer sBuffer = new StringBuffer();
// 		try
// 		{
// 			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
// 			char[] buffer = new char[1024];
// 			
// 			int c;
// 			
// 			while((c = reader.read(buffer, 0, buffer.length)) != -1)
// 			{
// 				sBuffer.append(buffer, 0, c);
// 			}
// 			reader.close();
// 		}
// 		catch(IOException e)
// 		{
// 			e.printStackTrace();
// 		}
// 		
// 		return sBuffer.toString();
// 	}
// 	
// 	public static String fileToStringOneLine(String path)
// 	{
// 		String string = new String();
// 		try
// 		{
// 			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
// 			
// 			String line;
// 			while((line = reader.readLine()) != null)
// 			{
// 				string += line;
// 			}
// 			reader.close();
// 		}
// 		catch(IOException e)
// 		{
// 			e.printStackTrace();
// 		}
// 		
// 		return string;
// 	}
// 	
// 	public static String relativeFrom(File from, File to)
// 	{
// 		return from.toURI().relativize(to.toURI()).getPath();
// 	}
// }


// Path: src/heroesgrave/utils/misc/Version.java
import heroesgrave.utils.io.IOUtils;

		}
	}
	
	public static Version parse(String version)
	{
		if(version.startsWith("\"") && version.endsWith("\""))
		{
			return new Version(version.substring(1, version.length() - 1));
		}
		try
		{
			String[] dot = version.split("\\.");
			String[] dash = dot[2].split("-");
			
			String major = dot[0];
			String minor = dot[1];
			String patch = dash[0];
			String type = null;
			
			if(dash.length == 2)
			{
				type = dash[1];
			}
			return new Version(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch), type);
		}
		catch(Exception e)
		{
			System.err.println("Badly formatted version: " + version);
			System.err.println("Due to the recent switch to semantic versioning, outdated plugins using the wrong versioning scheme will eventually cause a crash here.\n" +
					"Please clear out all plugin directories (\n\t" +
					IOUtils.assemblePath(IOUtils.jarDir(), "plugins") +