package com.rota.ee3help;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.pahimar.ee3.api.exchange.EnergyValue;
import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.reference.Reference;
import com.pahimar.ee3.util.SerializationHelper;
import cpw.mods.fml.common.FMLCommonHandler;
public class DataTracker
{
public static final String EE3_ENERGYVALUES_DIR =
FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectory()
+ File.separator +"data" + File.separator
+ Reference.LOWERCASE_MOD_ID + File.separator
+ "energyvalues";
public static final String EE3_ENERGYVALUES_DIR_OFFSET =
"data" + File.separator
+ Reference.LOWERCASE_MOD_ID
+ File.separator + "energyvalues";
public static final String EE3H_USERDATA_DIR = "data" + File.separator + "ee3h" + File.separator + "userdata";
public static final String MC_SAVES_DIR = "saves";
private static HashMap<File,String> worldData = new HashMap<File,String>();
private static ArrayList<File> worldDataList = new ArrayList<File>();
private static ArrayList<File> userDataList = new ArrayList<File>();
public static HashMap<File,String> data = new HashMap<File,String>();
public static ArrayList<File> dataList = new ArrayList<File>();
public static boolean listAccurate;
// Use this - SerializationHelper.readEnergyValueStackMapFromJsonFile
// Use this - SerializationHelper.writeEnergyValueStackMapToJsonFile
public static void buildList()
{
dataList.clear();
data.clear();
buildUserList();
buildWorldList();
for(File f : worldDataList)
{
dataList.add(f);
data.put(f,"WORLD: "+worldData.get(f));
}
for(File f : userDataList)
{
dataList.add(f);
data.put(f,"USER: "+f.getName());
}
listAccurate = true;
}
public static void buildUserList()
{
userDataList.clear();
File dir = new File(EE3H_USERDATA_DIR);
if(!dir.exists())
dir.mkdirs();
if(dir.isDirectory())
{
for(File f : dir.listFiles())
{
if(f.getName().toLowerCase().endsWith(".json"))
{
userDataList.add(f);
}
}
}
}
public static void buildWorldList()
{
worldData.clear();
worldDataList.clear();
File dir = new File(MC_SAVES_DIR);
if(!dir.exists())
dir.mkdir();
if(dir.isDirectory())
{
File [] folders = dir.listFiles();
for(File f : folders)
{
if(f.isDirectory())
{
for(File internal : Arrays.asList(f.listFiles()))
{
if(internal.getName().contains("level.dat"))
{
worldData.put(new File(MC_SAVES_DIR + File.separator
+ f.getName() + File.separatorChar
+ EE3_ENERGYVALUES_DIR_OFFSET + File.separator
+ Helper.getEE3File("pre", "values"))
,f.getName());
break;
}
}
}
}
}
for(Map.Entry<File,String> entry : worldData.entrySet())
{
if(entry.getKey().exists())
worldDataList.add(entry.getKey());
}
}
public static boolean importData(int index)
{
if(!listAccurate) return false;
try
{
dataList.get(index);
}
catch (ArrayIndexOutOfBoundsException e)
{
return false;
}
Map<WrappedStack, EnergyValue> dataMap = SerializationHelper.readEnergyValueStackMapFromJsonFile(dataList.get(index));
Helper.savePre(dataMap);
listAccurate = false;
return true;
}
public static void exportData()
{
File dir = new File(EE3H_USERDATA_DIR);
if(!dir.exists())
dir.mkdirs();
if(dir.isDirectory())
{
Map<WrappedStack, EnergyValue> dataMap = Helper.loadPre();
String folderName = FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectoryName();
File values = new File(dir + File.separator + "EMC-"+folderName.toUpperCase()+".json");
if(values.exists())
values.delete();
SerializationHelper.writeEnergyValueStackMapToJsonFile(values, dataMap);
}
listAccurate = false;
}
}