Package com.epicsagaonline.bukkit.ChallengeMaps.DAL

Source Code of com.epicsagaonline.bukkit.ChallengeMaps.DAL.GameStateData

package com.epicsagaonline.bukkit.ChallengeMaps.DAL;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.HashSet;

import org.bukkit.entity.Player;
import org.yaml.snakeyaml.Yaml;

import com.epicsagaonline.bukkit.ChallengeMaps.Log;
import com.epicsagaonline.bukkit.ChallengeMaps.Util;
import com.epicsagaonline.bukkit.ChallengeMaps.objects.GameState;
import com.epicsagaonline.bukkit.ChallengeMaps.objects.Map;

public class GameStateData
{

  private static final String DATA_PATH = "data";
  private static boolean savingData = false;

  public static void saveData()
  {
    if (!savingData)
    {
      savingData = true;
      // Log.Write("Saving Gamestates.");
      for (String key : Current.GameStates.keySet())
      {
        GameState gs = Current.GameStates.get(key);
        Init();
        File file = new File(Current.Plugin.getDataFolder() + File.separator + DATA_PATH + File.separator + gs.getKey() + ".yml");
        if (!file.exists())
        {
          try
          {
            file.createNewFile();
          }
          catch (IOException e)
          {
            Log.Write(e.getMessage());
          }
        }
        Save(file, gs);
      }
      // Log.Write("Gamestates Saved.");
      savingData = false;
    }
  }

  private static void Save(File file, GameState gs)
  {
    Yaml yaml = new Yaml();
    HashMap<String, Object> root = new HashMap<String, Object>();
    FileOutputStream stream;
    BufferedWriter writer;
    HashSet<String> completedObjectives = new HashSet<String>();

    root.put("MapName", gs.getMap().getMapName());
    root.put("WorldName", gs.getWorld().getName());
    root.put("PlayerName", gs.getPlayer().getName());
    root.put("Score", gs.getScore());
    root.put("DeathCount", gs.getDeathCount());
    root.put("EntryPoint", Util.GetStringFromLocation(gs.getEntryPoint()));

    for (String obj : gs.getCompletedObjectives())
    {
      completedObjectives.add(obj);
    }
    root.put("CompletedObjectives", completedObjectives);

    root.put("BlocksBroken", gs.getBlocksBroken());
    root.put("BlocksPlaced", gs.getBlocksPlaced());
    root.put("BlocksPlacedDistance", gs.getBlocksPlacedDistance());
    root.put("ItemsCrafted", gs.getItemsCrafted());
    root.put("Rewards", gs.getRewards());
    root.put("MapContents", gs.getMapContents());
    root.put("InventoryBuffer", gs.getInventoryBuffer());
    root.put("InChallenge", gs.getInChallenge());

    try
    {

      stream = new FileOutputStream(file);
      stream.getChannel().truncate(0);
      writer = new BufferedWriter(new OutputStreamWriter(stream));

      try
      {
        writer.write(yaml.dump(root));
      }
      finally
      {
        writer.close();
      }
    }
    catch (IOException e)
    {
      Log.Write(e.getMessage());
    }
  }

  @SuppressWarnings("unchecked") public static GameState Load(Map map, Player player, boolean forceNew)
  {
    Init();
    String fileName = map.getMapName() + "_" + player.getName() + ".yml";
    File file = new File(Current.Plugin.getDataFolder() + File.separator + DATA_PATH + File.separator + fileName);
    GameState gs = null;
    if (file.exists() && !forceNew)
    {
      Yaml yaml = new Yaml();
      HashMap<String, Object> root = new HashMap<String, Object>();
      FileInputStream stream;
      try
      {
        stream = new FileInputStream(file);
        root = (HashMap<String, Object>) yaml.load(stream);
        gs = new GameState(root, player);
        Current.GameStates.put(gs.getPlayer().getName(), gs);
      }
      catch (FileNotFoundException e)
      {
        Log.Write(e.getMessage());
      }
    }
    else
    {
      gs = New(map, player);
    }

    return gs;
  }

  private static GameState New(Map map, Player player)
  {
    GameState gs = new GameState(map, player);
    if (Current.GameStates.get(gs.getPlayer().getName()) == null)
    {
      Current.GameStates.remove(gs.getPlayer().getName());
    }
    Current.GameStates.put(gs.getPlayer().getName(), gs);
    GameStateData.saveData();
    return gs;
  }

  private static void Init()
  {
    if (!Current.Plugin.getDataFolder().exists())
    {
      Current.Plugin.getDataFolder().mkdir();
    }

    File file = new File(Current.Plugin.getDataFolder() + File.separator + DATA_PATH);
    if (!file.exists())
    {
      file.mkdir();
    }
  }
}
TOP

Related Classes of com.epicsagaonline.bukkit.ChallengeMaps.DAL.GameStateData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.