DataStorage
is a simple class I'm using in my plugins to save data in json file
public class DataStorage<T> where T : class
{
public string DataPath { get; private set; }
public DataStorage(string dir, string fileName)
{
DataPath = Path.Combine(dir, fileName);
}
public void Save(T obj)
{
string objData = JsonConvert.SerializeObject(obj, Formatting.Indented);
using (StreamWriter stream = new StreamWriter(DataPath, false))
{
stream.Write(objData);
}
}
public T Read()
{
if (File.Exists(DataPath))
{
string dataText;
using (StreamReader stream = File.OpenText(DataPath))
{
dataText = stream.ReadToEnd();
}
return JsonConvert.DeserializeObject<T>(dataText);
}
else
{
return null;
}
}
}
Sample Usage
public class Player
{
public string SteamID { get; set; }
public string Name { get; set; }
}
...
public class SamplePlugin : RocketPlugin
{
public DataStorage<List<Player>> PlayersDataStorage { get; private set; }
private List<Player> playersData;
protected override void Load()
{
// Directory is a property inside RocketPlugin (it's a path to plugin's directory)
PlayersDataStorage = new DataStorage<List<Player>>(Directory, "PlayersData.json");
// We're loading PlayersData on plugin load
ReloadPlayersData();
}
public void ReloadPlayersData()
{
playersData = PlayersDataStorage.Read();
// If file didn't exist or was empty we have to initialize list to avoid null reference error
if (playersData = null)
playersData = new List<Player>();
}
public Player GetPlayer(string steamID)
{
return playersData.FirstOrDefault(x => x.SteamID == steamID);
}
public void AddPlayer(Player player)
{
// Adding player to playersData list
playersData.Add(player);
// Saving playersData list to file
PlayersDataStorage.Save(playersData);
}
}
Nice ! 👍