// Path: src/speiger/src/api/common/core/SpmodMod.java
// public interface SpmodMod
// {	
// 	
// 	/**
// 	 * @return Logging name
// 	 */
// 	public String getModName();
// 	
// 	/**
// 	 * @return custom Logger
// 	 * @Default can be found in the registry
// 	 */
// 	public LogProxy getLogger();
// 	
// }
// 
// Path: src/speiger/src/api/common/core/SpmodModRegistry.java
// public class SpmodModRegistry
// {
// 	private static HashMap<String, SpmodMod> addons = new HashMap<String, SpmodMod>();
// 	private static LogProxy defaultProxy;
// 	
// 	static
// 	{
// 		SpmodMod baseMod = new SpmodMod(){
// 			@Override
// 			public LogProxy getLogger()
// 			{
// 				return defaultProxy;
// 			}
// 			@Override
// 			public String getModName()
// 			{
// 				return "Spmod Mod";
// 			}
// 		};
// 		addons.put("Spmod Mod", baseMod);
// 		defaultProxy = new LogProxy(baseMod);
// 	}
// 	
// 	public static void registerMod(SpmodMod par1)
// 	{
// 		if (par1.getClass().isAnnotationPresent(Mod.class) && !Strings.isNullOrEmpty(par1.getModName()))
// 		{
// 			addons.put(par1.getModName(), par1);
// 		}
// 		else
// 		{
// 			FMLLog.getLogger().info(par1.getModName() + " Is not a valid SpmodMod, He will not registered");
// 		}
// 	}
// 	
// 	public static boolean isAddonRegistered(SpmodMod par1)
// 	{
// 		if(par1 == null)
// 		{
// 			return false;
// 		}
// 		return isAddonRegistered(par1.getModName());
// 	}
// 	
// 	public static boolean isAddonRegistered(String par1)
// 	{
// 		return addons.containsKey(par1);
// 	}
// 	
// 	public static boolean areAddonsEqual(SpmodMod par1, SpmodMod par2)
// 	{
// 		if(!isAddonRegistered(par1) || !isAddonRegistered(par2))
// 		{
// 			return false;
// 		}
// 		return par1.getModName().equals(par2.getModName());
// 	}
// 	
// 	public static SpmodMod getModFromName(String par1)
// 	{
// 		return addons.get(par1);
// 	}
// 	
// 	public static Collection<SpmodMod> getRegisteredMods()
// 	{
// 		return addons.values();
// 	}
// 	
// 	public static LogProxy getDefaultLogger(SpmodMod par1)
// 	{
// 		if(!isAddonRegistered(par1))
// 		{
// 			return null;
// 		}
// 		return defaultProxy;
// 	}
// 	
// 	public static void log(SpmodMod mod, String par2)
// 	{
// 		mod.getLogger().print(par2);
// 	}
// 	
// 	public static void log(SpmodMod mod, Object par2)
// 	{
// 		mod.getLogger().print(par2);
// 	}
// }
// 
// Path: src/speiger/src/api/common/data/nbt/INBTListener.java
// public static enum LoadingState
// {
// 	Loading,
// 	Loaded,
// 	FailedLoading,
// 	Saving,
// 	RequestedSaving,
// 	Saved,
// 	FailedSaving,
// 	Done;
// }


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.server.MinecraftServer;
import speiger.src.api.common.core.SpmodMod;
import speiger.src.api.common.core.SpmodModRegistry;
import speiger.src.api.common.data.nbt.INBTListener.LoadingState;
import cpw.mods.fml.common.FMLLog;

	{
		if(server == null)
		{
			return;
		}
		String path = "";
		if (!server.isDedicatedServer())
		{
			path += "saves/";
		}
		path += server.getFolderName() + "/spmod";
		
		FMLLog.getLogger().info("Start Loading Data");
		try
		{
			for(SpmodMod mod : listeners.keySet())
			{
				try
				{
					File file = new File(path, mod.getModName()+"_data.dat");
					if(file.exists() && file.isFile())
					{
						InputStream fileStream = new DataInputStream(new FileInputStream(file));
						byte[] data = new byte[fileStream.available()];
						fileStream.read(data);
						fileStream.close();
						DataInputStream stream = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(data)));
						
						NBTTagCompound nbt = CompressedStreamTools.read(stream);
						SpmodMod fileMod = SpmodModRegistry.getModFromName(nbt.getString("ID"));

// Path: src/speiger/src/api/common/core/SpmodMod.java
// public interface SpmodMod
// {	
// 	
// 	/**
// 	 * @return Logging name
// 	 */
// 	public String getModName();
// 	
// 	/**
// 	 * @return custom Logger
// 	 * @Default can be found in the registry
// 	 */
// 	public LogProxy getLogger();
// 	
// }
// 
// Path: src/speiger/src/api/common/core/SpmodModRegistry.java
// public class SpmodModRegistry
// {
// 	private static HashMap<String, SpmodMod> addons = new HashMap<String, SpmodMod>();
// 	private static LogProxy defaultProxy;
// 	
// 	static
// 	{
// 		SpmodMod baseMod = new SpmodMod(){
// 			@Override
// 			public LogProxy getLogger()
// 			{
// 				return defaultProxy;
// 			}
// 			@Override
// 			public String getModName()
// 			{
// 				return "Spmod Mod";
// 			}
// 		};
// 		addons.put("Spmod Mod", baseMod);
// 		defaultProxy = new LogProxy(baseMod);
// 	}
// 	
// 	public static void registerMod(SpmodMod par1)
// 	{
// 		if (par1.getClass().isAnnotationPresent(Mod.class) && !Strings.isNullOrEmpty(par1.getModName()))
// 		{
// 			addons.put(par1.getModName(), par1);
// 		}
// 		else
// 		{
// 			FMLLog.getLogger().info(par1.getModName() + " Is not a valid SpmodMod, He will not registered");
// 		}
// 	}
// 	
// 	public static boolean isAddonRegistered(SpmodMod par1)
// 	{
// 		if(par1 == null)
// 		{
// 			return false;
// 		}
// 		return isAddonRegistered(par1.getModName());
// 	}
// 	
// 	public static boolean isAddonRegistered(String par1)
// 	{
// 		return addons.containsKey(par1);
// 	}
// 	
// 	public static boolean areAddonsEqual(SpmodMod par1, SpmodMod par2)
// 	{
// 		if(!isAddonRegistered(par1) || !isAddonRegistered(par2))
// 		{
// 			return false;
// 		}
// 		return par1.getModName().equals(par2.getModName());
// 	}
// 	
// 	public static SpmodMod getModFromName(String par1)
// 	{
// 		return addons.get(par1);
// 	}
// 	
// 	public static Collection<SpmodMod> getRegisteredMods()
// 	{
// 		return addons.values();
// 	}
// 	
// 	public static LogProxy getDefaultLogger(SpmodMod par1)
// 	{
// 		if(!isAddonRegistered(par1))
// 		{
// 			return null;
// 		}
// 		return defaultProxy;
// 	}
// 	
// 	public static void log(SpmodMod mod, String par2)
// 	{
// 		mod.getLogger().print(par2);
// 	}
// 	
// 	public static void log(SpmodMod mod, Object par2)
// 	{
// 		mod.getLogger().print(par2);
// 	}
// }
// 
// Path: src/speiger/src/api/common/data/nbt/INBTListener.java
// public static enum LoadingState
// {
// 	Loading,
// 	Loaded,
// 	FailedLoading,
// 	Saving,
// 	RequestedSaving,
// 	Saved,
// 	FailedSaving,
// 	Done;
// }


// Path: src/speiger/src/api/common/data/nbt/NBTStorage.java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.server.MinecraftServer;
import speiger.src.api.common.core.SpmodMod;
import speiger.src.api.common.core.SpmodModRegistry;
import speiger.src.api.common.data.nbt.INBTListener.LoadingState;
import cpw.mods.fml.common.FMLLog;

	{
		if(server == null)
		{
			return;
		}
		String path = "";
		if (!server.isDedicatedServer())
		{
			path += "saves/";
		}
		path += server.getFolderName() + "/spmod";
		
		FMLLog.getLogger().info("Start Loading Data");
		try
		{
			for(SpmodMod mod : listeners.keySet())
			{
				try
				{
					File file = new File(path, mod.getModName()+"_data.dat");
					if(file.exists() && file.isFile())
					{
						InputStream fileStream = new DataInputStream(new FileInputStream(file));
						byte[] data = new byte[fileStream.available()];
						fileStream.read(data);
						fileStream.close();
						DataInputStream stream = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(data)));
						
						NBTTagCompound nbt = CompressedStreamTools.read(stream);
						SpmodMod fileMod = SpmodModRegistry.getModFromName(nbt.getString("ID"));

						if(SpmodModRegistry.areAddonsEqual(mod, fileMod))
