StartCommandBuilder.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. namespace VeloeMinecraftLauncher.MinecraftLauncher
  9. {
  10. internal static class StartCommandBuilder
  11. {
  12. public static string Build(Entity.Version.Version version, string username)
  13. {
  14. var returnString = new StringBuilder();
  15. if (version is null)
  16. return returnString.ToString();
  17. if(Settings.setMaxRam)
  18. returnString.Append($"-Xmx{Settings.MaxRam}M ");
  19. //for forge
  20. if (version.inheritsFrom is null)
  21. returnString.Append($"-Djava.library.path={Settings.MinecraftForlderPath + "versions\\" + version.id + "\\natives\\"}");
  22. else
  23. returnString.Append($"-Djava.library.path={Settings.MinecraftForlderPath + "versions\\" + version.inheritsFrom + "\\natives\\"}");
  24. returnString.Append(" -cp ");
  25. foreach(var library in version.libraries)
  26. {
  27. if (library.natives is null)
  28. returnString.Append(Settings.MinecraftForlderPath + "libraries\\" + library.downloads.artifact.path.Replace("/", "\\") + ";");
  29. }
  30. //for forge
  31. Entity.Version.Version inheritsFrom = new();
  32. if (version.inheritsFrom is null)
  33. returnString.Append(Settings.MinecraftForlderPath + "versions/" + version.id + "/" + version.id + ".jar");
  34. else
  35. {
  36. var inheritsJsonString = File.ReadAllText(Settings.MinecraftForlderPath + "versions/" + version.inheritsFrom + "/" + version.inheritsFrom + ".json");
  37. inheritsFrom = JsonSerializer.Deserialize<Entity.Version.Version>(inheritsJsonString);
  38. foreach (var library in inheritsFrom.libraries)
  39. {
  40. if (library.natives is null)
  41. returnString.Append(Settings.MinecraftForlderPath + "libraries\\" + library.downloads.artifact.path.Replace("/", "\\") + ";");
  42. }
  43. returnString.Append(Settings.MinecraftForlderPath + "versions/" + version.inheritsFrom + "/" + version.inheritsFrom + ".jar");
  44. }
  45. returnString.Append(" " + version.mainClass);
  46. List<string> args = new List<string>();
  47. List<string> argsValues = new List<string>();
  48. if (version.arguments is not null)
  49. foreach (var argument in version.arguments.game)
  50. {
  51. if (argument is null)
  52. continue;
  53. var type = argument.GetType();
  54. if (!(argument is JsonElement))
  55. continue;
  56. if (!(((JsonElement)argument).ValueKind == JsonValueKind.String))
  57. continue;
  58. var value = ((JsonElement)argument).Deserialize(typeof(string));
  59. //if ()
  60. if (!(value as string).Contains("--"))
  61. {
  62. argsValues.Add(value as string);
  63. continue;
  64. }
  65. args.Add(value as string);
  66. }
  67. if (version.minecraftArguments is not null)
  68. {
  69. var minecraftArguments = version.minecraftArguments.Split(' ');
  70. //args = version.minecraftArguments.Split(' ').Where(x=> x.Contains("--")).ToList();
  71. for (int i = 0; i < minecraftArguments.Count(); i++)
  72. {
  73. if (minecraftArguments[i].Contains("--"))
  74. args.Add(minecraftArguments[i]);
  75. else
  76. argsValues.Add(minecraftArguments[i]);
  77. }
  78. }
  79. for (int i = 0; i < args.Count; i++)
  80. {
  81. switch (args[i])
  82. {
  83. case "--username":
  84. returnString.Append(" --username " + username);
  85. break;
  86. case "--version":
  87. returnString.Append(" --version " + "\"Copy of VeloeLauncher\"");
  88. break;
  89. case "--gameDir":
  90. //for forge
  91. if (!(argsValues.Where(x => x.Contains("forge")).Count() > 0 || argsValues.Where(x => x.Contains("fabric")).Count() > 0))
  92. returnString.Append(" --gameDir " + Settings.MinecraftForlderPath);
  93. else
  94. returnString.Append(" --gameDir " + Settings.MinecraftForlderPath + "versions\\" + version.id);
  95. break;
  96. case "--assetsDir":
  97. //for forge
  98. if (version.inheritsFrom is null)
  99. returnString.Append(" --assetsDir " + Settings.MinecraftForlderPath + "assets\\" + version.assets + "\\");
  100. else
  101. returnString.Append(" --assetsDir " + Settings.MinecraftForlderPath + "assets\\" + inheritsFrom.assets + "\\");
  102. break;
  103. case "--assetIndex":
  104. //for forge
  105. if (version.inheritsFrom is null)
  106. returnString.Append(" --assetIndex " + version.assets);
  107. else
  108. returnString.Append(" --assetIndex " + inheritsFrom.assets);
  109. break;
  110. case "--uuid":
  111. returnString.Append(" --uuid sample_token");
  112. break;
  113. case "--accessToken":
  114. returnString.Append(" --accessToken sample_token");
  115. break;
  116. case "--userType":
  117. returnString.Append(" --userType offline");
  118. break;
  119. case "--userProperties":
  120. returnString.Append(" --userProperties " + "{\"veloelauncher\":[\"wtfisthis\"]}");
  121. break;
  122. case "--versionType":
  123. returnString.Append(" --versionType " + version.type);
  124. break;
  125. case "--tweakClass":
  126. returnString.Append(" --tweakClass");
  127. if (argsValues[i] is not null)
  128. returnString.Append(" " + argsValues[i]);
  129. break;
  130. }
  131. }
  132. return returnString.ToString();
  133. }
  134. }
  135. }