├── MCLauncher
├── .gitignore
├── App.config
├── Properties
│ ├── Settings.settings
│ ├── Settings.Designer.cs
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── SampleData
│ ├── Versions.xaml
│ └── SampleClasses.cs
├── App.xaml
├── App.xaml.cs
├── MCLauncher.csproj.user
├── Preferences.cs
├── ProgressDialog.xaml.cs
├── VersionListEndpointDialog.xaml.cs
├── ProgressDialog.xaml
├── RelayCommand.cs
├── LinkResolver.cs
├── VersionListEndpointDialog.xaml
├── app.manifest
├── WUTokenHelper.cs
├── VersionDownloader.cs
├── WUProtocol.cs
├── VersionList.cs
├── MCLauncher.csproj
├── MainWindow.xaml
└── MainWindow.xaml.cs
├── WUTokenHelper
├── pch.cpp
├── .gitignore
├── packages.config
├── WUTokenHelper.vcxproj.user
├── pch.h
├── TokenBrokerInternal.idl
├── WUTokenHelper.vcxproj.filters
├── main.cpp
└── WUTokenHelper.vcxproj
├── .gitignore
├── README.md
├── MCLauncher.sln
└── LICENSE.txt
/MCLauncher/.gitignore:
--------------------------------------------------------------------------------
1 | obj/
2 | bin/
--------------------------------------------------------------------------------
/WUTokenHelper/pch.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .vs
2 | x64
3 | packages
4 | Debug
--------------------------------------------------------------------------------
/WUTokenHelper/.gitignore:
--------------------------------------------------------------------------------
1 | Generated Files/
2 | x64/
--------------------------------------------------------------------------------
/WUTokenHelper/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/WUTokenHelper/WUTokenHelper.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/MCLauncher/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/MCLauncher/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/WUTokenHelper/pch.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include "winrt/Windows.Internal.Security.Authentication.Web.h"
--------------------------------------------------------------------------------
/MCLauncher/SampleData/Versions.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/MCLauncher/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/MCLauncher/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System.Diagnostics;
2 | using System.Windows;
3 |
4 | namespace MCLauncher {
5 | ///
6 | /// Interaction logic for App.xaml
7 | ///
8 | public partial class App : Application {
9 |
10 | protected override void OnStartup(StartupEventArgs e) {
11 | base.OnStartup(e);
12 | Debug.Listeners.Add(new TextWriterTraceListener("Log.txt"));
13 | Debug.AutoFlush = true;
14 | }
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/MCLauncher/MCLauncher.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | publish\
5 |
6 |
7 |
8 |
9 |
10 | en-US
11 | false
12 |
13 |
--------------------------------------------------------------------------------
/MCLauncher/Preferences.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | namespace MCLauncher {
4 | public class Preferences {
5 | public bool ShowInstalledOnly { get; set; } = false;
6 |
7 | public bool DeleteAppxAfterDownload { get; set; } = true;
8 |
9 | [JsonProperty("VersionsApi")]
10 | public string VersionsApiUWP { get; set; } = "";
11 |
12 | public string VersionsApiGDK { get; set; } = "";
13 |
14 | public bool HasPreviouslyUsedGDK { get; set; } = false;
15 |
16 | public bool ShowLegacyBetaTab { get; set; } = false;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/MCLauncher/SampleData/SampleClasses.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace MCLauncher.SampleData
8 | {
9 | public class SampleVersion
10 | {
11 | public string Name { get; set; }
12 |
13 | public string DisplayName { get; set; }
14 | public string DisplayInstallStatus { get; set; }
15 |
16 | public bool IsInstalled { get; set; }
17 |
18 | public bool IsBeta { get; set; }
19 | }
20 |
21 | public class SampleVersionList : List { }
22 | }
23 |
--------------------------------------------------------------------------------
/MCLauncher/ProgressDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Shapes;
14 |
15 | namespace MCLauncher {
16 | ///
17 | /// Interaction logic for ProgressDialog.xaml
18 | ///
19 | public partial class ProgressDialog : Window {
20 | public ProgressDialog() {
21 | InitializeComponent();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/WUTokenHelper/TokenBrokerInternal.idl:
--------------------------------------------------------------------------------
1 | namespace Windows.Internal.Security.Authentication.Web{
2 |
3 | [version(1)]
4 | [uuid(07650a66-66ea-489d-aa90-0dabc75f3567)]
5 | interface ITokenBrokerInternalStatics : IInspectable {
6 |
7 | HRESULT filler_GetTokenSilently();
8 | HRESULT filler_GetSecureInputParameters();
9 | HRESULT filler_ReportBackgroundCompletion();
10 | HRESULT filler_FindAccount();
11 | HRESULT filler_FindAccountForApp();
12 | HRESULT filler_FindAccountForProvider();
13 |
14 | HRESULT FindAllAccountsAsync(
15 | [out][retval] Windows.Foundation.IAsyncOperation *> ** operation);
16 |
17 | }
18 |
19 | [version(1)]
20 | [static(Windows.Internal.Security.Authentication.Web.ITokenBrokerInternalStatics, 1)]
21 | [marshaling_behavior(agile)]
22 | [threading(both)]
23 | runtimeclass TokenBrokerInternal {
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/MCLauncher/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace MCLauncher.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/MCLauncher/VersionListEndpointDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Shapes;
14 |
15 | namespace MCLauncher
16 | {
17 | ///
18 | /// Interaction logic for VersionListEndpointDialog.xaml
19 | ///
20 | public partial class VersionListEndpointDialog : Window
21 | {
22 | public event SetEndpointHandler OnEndpointChanged;
23 |
24 | public delegate void SetEndpointHandler(object sender, string newUwpIdsEndpoint, string newGdkPackageUrlsEndpoint);
25 |
26 |
27 | public VersionListEndpointDialog(string currentEndpoint) {
28 | InitializeComponent();
29 | EndpointTextBox.Text = currentEndpoint;
30 | }
31 |
32 | private void okButton_Click(object sender, RoutedEventArgs e) {
33 | OnEndpointChanged?.Invoke(this, EndpointTextBox.Text, GDKUrlsEndpointTextBox.Text);
34 | Close();
35 | }
36 |
37 | private void cancelButton_Click(object sender, RoutedEventArgs e) {
38 | Close();
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/MCLauncher/ProgressDialog.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/WUTokenHelper/WUTokenHelper.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 | Header Files
20 |
21 |
22 |
23 |
24 | Source Files
25 |
26 |
27 | Source Files
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | Source Files
39 |
40 |
41 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MCLauncher
2 |
3 | This tool allows you to install several versions of Minecraft: Windows 10 Edition (Bedrock) side-by-side.
4 | This is useful if you want to test beta versions, releases or anything else side-by-side without needing to uninstall and reinstall the game.
5 |
6 | ## Disclaimer
7 | This tool will **not** help you to pirate the game; it requires that you have a Microsoft account which can be used to download Minecraft from the Store.
8 |
9 | ## Prerequisites
10 | - A Microsoft account connected to Microsoft Store which **owns Minecraft for Windows 10**
11 | - **Administrator permissions** on your user account (or access to an account that has)
12 | - **Developer mode** enabled for app installation in Windows 10 Settings
13 | - If you want to be able to use beta versions, you'll additionally need to **subscribe to the Minecraft Beta program using Xbox Insider Hub**.
14 | - [Microsoft Visual C++ Redistributable](https://aka.ms/vs/16/release/vc_redist.x64.exe) installed.
15 |
16 | ## Setup
17 | - Download the latest release from the [Releases](https://github.com/MCMrARM/mc-w10-version-launcher/releases) section. Unzip it somewhere.
18 | - Run `MCLauncher.exe` to start the launcher.
19 |
20 | ## Compiling the launcher yourself
21 | You'll need Visual Studio with Windows 10 SDK version 10.0.17763 and .NET Framework 4.6.1 SDK installed. You can find these in the Visual Studio Installer if you don't have them out of the box.
22 | The project should build out of the box with VS as long as you haven't done anything bizarre.
23 |
24 | ## Frequently Asked Questions
25 | **Does this allow running multiple instances of Minecraft: Bedrock at the same time?**
26 |
27 | At the time of writing, no. It allows you to _install_ multiple versions, but only one version can run at a time.
28 |
--------------------------------------------------------------------------------
/MCLauncher/RelayCommand.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Windows.Input;
4 |
5 | namespace MCLauncher {
6 | ///
7 | /// A command whose sole purpose is to relay its functionality to other objects by invoking delegates. The
8 | /// default return value for the CanExecute method is 'true'.
9 | /// See: https://stackoverflow.com/a/3531935
10 | ///
11 | public class RelayCommand : ICommand {
12 |
13 | readonly Action