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("."); } } }