package joshie.harvest.player;
import joshie.harvest.core.HFTrackers;
import joshie.harvest.core.helpers.EntityHelper;
import joshie.harvest.core.util.annotations.HFEvents;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import javax.annotation.Nullable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.UUID;
@HFEvents
public class PlayerLoader {
private static File PLAYER_DIR;
private static File getFolder(File playerDir) {
File dir = new File(playerDir, "HF");
if (!dir.exists()) {
dir.mkdirs();
}
return dir;
}
public static PlayerTrackerServer getDataFromUUID(@Nullable EntityPlayerMP player, UUID uuid) {
PlayerTrackerServer data = new PlayerTrackerServer(player, uuid);
if (PLAYER_DIR != null) {
File file = new File(getFolder(PLAYER_DIR), uuid + ".dat");
if (!file.exists() && player != null)
file = new File(getFolder(PLAYER_DIR), EntityHelper.getLastKnownUUID(player) + ".dat");
if (file.exists()) {
try {
FileInputStream fileinputstream = new FileInputStream(file);
NBTTagCompound tag = CompressedStreamTools.readCompressed(fileinputstream);
fileinputstream.close();
data.readFromNBT(tag);
} catch (Exception e) {
e.printStackTrace();
}
}
}
HFTrackers.setPlayerData(uuid, data);
return data;
}
@SubscribeEvent
public void onPlayerLoad(PlayerEvent.LoadFromFile event) {
PLAYER_DIR = event.getPlayerDirectory(); //Refresh the directory
getDataFromUUID((EntityPlayerMP) event.getEntityPlayer(), EntityHelper.getPlayerUUID(event.getEntityPlayer()));
}
//Setup the Player
@SubscribeEvent
public void onPlayerSave(PlayerEvent.SaveToFile event) {
try {
PlayerTrackerServer data = HFTrackers.getPlayerTrackerFromPlayer(event.getEntityPlayer());
File file = new File(getFolder(event.getPlayerDirectory()), EntityHelper.getPlayerUUID(event.getEntityPlayer()) + ".dat");
NBTTagCompound tag = data.writeToNBT(new NBTTagCompound());
FileOutputStream fileoutputstream = new FileOutputStream(file);
CompressedStreamTools.writeCompressed(tag, fileoutputstream);
fileoutputstream.close();
} catch (Exception e) { e.printStackTrace(); }
}
}