using Newtonsoft.Json;
using VRage.Game;
using SpaceEngineersBlueprintEditor.GameAssemblyLoader;
using SpaceEngineersBlueprintEditor.SpaceEngineersCore;
using System.Runtime.CompilerServices;
public class Program
{
private static void Main(string[] args)
{
try
{
var gameRoot = GameAssemblyLoader.EnsureInitialized();
ConvertFiles(args, gameRoot);
}
catch (Exception ex)
{
Environment.ExitCode = 1;
Console.Write($"Error:{ex.Message}");
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void ConvertFiles(string[] args, string gameRoot)
{
Initializer.Initialize(
Path.Combine(gameRoot, "Content"),
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "SpaceEngineers"));
if (TryReadOption(args, "--input", out var inputPath) &&
TryReadOption(args, "--output", out var outputPath))
{
ConvertJsonFile(inputPath, outputPath);
return;
}
if (args.Length == 3 && string.Equals(args[0], "--roundtrip", StringComparison.OrdinalIgnoreCase))
{
var definitions = SpaceEngineerDefinitions.Load<MyObjectBuilder_Definitions>(args[1]);
SpaceEngineerDefinitions.Save(args[2], definitions);
Console.Write("Successful");
return;
}
foreach (var arg in args)
{
ConvertJsonFile(arg, $"{arg}.sbc");
}
}
private static void ConvertJsonFile(string inputPath, string outputPath)
{
if (!File.Exists(inputPath))
{
throw new FileNotFoundException($"File not found: {inputPath}", inputPath);
}
var definitions = JsonConvert.DeserializeObject<MyObjectBuilder_Definitions>(
File.ReadAllText(inputPath),
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto })
?? throw new InvalidDataException($"File could not be deserialized: {inputPath}");
SpaceEngineerDefinitions.Save(outputPath, definitions);
Console.Write("Successful");
}
private static bool TryReadOption(string[] args, string option, out string value)
{
var index = Array.FindIndex(args, argument =>
string.Equals(argument, option, StringComparison.OrdinalIgnoreCase));
if (index >= 0 && index + 1 < args.Length)
{
value = args[index + 1];
return true;
}
value = string.Empty;
return false;
}
}
using Newtonsoft.Json;
using VRage.Game;
using SpaceEngineersBlueprintEditor.GameAssemblyLoader;
using SpaceEngineersBlueprintEditor.SpaceEngineersCore;
using System.Runtime.CompilerServices;
public class Program
{
private static void Main(string[] args)
{
try
{
var gameRoot = GameAssemblyLoader.EnsureInitialized();
ConvertFiles(args, gameRoot);
}
catch (Exception ex)
{
Environment.ExitCode = 1;
Console.Write($"Error:{ex.Message}");
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void ConvertFiles(string[] args, string gameRoot)
{
Initializer.Initialize(
Path.Combine(gameRoot, "Content"),
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "SpaceEngineers"));
if (TryReadOption(args, "--input", out var inputPath) &&
TryReadOption(args, "--output", out var outputPath))
{
ConvertJsonFile(inputPath, outputPath);
return;
}
if (args.Length == 3 && string.Equals(args[0], "--roundtrip", StringComparison.OrdinalIgnoreCase))
{
var definitions = SpaceEngineerDefinitions.Load<MyObjectBuilder_Definitions>(args[1]);
SpaceEngineerDefinitions.Save(args[2], definitions);
Console.Write("Successful");
return;
}
foreach (var arg in args)
{
ConvertJsonFile(arg, $"{arg}.sbc");
}
}
private static void ConvertJsonFile(string inputPath, string outputPath)
{
if (!File.Exists(inputPath))
{
throw new FileNotFoundException($"File not found: {inputPath}", inputPath);
}
var definitions = JsonConvert.DeserializeObject<MyObjectBuilder_Definitions>(
File.ReadAllText(inputPath),
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto })
?? throw new InvalidDataException($"File could not be deserialized: {inputPath}");
SpaceEngineerDefinitions.Save(outputPath, definitions);
Console.Write("Successful");
}
private static bool TryReadOption(string[] args, string option, out string value)
{
var index = Array.FindIndex(args, argument =>
string.Equals(argument, option, StringComparison.OrdinalIgnoreCase));
if (index >= 0 && index + 1 < args.Length)
{
value = args[index + 1];
return true;
}
value = string.Empty;
return false;
}
}