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(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( 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; } }