some fixes
This commit is contained in:
parent
5a492512bc
commit
814f19807d
@ -4,66 +4,64 @@ namespace launcher_client;
|
|||||||
|
|
||||||
internal static partial class Launcher
|
internal static partial class Launcher
|
||||||
{
|
{
|
||||||
private static void LaunchGame(string javapath, string username, string uuid,
|
static string ConstructGameOptions(string username, string uuid, int maxmemory, int width, int height)
|
||||||
int maxmemory, int width, int height) =>
|
=> @"-Djava.net.preferIPv4Stack=true ""-Dos.name=Windows 10"" -Dos.version=10.0 " +
|
||||||
gameProcess = Process.Start($"{javapath}\\javaw.exe ",
|
$@"-Xmn256M -Xmx{maxmemory}M -Djava.library.path=version\natives -cp " +
|
||||||
"-Djava.net.preferIPv4Stack=true \"-Dos.name=Windows 10\" -Dos.version=10.0 " +
|
@"libraries\net\minecraftforge\forge\1.12.2-14.23.5.2855\forge-1.12.2-14.23.5.2855.jar;" +
|
||||||
$"-Xmn256M -Xmx{maxmemory}M -Djava.library.path=version\\natives -cp " +
|
@"libraries\org\ow2\asm\asm-debug-all\5.2\asm-debug-all-5.2.jar;" +
|
||||||
"libraries\\net\\minecraftforge\\forge\\1.12.2-14.23.5.2855\\forge-1.12.2-14.23.5.2855.jar;" +
|
@"libraries\net\minecraft\launchwrapper\1.12\launchwrapper-1.12.jar;" +
|
||||||
"libraries\\org\\ow2\\asm\\asm-debug-all\\5.2\\asm-debug-all-5.2.jar;" +
|
@"libraries\org\jline\jline\3.5.1\jline-3.5.1.jar;" +
|
||||||
"libraries\\net\\minecraft\\launchwrapper\\1.12\\launchwrapper-1.12.jar;" +
|
@"libraries\com\typesafe\akka\akka-actor_2.11\2.3.3\akka-actor_2.11-2.3.3.jar;" +
|
||||||
"libraries\\org\\jline\\jline\\3.5.1\\jline-3.5.1.jar;" +
|
@"libraries\com\typesafe\config\1.2.1\config-1.2.1.jar;" +
|
||||||
"libraries\\com\\typesafe\\akka\\akka-actor_2.11\\2.3.3\\akka-actor_2.11-2.3.3.jar;" +
|
@"libraries\org\scala-lang\scala-actors-migration_2.11\1.1.0\scala-actors-migration_2.11-1.1.0.jar;" +
|
||||||
"libraries\\com\\typesafe\\config\\1.2.1\\config-1.2.1.jar;" +
|
@"libraries\org\scala-lang\scala-compiler\2.11.1\scala-compiler-2.11.1.jar;" +
|
||||||
"libraries\\org\\scala-lang\\scala-actors-migration_2.11\\1.1.0\\scala-actors-migration_2.11-1.1.0.jar;" +
|
@"libraries\org\scala-lang\plugins\scala-continuations-library_2.11\1.0.2_mc\scala-continuations-library_2.11-1.0.2_mc.jar;l" +
|
||||||
"libraries\\org\\scala-lang\\scala-compiler\\2.11.1\\scala-compiler-2.11.1.jar;" +
|
@"ibraries\org\scala-lang\plugins\scala-continuations-plugin_2.11.1\1.0.2_mc\scala-continuations-plugin_2.11.1-1.0.2_mc.jar;" +
|
||||||
"libraries\\org\\scala-lang\\plugins\\scala-continuations-library_2.11\\1.0.2_mc\\scala-continuations-library_2.11-1.0.2_mc.jar;l" +
|
@"libraries\org\scala-lang\scala-library\2.11.1\scala-library-2.11.1.jar;" +
|
||||||
"ibraries\\org\\scala-lang\\plugins\\scala-continuations-plugin_2.11.1\\1.0.2_mc\\scala-continuations-plugin_2.11.1-1.0.2_mc.jar;" +
|
@"libraries\org\scala-lang\scala-parser-combinators_2.11\1.0.1\scala-parser-combinators_2.11-1.0.1.jar;" +
|
||||||
"libraries\\org\\scala-lang\\scala-library\\2.11.1\\scala-library-2.11.1.jar;" +
|
@"libraries\org\scala-lang\scala-reflect\2.11.1\scala-reflect-2.11.1.jar;" +
|
||||||
"libraries\\org\\scala-lang\\scala-parser-combinators_2.11\\1.0.1\\scala-parser-combinators_2.11-1.0.1.jar;" +
|
@"libraries\org\scala-lang\scala-swing_2.11\1.0.1\scala-swing_2.11-1.0.1.jar;" +
|
||||||
"libraries\\org\\scala-lang\\scala-reflect\\2.11.1\\scala-reflect-2.11.1.jar;" +
|
@"libraries\org\scala-lang\scala-xml_2.11\1.0.2\scala-xml_2.11-1.0.2.jar;" +
|
||||||
"libraries\\org\\scala-lang\\scala-swing_2.11\\1.0.1\\scala-swing_2.11-1.0.1.jar;" +
|
@"libraries\lzma\lzma\0.0.1\lzma-0.0.1.jar;" +
|
||||||
"libraries\\org\\scala-lang\\scala-xml_2.11\\1.0.2\\scala-xml_2.11-1.0.2.jar;" +
|
@"libraries\java3d\vecmath\1.5.2\vecmath-1.5.2.jar;" +
|
||||||
"libraries\\lzma\\lzma\\0.0.1\\lzma-0.0.1.jar;" +
|
@"libraries\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;" +
|
||||||
"libraries\\java3d\\vecmath\\1.5.2\\vecmath-1.5.2.jar;" +
|
@"libraries\org\apache\maven\maven-artifact\3.5.3\maven-artifact-3.5.3.jar;" +
|
||||||
"libraries\\net\\sf\\trove4j\\trove4j\\3.0.3\\trove4j-3.0.3.jar;" +
|
@"libraries\net\sf\jopt-simple\jopt-simple\5.0.3\jopt-simple-5.0.3.jar;" +
|
||||||
"libraries\\org\\apache\\maven\\maven-artifact\\3.5.3\\maven-artifact-3.5.3.jar;" +
|
@"libraries\oshi-project\oshi-core\1.1\oshi-core-1.1.jar;" +
|
||||||
"libraries\\net\\sf\\jopt-simple\\jopt-simple\\5.0.3\\jopt-simple-5.0.3.jar;" +
|
@"libraries\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;" +
|
||||||
"libraries\\oshi-project\\oshi-core\\1.1\\oshi-core-1.1.jar;" +
|
@"libraries\net\java\dev\jna\platform\3.4.0\platform-3.4.0.jar;" +
|
||||||
"libraries\\net\\java\\dev\\jna\\jna\\4.4.0\\jna-4.4.0.jar;" +
|
@"libraries\com\ibm\icu\icu4j-core-mojang\51.2\icu4j-core-mojang-51.2.jar;" +
|
||||||
"libraries\\net\\java\\dev\\jna\\platform\\3.4.0\\platform-3.4.0.jar;" +
|
@"libraries\net\sf\jopt-simple\jopt-simple\5.0.3\jopt-simple-5.0.3.jar;" +
|
||||||
"libraries\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar;" +
|
@"libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar;" +
|
||||||
"libraries\\net\\sf\\jopt-simple\\jopt-simple\\5.0.3\\jopt-simple-5.0.3.jar;" +
|
@"libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar;" +
|
||||||
"libraries\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar;" +
|
@"libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar;" +
|
||||||
"libraries\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar;" +
|
@"libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar;" +
|
||||||
"libraries\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar;" +
|
@"libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar;" +
|
||||||
"libraries\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar;" +
|
@"libraries\io\netty\netty-all\4.1.9.Final\netty-all-4.1.9.Final.jar;" +
|
||||||
"libraries\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar;" +
|
@"libraries\com\google\guava\guava\21.0\guava-21.0.jar;" +
|
||||||
"libraries\\io\\netty\\netty-all\\4.1.9.Final\\netty-all-4.1.9.Final.jar;" +
|
@"libraries\org\apache\commons\commons-lang3\3.5\commons-lang3-3.5.jar;" +
|
||||||
"libraries\\com\\google\\guava\\guava\\21.0\\guava-21.0.jar;" +
|
@"libraries\commons-io\commons-io\2.5\commons-io-2.5.jar;" +
|
||||||
"libraries\\org\\apache\\commons\\commons-lang3\\3.5\\commons-lang3-3.5.jar;" +
|
@"libraries\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;" +
|
||||||
"libraries\\commons-io\\commons-io\\2.5\\commons-io-2.5.jar;" +
|
@"libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar;" +
|
||||||
"libraries\\commons-codec\\commons-codec\\1.10\\commons-codec-1.10.jar;" +
|
@"libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar;" +
|
||||||
"libraries\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar;" +
|
@"libraries\com\google\code\gson\gson\2.8.0\gson-2.8.0.jar;" +
|
||||||
"libraries\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar;" +
|
@"libraries\com\mojang\authlib\1.5.25\authlib-1.5.25.jar;" +
|
||||||
"libraries\\com\\google\\code\\gson\\gson\\2.8.0\\gson-2.8.0.jar;" +
|
@"libraries\com\mojang\realms\1.10.22\realms-1.10.22.jar;" +
|
||||||
"libraries\\com\\mojang\\authlib\\1.5.25\\authlib-1.5.25.jar;" +
|
@"libraries\org\apache\commons\commons-compress\1.8.1\commons-compress-1.8.1.jar;" +
|
||||||
"libraries\\com\\mojang\\realms\\1.10.22\\realms-1.10.22.jar;" +
|
@"libraries\org\apache\httpcomponents\httpclient\4.3.3\httpclient-4.3.3.jar;" +
|
||||||
"libraries\\org\\apache\\commons\\commons-compress\\1.8.1\\commons-compress-1.8.1.jar;" +
|
@"libraries\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;" +
|
||||||
"libraries\\org\\apache\\httpcomponents\\httpclient\\4.3.3\\httpclient-4.3.3.jar;" +
|
@"libraries\org\apache\httpcomponents\httpcore\4.3.2\httpcore-4.3.2.jar;" +
|
||||||
"libraries\\commons-logging\\commons-logging\\1.1.3\\commons-logging-1.1.3.jar;" +
|
@"libraries\it\unimi\dsi\fastutil\7.1.0\fastutil-7.1.0.jar;" +
|
||||||
"libraries\\org\\apache\\httpcomponents\\httpcore\\4.3.2\\httpcore-4.3.2.jar;" +
|
@"libraries\org\apache\logging\log4j\log4j-api\2.8.1\log4j-api-2.8.1.jar;" +
|
||||||
"libraries\\it\\unimi\\dsi\\fastutil\\7.1.0\\fastutil-7.1.0.jar;" +
|
@"libraries\org\apache\logging\log4j\log4j-core\2.8.1\log4j-core-2.8.1.jar;" +
|
||||||
"libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.8.1\\log4j-api-2.8.1.jar;" +
|
@"libraries\org\lwjgl\lwjgl\lwjgl\2.9.4-nightly-20150209\lwjgl-2.9.4-nightly-20150209.jar;" +
|
||||||
"libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.8.1\\log4j-core-2.8.1.jar;" +
|
@"libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.4-nightly-20150209\lwjgl_util-2.9.4-nightly-20150209.jar;" +
|
||||||
"libraries\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.4-nightly-20150209\\lwjgl-2.9.4-nightly-20150209.jar;" +
|
@"libraries\com\mojang\text2speech\1.10.3\text2speech-1.10.3.jar;" +
|
||||||
"libraries\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.4-nightly-20150209\\lwjgl_util-2.9.4-nightly-20150209.jar;" +
|
@"version\1.12.2-forge-14.23.5.2855.jar " +
|
||||||
"libraries\\com\\mojang\\text2speech\\1.10.3\\text2speech-1.10.3.jar;" +
|
@"-Dminecraft.applet.TargetDirectory=.\ " +
|
||||||
"version\\1.12.2-forge-14.23.5.2855.jar " +
|
|
||||||
"-Dminecraft.applet.TargetDirectory=.\\ " +
|
|
||||||
"-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true " +
|
"-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true " +
|
||||||
"--gameDir .\\ --assetsDir assets --assetIndex 1.12 " +
|
|
||||||
$"net.minecraft.launchwrapper.Launch --username {username} --version 1.12.2-forge-14.23.5.2855 " +
|
$"net.minecraft.launchwrapper.Launch --username {username} --version 1.12.2-forge-14.23.5.2855 " +
|
||||||
|
@"--gameDir .\ --assetsDir assets --assetIndex 1.12 " +
|
||||||
$"--uuid {uuid} --accessToken null --userType mojang --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker " +
|
$"--uuid {uuid} --accessToken null --userType mojang --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker " +
|
||||||
$"--versionType Forge --width {width} --height {height}");
|
$"--versionType Forge --width {width} --height {height}";
|
||||||
}
|
}
|
||||||
@ -4,7 +4,7 @@ using System.Dynamic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Reflection;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using DTLib.Console;
|
using DTLib.Console;
|
||||||
@ -12,6 +12,7 @@ using DTLib.Dtsod;
|
|||||||
using DTLib.Extensions;
|
using DTLib.Extensions;
|
||||||
using DTLib.Logging;
|
using DTLib.Logging;
|
||||||
using DTLib.Network;
|
using DTLib.Network;
|
||||||
|
using DTLib.Filesystem;
|
||||||
using Directory = DTLib.Filesystem.Directory;
|
using Directory = DTLib.Filesystem.Directory;
|
||||||
using File = DTLib.Filesystem.File;
|
using File = DTLib.Filesystem.File;
|
||||||
|
|
||||||
@ -19,17 +20,15 @@ namespace launcher_client;
|
|||||||
|
|
||||||
internal static partial class Launcher
|
internal static partial class Launcher
|
||||||
{
|
{
|
||||||
private static FileLogger _fileLogger = new FileLogger("launcher-logs", "launcher_client");
|
private static FileLogger _fileLogger = new("launcher-logs", "launcher_client");
|
||||||
private static ILogger logger = new CompositeLogger(
|
private static ILogger logger = new CompositeLogger(
|
||||||
_fileLogger,
|
_fileLogger,
|
||||||
new ConsoleLogger());
|
new ConsoleLogger());
|
||||||
private static Socket mainSocket;
|
private static Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||||
public static bool debug, offline, updated;
|
public static bool debug, offline, updated;
|
||||||
private static FSP FSP;
|
private static FSP FSP = new(mainSocket);
|
||||||
private static dynamic tabs = new ExpandoObject();
|
private static dynamic tabs = new ExpandoObject();
|
||||||
private static LauncherConfig config;
|
private static LauncherConfig config = null!;
|
||||||
private static string configFileName = "launcher.dtsod";
|
|
||||||
public static Process gameProcess;
|
|
||||||
|
|
||||||
private static void Main(string[] args)
|
private static void Main(string[] args)
|
||||||
{
|
{
|
||||||
@ -39,14 +38,21 @@ internal static partial class Launcher
|
|||||||
Console.OutputEncoding = Encoding.UTF8;
|
Console.OutputEncoding = Encoding.UTF8;
|
||||||
Console.InputEncoding = Encoding.UTF8;
|
Console.InputEncoding = Encoding.UTF8;
|
||||||
Console.CursorVisible = false;
|
Console.CursorVisible = false;
|
||||||
DTLibInternalLogging.SetLogger(logger);
|
|
||||||
logger.LogInfo("Main", "launcher is starting");
|
#if DEBUG
|
||||||
|
debug = true;
|
||||||
|
#else
|
||||||
if (args.Contains("debug")) debug = true;
|
if (args.Contains("debug")) debug = true;
|
||||||
|
#endif
|
||||||
if (args.Contains("offline")) offline = true;
|
if (args.Contains("offline")) offline = true;
|
||||||
if (args.Contains("updated")) updated = true;
|
if (args.Contains("updated")) updated = true;
|
||||||
config = !File.Exists(configFileName)
|
config = !File.Exists(LauncherConfig.ConfigFilePath)
|
||||||
? LauncherConfig.CreateDefault(configFileName)
|
? LauncherConfig.CreateDefault()
|
||||||
: new LauncherConfig(configFileName);
|
: LauncherConfig.LoadFromFile();
|
||||||
|
|
||||||
|
DTLibInternalLogging.SetLogger(logger);
|
||||||
|
logger.DebugLogEnabled = debug;
|
||||||
|
logger.LogInfo("Main", "launcher is starting");
|
||||||
|
|
||||||
// обновление лаунчера
|
// обновление лаунчера
|
||||||
if (!updated && !offline)
|
if (!updated && !offline)
|
||||||
@ -63,21 +69,9 @@ internal static partial class Launcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// если уже обновлён
|
// если уже обновлён
|
||||||
var launcherAssembly = Assembly.GetExecutingAssembly();
|
tabs.Login = EmbeddedResources.ReadText("launcher_client.gui.login.gui");
|
||||||
|
tabs.Settings = EmbeddedResources.ReadText("launcher_client.gui.settings.gui");
|
||||||
// читает текст из файлов, добавленных в сборку в виде ресурсов
|
tabs.Exit = EmbeddedResources.ReadText("launcher_client.gui.exit.gui");
|
||||||
string ReadResource(string resource_path)
|
|
||||||
{
|
|
||||||
using var resStream = launcherAssembly.GetManifestResourceStream(resource_path)
|
|
||||||
?? throw new Exception($"can't find resource <{resource_path}>");
|
|
||||||
using var resourceStreamReader =
|
|
||||||
new System.IO.StreamReader(resStream, Encoding.UTF8);
|
|
||||||
return resourceStreamReader.ReadToEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
tabs.Login = ReadResource("launcher_client.gui.login.gui");
|
|
||||||
tabs.Settings = ReadResource("launcher_client.gui.settings.gui");
|
|
||||||
tabs.Exit = ReadResource("launcher_client.gui.exit.gui");
|
|
||||||
tabs.Log = "";
|
tabs.Log = "";
|
||||||
tabs.Current = "";
|
tabs.Current = "";
|
||||||
string username = "";
|
string username = "";
|
||||||
@ -145,8 +139,13 @@ internal static partial class Launcher
|
|||||||
|
|
||||||
// запуск майнкрафта
|
// запуск майнкрафта
|
||||||
logger.LogInfo("Main", "launching minecraft");
|
logger.LogInfo("Main", "launching minecraft");
|
||||||
LaunchGame(config.JavaPath, config.Username, config.UUID,
|
string gameOptions = ConstructGameOptions(config.Username,
|
||||||
config.GameMemory, config.GameWindowWidth, config.GameWindowHeight);
|
NameUUIDFromString("OfflinePlayer:" + config.Username),
|
||||||
|
config.GameMemory,
|
||||||
|
config.GameWindowWidth,
|
||||||
|
config.GameWindowHeight);
|
||||||
|
logger.LogDebug("LaunchGame", gameOptions);
|
||||||
|
var gameProcess = Process.Start($"{config.JavaPath}\\java.exe", gameOptions);
|
||||||
gameProcess.WaitForExit();
|
gameProcess.WaitForExit();
|
||||||
logger.LogInfo("Main", "minecraft closed");
|
logger.LogInfo("Main", "minecraft closed");
|
||||||
}
|
}
|
||||||
@ -192,14 +191,16 @@ internal static partial class Launcher
|
|||||||
// подключение серверу
|
// подключение серверу
|
||||||
private static void ConnectToLauncherServer()
|
private static void ConnectToLauncherServer()
|
||||||
{
|
{
|
||||||
if (mainSocket!=null && mainSocket.Connected)
|
if (mainSocket.Connected)
|
||||||
{
|
{
|
||||||
logger.LogInfo(nameof(ConnectToLauncherServer), "socket is connected already. disconnecting...");
|
logger.LogInfo(nameof(ConnectToLauncherServer), "socket is connected already. disconnecting...");
|
||||||
mainSocket.Shutdown(SocketShutdown.Both);
|
mainSocket.Shutdown(SocketShutdown.Both);
|
||||||
mainSocket.Close();
|
mainSocket.Close();
|
||||||
|
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||||
|
FSP = new FSP(mainSocket);
|
||||||
|
FSP.debug = debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
||||||
while (true)
|
while (true)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -215,13 +216,6 @@ internal static partial class Launcher
|
|||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
FSP = new FSP(mainSocket);
|
|
||||||
FSP.debug = debug;
|
|
||||||
/*FSP.PackageRecieved += (size) =>
|
|
||||||
{
|
|
||||||
Console.SetCursorPosition(0, 30);
|
|
||||||
logger.LogInfo(nameof(Connect), "downloading file... [", size.ToString(), "/", FSP.Filesize = )
|
|
||||||
};*/
|
|
||||||
mainSocket.ReceiveTimeout = 2500;
|
mainSocket.ReceiveTimeout = 2500;
|
||||||
mainSocket.SendTimeout = 2500;
|
mainSocket.SendTimeout = 2500;
|
||||||
mainSocket.GetAnswer("requesting user name");
|
mainSocket.GetAnswer("requesting user name");
|
||||||
@ -285,4 +279,22 @@ internal static partial class Launcher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//minecraft player uuid explanation
|
||||||
|
//https://gist.github.com/CatDany/0e71ca7cd9b42a254e49/
|
||||||
|
//java uuid generation in c#
|
||||||
|
//https://stackoverflow.com/questions/18021808/uuid-interop-with-c-sharp-code
|
||||||
|
public static string NameUUIDFromString(string input)
|
||||||
|
=> NameUUIDFromBytes(Encoding.UTF8.GetBytes(input));
|
||||||
|
|
||||||
|
public static string NameUUIDFromBytes(byte[] input)
|
||||||
|
{
|
||||||
|
byte[] hash = MD5.HashData(input);
|
||||||
|
hash[6] &= 0x0f;
|
||||||
|
hash[6] |= 0x30;
|
||||||
|
hash[8] &= 0x3f;
|
||||||
|
hash[8] |= 0x80;
|
||||||
|
string hex = BitConverter.ToString(hash).Replace("-", string.Empty).ToLower();
|
||||||
|
return hex.Insert(8, "-").Insert(13, "-").Insert(18, "-").Insert(23, "-");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -5,21 +5,19 @@ namespace launcher_client;
|
|||||||
|
|
||||||
public class LauncherConfig
|
public class LauncherConfig
|
||||||
{
|
{
|
||||||
|
public static string ConfigFilePath = "launcher.dtsod";
|
||||||
|
|
||||||
public int GameMemory = 3000;
|
public int GameMemory = 3000;
|
||||||
public int GameWindowHeight = 500;
|
public int GameWindowHeight = 500;
|
||||||
public int GameWindowWidth = 900;
|
public int GameWindowWidth = 900;
|
||||||
public string JavaPath = "java\\bin";
|
public string JavaPath = "jre\\bin";
|
||||||
public string ServerAddress = "127.0.0.1";
|
public string ServerAddress = "127.0.0.1";
|
||||||
public int ServerPort = 25000;
|
public int ServerPort = 25000;
|
||||||
public string Username = "";
|
public string Username = "";
|
||||||
public string UUID = "";
|
|
||||||
|
|
||||||
public string ConfigPath;
|
private LauncherConfig(){}
|
||||||
|
|
||||||
|
private LauncherConfig(DtsodV23 dtsod)
|
||||||
public LauncherConfig(){}
|
|
||||||
|
|
||||||
public LauncherConfig(DtsodV23 dtsod, string configPath)
|
|
||||||
{
|
{
|
||||||
GameMemory = dtsod["gameMemory"];
|
GameMemory = dtsod["gameMemory"];
|
||||||
GameWindowHeight = dtsod["gameWindowHeight"];
|
GameWindowHeight = dtsod["gameWindowHeight"];
|
||||||
@ -28,18 +26,12 @@ public class LauncherConfig
|
|||||||
ServerAddress = dtsod["serverAddress"];
|
ServerAddress = dtsod["serverAddress"];
|
||||||
ServerPort = dtsod["serverPort"];
|
ServerPort = dtsod["serverPort"];
|
||||||
Username = dtsod["username"];
|
Username = dtsod["username"];
|
||||||
UUID = dtsod["uuid"];
|
|
||||||
|
|
||||||
ConfigPath = configPath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LauncherConfig(string configPath) :
|
public static LauncherConfig LoadFromFile() => new(new DtsodV23(File.ReadAllText(ConfigFilePath)));
|
||||||
this(new DtsodV23(File.ReadAllText(configPath)), configPath)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public DtsodV23 ToDtsod()
|
public DtsodV23 ToDtsod() =>
|
||||||
{
|
new()
|
||||||
return new()
|
|
||||||
{
|
{
|
||||||
{ "gameMemory", GameMemory },
|
{ "gameMemory", GameMemory },
|
||||||
{ "gameWindowHeight", GameWindowHeight },
|
{ "gameWindowHeight", GameWindowHeight },
|
||||||
@ -48,21 +40,16 @@ public class LauncherConfig
|
|||||||
{ "serverAddress", ServerAddress },
|
{ "serverAddress", ServerAddress },
|
||||||
{ "serverPort", ServerPort },
|
{ "serverPort", ServerPort },
|
||||||
{ "username", Username },
|
{ "username", Username },
|
||||||
{ "uuid", UUID }
|
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
File.WriteAllText(ConfigPath, ToDtsod().ToString());
|
File.WriteAllText(ConfigFilePath, ToDtsod().ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LauncherConfig CreateDefault(string configPath)
|
public static LauncherConfig CreateDefault()
|
||||||
{
|
{
|
||||||
var c = new LauncherConfig
|
var c = new LauncherConfig();
|
||||||
{
|
|
||||||
ConfigPath = configPath
|
|
||||||
};
|
|
||||||
c.Save();
|
c.Save();
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RootNamespace>launcher_client</RootNamespace>
|
<RootNamespace>launcher_client</RootNamespace>
|
||||||
<AssemblyName>minecraft-launcher</AssemblyName>
|
<AssemblyName>minecraft-launcher</AssemblyName>
|
||||||
|
|||||||
10
minecraft-launcher-client/publish.sh
Normal file
10
minecraft-launcher-client/publish.sh
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
dotnet publish -c release -o bin/publish \
|
||||||
|
--self-contained \
|
||||||
|
-r win-x64 \
|
||||||
|
-p:PublishSingleFile=true \
|
||||||
|
-p:PublishTrimmed=true \
|
||||||
|
-p:TrimMode=partial \
|
||||||
|
-p:EnableCompressionInSingleFile=true \
|
||||||
|
-p:OptimizationPreference=Size \
|
||||||
|
-p:InvariantGlobalization=true \
|
||||||
|
-p:DebugType=none
|
||||||
@ -18,7 +18,7 @@ static class Server
|
|||||||
new FileLogger("logs","launcher_server"),
|
new FileLogger("logs","launcher_server"),
|
||||||
new ConsoleLogger());
|
new ConsoleLogger());
|
||||||
static readonly Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
static readonly Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||||
static DtsodV23 config;
|
static DtsodV23 config = null!;
|
||||||
static bool debug;
|
static bool debug;
|
||||||
|
|
||||||
static object manifestLocker = new();
|
static object manifestLocker = new();
|
||||||
@ -45,7 +45,7 @@ static class Server
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
var userSocket = mainSocket.Accept();
|
var userSocket = mainSocket.Accept();
|
||||||
var userThread = new Thread(obj => HandleUser((Socket)obj));
|
var userThread = new Thread(obj => HandleUser((Socket)obj!));
|
||||||
userThread.Start(userSocket);
|
userThread.Start(userSocket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RootNamespace>launcher_server</RootNamespace>
|
<RootNamespace>launcher_server</RootNamespace>
|
||||||
<AssemblyName>minecraft-launcher-server</AssemblyName>
|
<AssemblyName>minecraft-launcher-server</AssemblyName>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user