first commit
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NitroxServer.Serialization.Json;
|
||||
|
||||
namespace NitroxServer.Serialization.Upgrade
|
||||
{
|
||||
public abstract class SaveDataUpgrade
|
||||
{
|
||||
private readonly JsonConverter[] converters = { new NitroxIdConverter(), new TechTypeConverter(), new VersionConverter(), new KeyValuePairConverter(), new StringEnumConverter() };
|
||||
|
||||
public abstract Version TargetVersion { get; }
|
||||
|
||||
public static readonly Version MinimumSaveVersion = new(1, 8, 0, 0);
|
||||
|
||||
public void UpgradeSaveFiles(string saveDir, string fileEnding)
|
||||
{
|
||||
Log.Info($"┌── Executing {GetType().Name}");
|
||||
string baseDataPath = Path.Combine(saveDir, $"BaseData{fileEnding}");
|
||||
string playerDataPath = Path.Combine(saveDir, $"PlayerData{fileEnding}");
|
||||
string worldDataPath = Path.Combine(saveDir, $"WorldData{fileEnding}");
|
||||
string entityDataPath = Path.Combine(saveDir, $"EntityData{fileEnding}");
|
||||
|
||||
Log.Info("├── Parsing raw json");
|
||||
JObject baseData = JObject.Parse(File.ReadAllText(baseDataPath));
|
||||
JObject playerData = JObject.Parse(File.ReadAllText(playerDataPath));
|
||||
JObject worldData = JObject.Parse(File.ReadAllText(worldDataPath));
|
||||
JObject entityData = JObject.Parse(File.ReadAllText(entityDataPath));
|
||||
|
||||
Log.Info("├── Applying upgrade scripts");
|
||||
UpgradeBaseData(baseData);
|
||||
UpgradePlayerData(playerData);
|
||||
UpgradeWorldData(worldData);
|
||||
UpgradeEntityData(entityData);
|
||||
|
||||
Log.Info("└── Saving to disk");
|
||||
File.WriteAllText(baseDataPath, baseData.ToString(Formatting.None, converters));
|
||||
File.WriteAllText(playerDataPath, playerData.ToString(Formatting.None, converters));
|
||||
File.WriteAllText(worldDataPath, worldData.ToString(Formatting.None, converters));
|
||||
File.WriteAllText(entityDataPath, entityData.ToString(Formatting.None, converters));
|
||||
}
|
||||
|
||||
protected virtual void UpgradeBaseData(JObject data) { }
|
||||
protected virtual void UpgradePlayerData(JObject data) { }
|
||||
protected virtual void UpgradeWorldData(JObject data) { }
|
||||
protected virtual void UpgradeEntityData(JObject data) { }
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user