blob: 5850af7d54df49574a474221170983b428fd83f5 [file] [log] [blame] [raw]
package calclavia.lib;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.MinecraftServer;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
public class NBTFileLoader
{
/**
* Saves NBT data in the world folder.
*
* @return True on success.
*/
public static boolean saveData(File saveDirectory, String filename, NBTTagCompound data)
{
try
{
File tempFile = new File(saveDirectory, filename + "_tmp.dat");
File file = new File(saveDirectory, filename + ".dat");
CompressedStreamTools.writeCompressed(data, new FileOutputStream(tempFile));
if (file.exists())
{
file.delete();
}
tempFile.renameTo(file);
FMLLog.fine("Saved " + filename + " NBT data file successfully.");
return true;
}
catch (Exception e)
{
System.out.println("Failed to save " + filename + ".dat!");
e.printStackTrace();
return false;
}
}
public static boolean saveData(String filename, NBTTagCompound data)
{
return saveData(getSaveDirectory(MinecraftServer.getServer().getFolderName()), filename, data);
}
/**
* Reads NBT data from the world folder.
*
* @return The NBT data
*/
public static NBTTagCompound loadData(File saveDirectory, String filename)
{
try
{
File file = new File(saveDirectory, filename + ".dat");
if (file.exists())
{
FMLLog.fine("Loaded " + filename + " data.");
return CompressedStreamTools.readCompressed(new FileInputStream(file));
}
else
{
FMLLog.fine("Created new " + filename + " data.");
return new NBTTagCompound();
}
}
catch (Exception e)
{
System.out.println("Failed to load " + filename + ".dat!");
e.printStackTrace();
return null;
}
}
public static NBTTagCompound loadData(String filename)
{
return loadData(getSaveDirectory(MinecraftServer.getServer().getFolderName()), filename);
}
public static File getSaveDirectory(String worldName)
{
File parent = getBaseDirectory();
if (FMLCommonHandler.instance().getSide().isClient())
{
parent = new File(getBaseDirectory(), "saves" + File.separator);
}
return new File(parent, worldName + File.separator);
}
public static File getBaseDirectory()
{
if (FMLCommonHandler.instance().getSide().isClient())
{
FMLClientHandler.instance().getClient();
return FMLClientHandler.instance().getClient().mcDataDir;
}
else
{
return new File(".");
}
}
}