some fixes

This commit is contained in:
Timerix22 2024-01-05 20:41:03 +06:00
parent 5a492512bc
commit 814f19807d
7 changed files with 136 additions and 129 deletions

View File

@ -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 " + "-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true " +
"-Dminecraft.applet.TargetDirectory=.\\ " + $"net.minecraft.launchwrapper.Launch --username {username} --version 1.12.2-forge-14.23.5.2855 " +
"-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true " + @"--gameDir .\ --assetsDir assets --assetIndex 1.12 " +
"--gameDir .\\ --assetsDir assets --assetIndex 1.12 " + $"--uuid {uuid} --accessToken null --userType mojang --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker " +
$"net.minecraft.launchwrapper.Launch --username {username} --version 1.12.2-forge-14.23.5.2855 " + $"--versionType Forge --width {width} --height {height}";
$"--uuid {uuid} --accessToken null --userType mojang --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker " +
$"--versionType Forge --width {width} --height {height}");
} }

View File

@ -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, "-");
}
} }

View File

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

View File

@ -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>

View 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

View File

@ -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);
} }
} }

View File

@ -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>