Browse Source

project cleaning

Veloe 1 year ago
parent
commit
f62bd57731

+ 24 - 26
VeloeMinecraftLauncher/Utils/Downloader.cs → VeloeMinecraftLauncher/Utils/Downloader/Downloader.cs

@@ -1,7 +1,5 @@
-using Microsoft.Extensions.Logging;
-using System;
+using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
 using System.IO;
 using System.IO.Compression;
 using System.Linq;
@@ -12,9 +10,9 @@ using System.Text.Json;
 using System.Threading;
 using System.Threading.Tasks;
 using VeloeMinecraftLauncher.Entity.Assets;
-using VeloeMinecraftLauncher.Models.Entity;
+using VeloeMinecraftLauncher.Utils.Starter;
 
-namespace VeloeMinecraftLauncher.Utils;
+namespace VeloeMinecraftLauncher.Utils.Downloader;
 
 internal class Downloader
 {
@@ -52,7 +50,7 @@ internal class Downloader
             Parameters.Action.TasksStatus($"Task {tasksIterator} of {tasksCount} complete.");
 
             var handler = new HttpClientHandler() { AllowAutoRedirect = true };
-            
+
             var ph = new ProgressMessageHandler(handler);
             ph.HttpSendProgress += (_, args) =>
             {
@@ -83,7 +81,7 @@ internal class Downloader
                     tasksIterator++;
                     Parameters.Action.TasksStatus($"Task {tasksIterator} of {tasksCount} complete.");
                 }
-                catch (Exception ex) when (ex is (ArgumentException or HttpRequestException) )
+                catch (Exception ex) when (ex is ArgumentException or HttpRequestException)
                 {
                     _logger.Warning(ex.Message);
                 }
@@ -102,7 +100,7 @@ internal class Downloader
             Parameters.Action.TasksStatus($"Task {tasksIterator} of {tasksCount} complete.");
 
             await DownloadAssets(versionJson, cancellationToken);
-            
+
             Parameters.Action.SetProgress(100);
             tasksIterator++;
             Parameters.Action.TasksStatus($"Task {tasksIterator} of {tasksCount} complete.");
@@ -301,8 +299,8 @@ internal class Downloader
     private async Task DownloadAssets(Entity.Version.Version versionJson, CancellationToken cancellationToken)
     {
         using var httpClient = new HttpClient();
-        var assetsJson = await Downloader.DownloadAndDeserializeJsonData<AssetsManifest>(versionJson.AssetIndex.Url);
-        var assetsPath = $"{Settings.minecraftForlderPath}{(versionJson.Assets == "pre-1.6" ? "resources" :   $"assets/{versionJson.Assets}/objects")}";
+        var assetsJson = await DownloadAndDeserializeJsonData<AssetsManifest>(versionJson.AssetIndex.Url);
+        var assetsPath = $"{Settings.minecraftForlderPath}{(versionJson.Assets == "pre-1.6" ? "resources" : $"assets/{versionJson.Assets}/objects")}";
         var assetsUrl = "https://resources.download.minecraft.net/";
 
         //download assets json
@@ -358,7 +356,7 @@ internal class Downloader
                         _logger.Debug("Downloading asset: {0} ", name);
                         //DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
                         Parameters.Action.DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
-                        await DownloadFileAsync(assetsUrl + asset.Value.Hash[..2] + "/" + asset.Value.Hash, Path.Combine(assetRoot, folder , name), cancellationToken, httpClient);
+                        await DownloadFileAsync(assetsUrl + asset.Value.Hash[..2] + "/" + asset.Value.Hash, Path.Combine(assetRoot, folder, name), cancellationToken, httpClient);
                     }
                     finally
                     {
@@ -386,7 +384,7 @@ internal class Downloader
             // getting path and url if universal lib
             if (library.Natives is null)
             {
-                libPath +=  library.Downloads.Artifact.Path;
+                libPath += library.Downloads.Artifact.Path;
                 libUrl = library.Downloads.Artifact.Url;
                 sha1 = library.Downloads.Artifact.Sha1;
             }
@@ -531,8 +529,8 @@ internal class Downloader
                     if (!(library.Downloads.Classifiers is not null && (
                         library.Downloads.Classifiers.NativesWindows is not null ||
                         library.Downloads.Classifiers.NativesWindows64 is not null ||
-                        (library.Downloads.Classifiers.NativesWindows32 is not null && OperatingSystem.IsWindows()) ||
-                        (library.Downloads.Classifiers.NativesLinux is not null && OperatingSystem.IsLinux()))))
+                        library.Downloads.Classifiers.NativesWindows32 is not null && OperatingSystem.IsWindows() ||
+                        library.Downloads.Classifiers.NativesLinux is not null && OperatingSystem.IsLinux())))
                         continue;
 
                     if (!Directory.Exists(Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/"))
@@ -589,9 +587,9 @@ internal class Downloader
     {
         _logger.Debug("Getting required Java version.");
 
-        var javaVersion = (versionJson.JavaVersion?.MajorVersion ??
+        var javaVersion = versionJson.JavaVersion?.MajorVersion ??
             (versionJson.Assets == "legacy" ? 8 :
-            throw new ArgumentException("Required Java version was not found in json file.")));
+            throw new ArgumentException("Required Java version was not found in json file."));
 
         var javaUrl = $"https://files.veloe.link/launcher/java/{javaVersion}/{(OperatingSystem.IsWindows() ? "windows" : "linux")}{(Environment.Is64BitOperatingSystem ? "64" : "32")}/java.zip";
 
@@ -627,13 +625,13 @@ internal class Downloader
 
             _logger.Debug("Downloading {0}.json", Parameters.Data.SelectedVersion.Id);
             Parameters.Action.DownloadingFileName($"{Parameters.Data.SelectedVersion.Id}.json");
-            return await Downloader.DownloadAndDeserializeJsonData<Entity.Version.Version>(Parameters.Data.SelectedVersion.Url, Settings.minecraftForlderPath + "versions/" + Parameters.Data.SelectedVersion.Id + "/", Parameters.Data.SelectedVersion.Id + ".json");
+            return await DownloadAndDeserializeJsonData<Entity.Version.Version>(Parameters.Data.SelectedVersion.Url, Settings.minecraftForlderPath + "versions/" + Parameters.Data.SelectedVersion.Id + "/", Parameters.Data.SelectedVersion.Id + ".json");
         }
         else
         {
             Parameters.Action.DownloadingFileName($"{Parameters.Data.SelectedVersion.Id}.json");
             _logger.Debug("Downloading {0}.json", Parameters.Data.SelectedVersion.Id);
-            return await Downloader.DownloadAndDeserializeJsonData<Entity.Version.Version>(Parameters.Data.SelectedVersion.Url, Settings.minecraftForlderPath + "versions/" + Parameters.Data.SelectedVersion.Id + "/", Parameters.Data.SelectedVersion.Id + ".json");
+            return await DownloadAndDeserializeJsonData<Entity.Version.Version>(Parameters.Data.SelectedVersion.Url, Settings.minecraftForlderPath + "versions/" + Parameters.Data.SelectedVersion.Id + "/", Parameters.Data.SelectedVersion.Id + ".json");
         }
     }
 
@@ -650,9 +648,9 @@ internal class Downloader
         }
         catch (Exception ex)
         {
-            throw new WebException($"An error occured while downloading {url}. Check your internet connection.",ex);
+            throw new WebException($"An error occured while downloading {url}. Check your internet connection.", ex);
         }
-            
+
         if (string.IsNullOrEmpty(jsonData))
         {
             logger.Warning("Empty string!");
@@ -670,23 +668,23 @@ internal class Downloader
                 File.WriteAllText(path + filename, jsonData);
             }
             //_logger.Debug("Return serialized string.");
-            return JsonSerializer.Deserialize<T>(jsonData, new JsonSerializerOptions{PropertyNameCaseInsensitive = true});
-        }       
+            return JsonSerializer.Deserialize<T>(jsonData, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
+        }
     }
 
     public static async Task DownloadFileAsync(string url, string path, CancellationToken ct, HttpClient? client = null)
     {
         client ??= _sHttpClient;
-        using HttpResponseMessage response = await client.GetAsync(new System.Uri(url),HttpCompletionOption.ResponseHeadersRead, ct);
+        using HttpResponseMessage response = await client.GetAsync(new Uri(url), HttpCompletionOption.ResponseHeadersRead, ct);
         response.EnsureSuccessStatusCode();
         using Stream contentStream = await response.Content.ReadAsStreamAsync(ct);
         using FileStream fileStream = File.OpenWrite(path);
-        await contentStream.CopyToAsync(fileStream,ct);
+        await contentStream.CopyToAsync(fileStream, ct);
     }
 
     public static async Task<bool> IsFileAvaliable(string url, CancellationToken ct)
     {
-        using HttpResponseMessage response = await _sHttpClient.GetAsync(new System.Uri(url), HttpCompletionOption.ResponseHeadersRead, ct);
+        using HttpResponseMessage response = await _sHttpClient.GetAsync(new Uri(url), HttpCompletionOption.ResponseHeadersRead, ct);
         return response.IsSuccessStatusCode;
     }
 
@@ -709,7 +707,7 @@ internal class Downloader
         foreach (var library in Parameters.Data.VersionJson.Libraries)
         {
             if (string.IsNullOrEmpty(library.Name) || string.IsNullOrEmpty(library.Url))
-                continue; 
+                continue;
 
             var relativePath = StartCommandBuilder.GetLibRelativePathFromName(library.Name);
             var libPath = Settings.minecraftForlderPath + "libraries/" + relativePath;

+ 2 - 2
VeloeMinecraftLauncher/Utils/DownloaderParameters.cs → VeloeMinecraftLauncher/Utils/Downloader/DownloaderParameters.cs

@@ -1,7 +1,7 @@
 using System;
 using VeloeMinecraftLauncher.Models.Entity;
 
-namespace VeloeMinecraftLauncher.Utils
+namespace VeloeMinecraftLauncher.Utils.Downloader
 {
     public class DownloaderParameters
     {
@@ -25,7 +25,7 @@ namespace VeloeMinecraftLauncher.Utils
             /// <summary>
             /// Action for set lock ui command
             /// </summary>
-            public Action<bool> IsControlsEnabled { get; set; } = value => {};
+            public Action<bool> IsControlsEnabled { get; set; } = value => { };
             /// <summary>
             /// Action for set progress bar value outside (on ui)
             /// </summary>

+ 1 - 5
VeloeMinecraftLauncher/Utils/CaptureFilePathHook .cs → VeloeMinecraftLauncher/Utils/Logger/CaptureFilePathHook .cs

@@ -1,12 +1,8 @@
 using Serilog.Sinks.File;
-using System;
-using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using System.Text;
-using System.Threading.Tasks;
 
-namespace VeloeMinecraftLauncher.Utils
+namespace VeloeMinecraftLauncher.Utils.Logger
 {
     internal class CaptureFilePathHook : FileLifecycleHooks
     {

+ 1 - 1
VeloeMinecraftLauncher/Utils/EventSink.cs → VeloeMinecraftLauncher/Utils/Logger/EventSink.cs

@@ -1,7 +1,7 @@
 using Serilog.Events;
 using System;
 
-namespace VeloeMinecraftLauncher.Utils;
+namespace VeloeMinecraftLauncher.Utils.Logger;
 
 public class EventSink : Serilog.Core.ILogEventSink
 {

+ 1 - 1
VeloeMinecraftLauncher/Utils/Settings.cs

@@ -1,9 +1,9 @@
 using Serilog.Events;
-using Serilog.Sinks.File;
 using System;
 using System.IO;
 using System.Linq;
 using System.Text.Json;
+using VeloeMinecraftLauncher.Utils.Logger;
 
 namespace VeloeMinecraftLauncher.Utils;
 

+ 1 - 5
VeloeMinecraftLauncher/Utils/JavaProcessException.cs → VeloeMinecraftLauncher/Utils/Starter/JavaProcessException.cs

@@ -1,10 +1,6 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
-namespace VeloeMinecraftLauncher.Utils
+namespace VeloeMinecraftLauncher.Utils.Starter
 {
     internal class JavaProcessException : Exception
     {

+ 17 - 17
VeloeMinecraftLauncher/Utils/StartCommandBuilder.cs → VeloeMinecraftLauncher/Utils/Starter/StartCommandBuilder.cs

@@ -7,7 +7,7 @@ using System.Security.Cryptography;
 using System.Text;
 using System.Text.Json;
 
-namespace VeloeMinecraftLauncher.Utils;
+namespace VeloeMinecraftLauncher.Utils.Starter;
 
 internal static class StartCommandBuilder
 {
@@ -32,7 +32,7 @@ internal static class StartCommandBuilder
         returnString.Append(" -cp \"");
 
         // add libraries
-        foreach(var library in version.Libraries)
+        foreach (var library in version.Libraries)
         {
             bool rulesVaild = true;
             //check if native
@@ -51,7 +51,7 @@ internal static class StartCommandBuilder
                         continue;
                     }
 
-                    if (rule.Os is not null && 
+                    if (rule.Os is not null &&
                         rule.Action == "allow" &&
                             (rule.Os.Name == "linux" && OperatingSystem.IsLinux() ||
                             rule.Os.Name == "windows" && OperatingSystem.IsWindows()))
@@ -64,7 +64,7 @@ internal static class StartCommandBuilder
 
             //if no path
             if (library.Downloads is null) //for optifine
-            {          
+            {
                 var libPath = GetLibPathFromName(library.Name);
                 if (rulesVaild)
                     returnString.Append(Path.GetFullPath(Settings.minecraftForlderPath + "libraries/" + libPath) + separator);
@@ -76,7 +76,7 @@ internal static class StartCommandBuilder
                 returnString.Append(Path.GetFullPath(Settings.minecraftForlderPath + "libraries/" + library.Downloads.Artifact.Path) + separator);
 
         }
-        
+
         Entity.Version.Version? inheritsFrom = null;
         if (version.InheritsFrom is null)
             returnString.Append(Path.GetFullPath(Settings.minecraftForlderPath + "versions/" + version.Id + "/" + version.Id + ".jar")); //main jar file
@@ -85,7 +85,7 @@ internal static class StartCommandBuilder
             //for forge, vanilla optifine, fabric
             //add libraries from inherited version
             var inheritsJsonString = File.ReadAllText(Settings.minecraftForlderPath + "versions/" + version.InheritsFrom + "/" + version.InheritsFrom + ".json");
-            
+
             inheritsFrom = JsonSerializer.Deserialize<Entity.Version.Version>(inheritsJsonString, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
 
             foreach (var library in inheritsFrom?.Libraries ?? new())
@@ -120,7 +120,7 @@ internal static class StartCommandBuilder
                     }
                 }
 
-                if(rulesVaild)
+                if (rulesVaild)
                     returnString.Append(Path.GetFullPath(Settings.minecraftForlderPath + "libraries/" + library.Downloads.Artifact.Path) + separator);
 
             }
@@ -152,7 +152,7 @@ internal static class StartCommandBuilder
                         value.Contains("-Djava.library.path") || //this for fabric for 1.5.2
                         value.Contains("-cp") ||                // this args already added to args
                         value.Equals("${classpath}")) continue;
-              
+
 
                     //for new forge versions (1.18, 1.19)
                     if (value.Contains("${version_name}"))
@@ -191,17 +191,17 @@ internal static class StartCommandBuilder
 
         List<string> args = new();
         List<string> argsValues = new();
-       
+
         if (version.Arguments is not null)
         {
             foreach (var argument in version.Arguments.Game)
             {
                 if (argument is null ||
-                    argument is not JsonElement jsonArgument || 
-                    jsonArgument.ValueKind != JsonValueKind.String || 
+                    argument is not JsonElement jsonArgument ||
+                    jsonArgument.ValueKind != JsonValueKind.String ||
                     jsonArgument.Deserialize(typeof(string)) is not string value) continue;
 
-                if (!(value).Contains("--"))
+                if (!value.Contains("--"))
                 {
                     argsValues.Add(value);
                     continue;
@@ -219,8 +219,8 @@ internal static class StartCommandBuilder
                 if (minecraftArguments[i].Contains("--"))
                 {
                     args.Add(minecraftArguments[i]);
-                    if (minecraftArguments[i+1] is not null)
-                        argsValues.Add(minecraftArguments[i+1]);
+                    if (minecraftArguments[i + 1] is not null)
+                        argsValues.Add(minecraftArguments[i + 1]);
                 }
                 //else
                 //    argsValues.Add(minecraftArguments[i]);
@@ -237,7 +237,7 @@ internal static class StartCommandBuilder
             { "--assetIndex", false },
             { "--uuid", false },
             { "--accessToken", false},
-            { "--userType", false},               
+            { "--userType", false},
             { "--tweakClass", false }
         };
 
@@ -258,7 +258,7 @@ internal static class StartCommandBuilder
                         jsonArgument.ValueKind != JsonValueKind.String ||
                         jsonArgument.Deserialize(typeof(string)) is not string value) continue;
 
-                    if (!(value).Contains("--"))
+                    if (!value.Contains("--"))
                     {
                         argsValues.Add(value);
                         continue;
@@ -376,7 +376,7 @@ internal static class StartCommandBuilder
         Debug.WriteLine($"GameLibPathFromName: {name}");
         var dirs = name.Split(':');
         dirs[0] = dirs[0].Replace('.', '/');
-        var libPath = String.Empty;
+        var libPath = string.Empty;
         foreach (var dir in dirs)
         {
             libPath += dir + "/";

+ 3 - 5
VeloeMinecraftLauncher/VeloeMinecraftLauncher.csproj

@@ -10,8 +10,8 @@
 		<DebugType>embedded</DebugType>
 		<StartupObject>VeloeMinecraftLauncher.Program</StartupObject>
 		<PlatformTarget>x64</PlatformTarget>
-		<AssemblyVersion>1.5.0.51</AssemblyVersion>
-		<FileVersion>1.5.0.51</FileVersion>
+		<AssemblyVersion>1.5.0.56</AssemblyVersion>
+		<FileVersion>1.5.0.56</FileVersion>
 		<Configurations>Debug;Release</Configurations>
 	</PropertyGroup>
 	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -34,7 +34,6 @@
 	</ItemGroup>
 	<ItemGroup>
 		<PackageReference Include="Avalonia" Version="11.0.10" />
-		<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.10" />
 		<PackageReference Include="Avalonia.Desktop" Version="11.0.10" />
 		<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
 		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.10" />
@@ -43,12 +42,11 @@
 		<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.10" />
 		<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="6.0.0" />
 		<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.4" />
-		<PackageReference Include="ReactiveUI.Blazor" Version="19.6.1" />
+		<PackageReference Include="ReactiveUI.Blazor" Version="19.6.12" />
 		<PackageReference Include="ReactiveUI.Validation" Version="3.1.7" />
 		<PackageReference Include="Serilog" Version="3.1.1" />
 		<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
 		<PackageReference Include="SerilogTraceListener" Version="3.2.0" />
-		<PackageReference Include="System.Net.Http" Version="4.3.4" />
 	</ItemGroup>
 	<ItemGroup>
 		<Compile Update="Views\MessageWindow.axaml.cs">

+ 8 - 14
VeloeMinecraftLauncher/ViewModels/MainWindowViewModel.cs

@@ -25,6 +25,9 @@ using VeloeMinecraftLauncher.Models;
 using System.Linq;
 using System.Threading;
 using System.ComponentModel;
+using VeloeMinecraftLauncher.Utils.Logger;
+using VeloeMinecraftLauncher.Utils.Downloader;
+using VeloeMinecraftLauncher.Utils.Starter;
 
 namespace VeloeMinecraftLauncher.ViewModels;
 
@@ -222,7 +225,6 @@ public class MainWindowViewModel : ViewModelBase
     private string _username = string.Empty;
     private StringBuilder _consoleText = new();
     private int _downloadedIndex;
-    private string _argumentsBox = string.Empty;
     private bool _isNoGameRunning = true;
     private bool _isUpdateAvailable = false;
     private string _settingsButton = "Settings";
@@ -311,12 +313,6 @@ public class MainWindowViewModel : ViewModelBase
         set => this.RaiseAndSetIfChanged(ref _startButtonOutput, value);
     }
 
-    public string ArgumentsBox
-    {
-        get => _argumentsBox;
-        set => this.RaiseAndSetIfChanged(ref _argumentsBox, value);
-    }
-
     public string SettingsButton
     {
         get => _settingsButton;
@@ -387,10 +383,11 @@ public class MainWindowViewModel : ViewModelBase
                 }
 
                 int version = 0;
+                var arguments = string.Empty;
 
                 using (StreamReader reader = new(DownloadedVersion.Path))
                 {
-                    string json = reader.ReadToEnd();
+                    var json = reader.ReadToEnd();
 
                     var versionJson = JsonSerializer.Deserialize<Entity.Version.Version>(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
 
@@ -442,7 +439,7 @@ public class MainWindowViewModel : ViewModelBase
                         }
                     }
 
-                    string arguments = StartCommandBuilder.Build(versionJson, Username);
+                    arguments = StartCommandBuilder.Build(versionJson, Username);
 
                     if (!Settings.useCustomJava)
                     {
@@ -470,9 +467,6 @@ public class MainWindowViewModel : ViewModelBase
                             }
                         }
                     }
-
-                    //ConsoleText += arguments;
-                    ArgumentsBox = arguments;
                 }
 
                 if (DownloadedVersion is null)
@@ -494,7 +488,7 @@ public class MainWindowViewModel : ViewModelBase
                 }
 
                 _logger.Debug("Java version path: {0}", Path.Combine(Settings.minecraftForlderPath, javaPath));
-                _logger.Debug("Minecraft arguments: {0}", ArgumentsBox);
+                _logger.Debug("Minecraft arguments: {0}", arguments);
 
                 ProcessStartInfo proc;
                 proc = new ProcessStartInfo
@@ -506,7 +500,7 @@ public class MainWindowViewModel : ViewModelBase
                     FileName = Path.GetFullPath(Path.Combine(Settings.minecraftForlderPath, javaPath)),
                     StandardErrorEncoding = Encoding.UTF8,
                     WorkingDirectory = Path.GetDirectoryName(Path.Combine(Settings.minecraftForlderPath, javaPath)),
-                    Arguments = ArgumentsBox
+                    Arguments = arguments
                 };
 
                 Process minecraft = new()

+ 2 - 0
VeloeMinecraftLauncher/ViewModels/VersionsDownloaderViewModel.cs

@@ -17,6 +17,8 @@ using VeloeMinecraftLauncher.Entity.Version;
 using System.Diagnostics;
 using System.Linq.Expressions;
 using System.Globalization;
+using VeloeMinecraftLauncher.Utils.Downloader;
+using VeloeMinecraftLauncher.Utils.Starter;
 
 namespace VeloeMinecraftLauncher.ViewModels;
 

+ 1 - 1
VeloeMinecraftLauncher/ViewModels/ViewModelBase.cs

@@ -9,7 +9,7 @@ using System;
 using System.ComponentModel;
 using System.IO;
 using System.Net;
-using VeloeMinecraftLauncher.Utils;
+using VeloeMinecraftLauncher.Utils.Starter;
 using VeloeMinecraftLauncher.Views;
 using VeloeMinecraftLauncher.Views.TitleBar;
 

+ 0 - 4
VeloeMinecraftLauncher/Views/MainWindow.axaml

@@ -273,10 +273,6 @@
 						IsEnabled="{Binding IsStartButtonEnabled}">
 					</Button>
 				</StackPanel>
-				<StackPanel Orientation="Horizontal" Grid.Row="2">
-					<TextBox Text="{Binding ArgumentsBox}" TextWrapping="Wrap" Width="680" Height="200" IsVisible="false"></TextBox>
-					<Button Content="{Binding StartButton}" Command="{Binding StartMinecraftCustom}" IsVisible="false"></Button>
-				</StackPanel>
 			</Grid>
 		</DockPanel>
 	</Panel>