diff --git a/README.md b/README.md
index feed89f..29a7a41 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
Ein Minecraft-Launcher für Windows mit getrennten Instanzen, Mod-Unterstützung, Spielaufzeichnung, Freundesystem und Microsoft-Anmeldung.
-Aktueller Stand: Version 1.1.5
+Aktueller Stand: Version 1.1.6
@@ -41,7 +41,7 @@ Der Launcher konzentriert sich auf den Alltag: Instanz anlegen, Konto auswählen
- Warnung beim Entfernen eines Mods, der noch als Pflicht-Abhängigkeit gebraucht wird
**Import**
-- Gemeinsamer Import für AeroMC-ZIP, Modrinth-Modpacks (`.mrpack`), Minecraft Launcher, CurseForge, MultiMC/Prism sowie Technic
+- Gemeinsamer Import für AeroMC-ZIP, Modrinth-Modpacks (`.mrpack`), Minecraft Launcher, CurseForge, **Modrinth App**, MultiMC/Prism sowie Technic
- Schon bei der Installation: der Installer erkennt andere Launcher und AeroMC bietet deren Instanzen beim ersten Start zum Übernehmen an
- Von Freunden geteilte Instanzen per Code einlösen
@@ -64,7 +64,8 @@ Der Launcher konzentriert sich auf den Alltag: Instanz anlegen, Konto auswählen
**Konten, Welten und Backups**
- Microsoft-Login mit mehreren Konten
- Eigenen Skin im Launcher hochladen, mit Live-Vorschau anpassen (klassisch/schlank) und zurücksetzen
-- Skin-Hintergrund des aktiven Kontos (mehrere Posen, einstellbare Deckkraft, optional wechselnd)
+- **Skin-Editor mit zwei Schichten**: Skins selbst pixeln – auf der Vorlage oder direkt auf der 3D-Figur, mit Spiegeln, Füllen, Pipette und Rückgängig
+- Skin-Hintergrund des aktiven Kontos (mehrere Posen, passende Armform, einstellbare Deckkraft, optional wechselnd)
- Welten, Ressourcenpakete, Datenpakete, Screenshots, Serverliste und Logdateien verwalten
- Serverliste mit Live-Status und Desktop-Verknüpfung pro Server (startet die Instanz und verbindet direkt)
- Welten mit einem Klick in eine andere Instanz kopieren
@@ -80,7 +81,22 @@ Der Launcher konzentriert sich auf den Alltag: Instanz anlegen, Konto auswählen
- Update-Suche sofort beim Start, Updates installieren sich ohne Rückfragen
- Optionaler Autostart mit Windows (im Infobereich statt als Fenster)
- Rechtsklick-Menü in allen Textfeldern (Ausschneiden, Kopieren, Einfügen)
-- Design Hell/Dunkel, optionaler HTTP-Proxy und Wrapper-Befehl
+- **Fünf Designs**: Klassisch hell oder dunkel, „AeroMC“ im Look der Webseite, „Nachtlila“ (dasselbe in dunklem Lila) und „Minecraft“ mit Block-Optik und Pixel-Schrift – samt passender Titelleiste
+- Optionaler HTTP-Proxy und Wrapper-Befehl
+
+## Designs
+
+Unter **Optionen → Darstellung → Design** stehen fünf Designs zur Wahl. Ein Klick auf eine Vorschau-Kachel zeigt es sofort an, mit **Speichern** gilt es in allen Fenstern – inklusive Titelleiste und Fensterknöpfen.
+
+
+
+  AeroMC Nachtblau, Cyan-Verläufe, runde Knöpfe – wie die Webseite |
+  Nachtlila wie AeroMC, nur in dunklem Lila |
+  Minecraft Grasnarbe, Erde, Stein-Knöpfe und Pixel-Schrift |
+
+
+
+Dazu **Klassisch Dunkel** (Bild ganz oben) und **Klassisch Hell** im bewährten Launcher-Look.
## Installation
@@ -105,7 +121,7 @@ Automatische Updates bleiben getrennt: Setup erhält nur Setup-Updates, Portable
## Erste Schritte
1. AeroMC installieren oder die portable Datei starten.
-2. Über **Konten** ein Microsoft-Konto hinzufügen.
+2. Über den Konto-Knopf oben rechts (oder **Optionen → Konten**) ein Microsoft-Konto hinzufügen.
3. Eine neue Instanz anlegen, Minecraft-Version und optional einen Loader wählen – bei Fabric, Quilt oder NeoForge auf Wunsch gleich mit Performance-Paket.
4. Optional Mods/Ressourcenpakete/Shader hinzufügen oder bestehende Setups über **Importieren** übernehmen.
5. Instanz starten (online oder offline).
@@ -172,6 +188,7 @@ Im Spiel (solange ein über AeroMC gestartetes Minecraft läuft):
| Modpack | Modrinth- oder CurseForge-Katalog direkt durchsuchen und installieren, oder Datei importieren: `.mrpack` sowie CurseForge-ZIP (`manifest.json`) |
| Minecraft Launcher | Profile aus dem offiziellen Launcher |
| CurseForge | Instanzen aus dem CurseForge-Ordner |
+| Modrinth App | Instanzen aus der Modrinth App (`%APPDATA%\ModrinthApp`) inkl. Einstellungen, Spielzeit und Modpack-Verknüpfung |
| MultiMC / Prism | Vorhandene MultiMC- oder Prism-Instanzen |
| Technic | Technic-Katalog direkt durchsuchen und installieren, oder eine vorhandene Technic-Installation importieren (`%APPDATA%\.technic\modpacks`) |
| Per Code | Von einem Freund geteilte Instanz einlösen (siehe **Instanzen → Instanz teilen**) |
@@ -180,7 +197,9 @@ Existiert bereits eine Instanz mit demselben Namen, wird sie ersetzt.
Beim offiziellen Minecraft Launcher werden nur benutzerdefinierte Profile angeboten (keine „Latest Release“/„Latest Snapshot“). Bei gemeinsamen Standard-Spielordnern übernimmt AeroMC spielrelevante Daten (Mods, Welten, Konfiguration), nicht den kompletten Cache.
-**Schon bei der Installation:** Der Installer sucht nach Minecraft Launcher, CurseForge, MultiMC, Prism Launcher, PolyMC und Technic – ein portables MultiMC auch über seine Verknüpfung auf dem Desktop oder im Startmenü. Was dort angekreuzt wird, öffnet AeroMC beim ersten Start fertig durchsucht im Import; ausgewählt wird dann nur noch, was übernommen werden soll. In den anderen Launchern wird nichts verändert.
+**Modrinth App:** Übernommen werden Name, Gruppe, Symbol, Minecraft-Version, Loader, Arbeitsspeicher, Java-Einstellungen, Spielzeit sowie Mods, Welten und Einstellungen. Modrinth-Modpacks bleiben mit ihrem Paket verknüpft und lassen sich weiter aktualisieren. Ein in der App verlegter Datenordner wird automatisch gefunden, und die Modrinth App darf dabei geöffnet bleiben – AeroMC liest auch ihr Schreibprotokoll mit. An den Daten der Modrinth App wird nichts verändert.
+
+**Schon bei der Installation:** Der Installer sucht nach Minecraft Launcher, CurseForge, Modrinth App, MultiMC, Prism Launcher, PolyMC und Technic – ein portables MultiMC auch über seine Verknüpfung auf dem Desktop oder im Startmenü. Was dort angekreuzt wird, öffnet AeroMC beim ersten Start fertig durchsucht im Import; ausgewählt wird dann nur noch, was übernommen werden soll. In den anderen Launchern wird nichts verändert.
Alternativ: `.jar`-, `.mrpack`- oder `.zip`-Dateien direkt aufs Launcher-Fenster ziehen. AeroMC erkennt anhand des Inhalts, ob es sich um einen Mod (landet in der gerade ausgewählten Instanz), ein Modpack oder einen Instanz-Export handelt.
@@ -222,7 +241,6 @@ Ressourcenpakete und Shader funktionieren auch in Vanilla-Instanzen. Mods benöt
- Meldung im Spiel mit 3D-Spielerkopf, sobald ein Freund online kommt
- **Beitreten** startet eine passende eigene Instanz (gleiche Minecraft-Version, bevorzugt mit dem Server in der Liste) und verbindet direkt; gibt es keine, wird eine Vanilla-Instanz angelegt
- **Einladen** schickt Freunden den eigenen aktuellen Server. Im Launcher erscheint die Einladung mit „Beitreten“, im Spiel als Meldung – dort kopiert **Strg+Alt+J** die Adresse für „Direkt verbinden“
-
- **Kurznachrichten**: 💬 beim Freund öffnet eine kleine Unterhaltung mit Schnellantworten („Bin in 10 Min. online“, „Komm online!“ …) oder eigenem Text bis 200 Zeichen. Neue Nachrichten erscheinen als Hinweis im Launcher und – beim Spielen – als Meldung im Spiel; der Zähler am „Freunde“-Knopf zählt offene Anfragen und ungelesene Nachrichten. Nachrichten werden nach 7 Tagen gelöscht.
- **Screenshots verschicken**: In **Bildschirmfotos verwalten** schickt 📤 ein Bild (verkleinert auf höchstens 1600 Pixel Breite) samt optionalem Text an einen Freund; er sieht es im Chat.
@@ -234,15 +252,34 @@ Das Freundesystem funktioniert nur zwischen Spielern, die AeroMC nutzen und mind
## Skin ändern
-Über **Konten → Skin ändern…** lässt sich der Skin des aktiven Microsoft-Kontos direkt im Launcher ändern:
+Über den **eigenen Kontonamen oben rechts → Skin ändern…** lässt sich der Skin des aktiven Microsoft-Kontos direkt im Launcher ändern (der Knopf **Skin** in der Werkzeugleiste schaltet dagegen nur den Skin-Hintergrund ein/aus):
- PNG-Datei auswählen, sofortige Prüfung auf gültige Maße
- Live-Vorschau am 3D-Modell vor dem Anwenden
- Modell wählen: klassisch oder schlank (slim)
-- Auf einen früheren Standard-Skin zurücksetzen
+- Auf den Standard-Skin (Steve/Alex) zurücksetzen – einen früheren eigenen Skin holt das nicht zurück; dafür vorher im Skin-Editor „Als PNG speichern…“ nutzen
Die Änderung wird direkt bei Mojang für das angemeldete Konto hinterlegt und gilt somit auch außerhalb von AeroMC.
+### Skin-Editor
+
+**Im Editor bearbeiten…** öffnet einen eigenen Pixel-Editor – mit der gewählten PNG-Datei oder dem aktuellen Skin des Kontos:
+
+- **Zwei Schichten:** Grundschicht und 2. Schicht (die Hülle über der Figur für Haare, Jacken, Ärmel …) getrennt bemalen; 2. Schicht ein-/ausblenden, Grundschicht darunter durchscheinen lassen, 2. Schicht leeren
+- **2D oder 3D:** auf der aufgeklappten Vorlage oder direkt auf der drehbaren Figur malen – die andere Ansicht läuft als Live-Vorschau mit und ist ebenfalls bemalbar
+- **Werkzeuge:** Stift, Radierer (nur 2. Schicht), Pipette (auch Alt+Klick), Füllen, Farbwähler mit zuletzt benutzten Farben
+- **Spiegeln:** malt gleichzeitig auf der anderen Körperseite
+- Rückgängig/Wiederholen, klassische oder schmale Arme, alte 64×32-Skins werden automatisch umgewandelt
+- Neu beginnen, aktuellen Skin laden oder eine PNG-Datei öffnen
+- **Als Skin übernehmen** (direkt hochladen) oder **Als PNG speichern…**
+
+| Taste | Wirkung |
+|---|---|
+| B / E / I / G | Stift / Radierer / Pipette / Füllen |
+| M | Spiegeln ein/aus |
+| L | Schicht wechseln |
+| Strg+Z / Strg+Y | Rückgängig / Wiederholen |
+
## Backup und Wiederherstellung
Unter **Optionen → Backup**:
@@ -261,7 +298,6 @@ Speicherort: `Dokumente\AeroMC Launcher\Backups`.
## Einstellungen
### Allgemein
-- Design (Dunkel / Hell)
- Instanzen sortieren (nach letztem Start / nach Name)
- Instanz-Verzeichnis
- Bereiche: Bedrock-Bereich anzeigen
@@ -270,8 +306,9 @@ Speicherort: `Dokumente\AeroMC Launcher\Backups`.
- Autostart: mit Windows starten, im Infobereich statt als Fenster – solange aktiv, versteckt „Schließen“ (X) den Launcher nur. Das Symbol im Infobereich gibt es immer; per Rechtsklick startest du dort Instanzen.
### Darstellung
+- Design: Klassisch Dunkel, Klassisch Hell, AeroMC, Nachtlila oder Minecraft – mit Vorschau-Kacheln, gilt nach dem Speichern in allen Fenstern
- Block-Symbole räumlich (3D)
-- Skin-Hintergrund: Quelle, Pose, Deckkraft, optional automatischer Wechsel zwischen mehreren Konten
+- Skin-Hintergrund: Quelle, Pose, Armform (automatisch vom Konto, normal oder schmal), Deckkraft, optional automatischer Wechsel zwischen mehreren Konten
### Spiel
- Standard-RAM (min./max.)
diff --git a/docs/design-aeromc.png b/docs/design-aeromc.png
new file mode 100644
index 0000000..bb8bc31
Binary files /dev/null and b/docs/design-aeromc.png differ
diff --git a/docs/design-minecraft.png b/docs/design-minecraft.png
new file mode 100644
index 0000000..8f569b2
Binary files /dev/null and b/docs/design-minecraft.png differ
diff --git a/docs/design-nachtlila.png b/docs/design-nachtlila.png
new file mode 100644
index 0000000..b7b72b6
Binary files /dev/null and b/docs/design-nachtlila.png differ
diff --git a/installer/LauncherImport.cs b/installer/LauncherImport.cs
index 64b0505..1a77f28 100644
--- a/installer/LauncherImport.cs
+++ b/installer/LauncherImport.cs
@@ -1,176 +1,194 @@
-using System.IO;
-using System.Text;
-using System.Web.Script.Serialization;
-
-namespace AeroMCSetup;
-
-/// Ein gefundener anderer Launcher, dessen Instanzen AeroMC übernehmen kann.
-/// Kennung wie im Import-Dialog des Launchers: mc, cf, mmc, technic
-public sealed class FoundLauncher(string kind, string name, string path, int count, string unit)
-{
- public string Kind { get; } = kind;
- public string Name { get; } = name;
- public string Path { get; } = path;
- public int Count { get; } = count;
- public string Unit { get; } = unit;
-}
-
-///
-/// Sucht andere Launcher an ihren üblichen Orten – nur lesend, es wird nichts verändert.
-/// Übernommen wird später im Launcher selbst (gleicher Import wie unter „Importieren“):
-/// das Setup legt dafür nur pending-import.json ab, AeroMC öffnet beim ersten Start
-/// den Import-Dialog damit fertig durchsucht.
-///
-public static class LauncherImport
-{
- private static string AppData => Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
- private static string Home => Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
-
- private static string PendingFile => System.IO.Path.Combine(Installer.DataDir, "pending-import.json");
-
- public static List Detect()
- {
- var found = new List();
- void Add(Func probe)
- {
- try { if (probe() is { Count: > 0 } f) found.Add(f); } catch { /* unlesbar → einfach nicht anbieten */ }
- }
- Add(DetectMinecraftLauncher);
- Add(DetectCurseForge);
- Add(() => DetectMultiMc("Prism Launcher", System.IO.Path.Combine(AppData, "PrismLauncher")));
- Add(() => DetectMultiMc("PolyMC", System.IO.Path.Combine(AppData, "PolyMC")));
- // MultiMC (und portable Prism/PolyMC) liegen irgendwo – über ihre Verknüpfungen finden
- foreach (var (name, root) in PortableMultiMcFromShortcuts())
- {
- if (found.Any(f => f.Kind == "mmc" && SamePath(f.Path, root))) continue;
- Add(() => DetectMultiMc(name, root));
- }
- Add(DetectTechnic);
- return found;
- }
-
- // ---------- offizieller Minecraft Launcher ----------
-
- private static readonly string[] ProfileFiles =
- ["launcher_profiles.json", "launcher_profiles_microsoft_store.json", "launcher_profiles_microsoft_store_2.json"];
-
- private static FoundLauncher? DetectMinecraftLauncher()
- {
- var root = System.IO.Path.Combine(AppData, ".minecraft");
- var file = ProfileFiles.Select(f => System.IO.Path.Combine(root, f)).FirstOrDefault(File.Exists);
- if (file is null) return null;
-
- var json = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }
- .Deserialize>(File.ReadAllText(file, Encoding.UTF8).TrimStart(''));
- if (json?.TryGetValue("profiles", out var p) != true || p is not Dictionary profiles) return null;
-
- // wie isImportableProfile in src/mcimport.js: die automatischen "Neueste Version"-Profile zählen nicht
- int count = profiles.Values.OfType>().Count(profile =>
- {
- var type = (Get(profile, "type") ?? "").Trim().ToLowerInvariant();
- if (type is "latest-release" or "latest-snapshot") return false;
- return !string.IsNullOrWhiteSpace(Get(profile, "name")) || !string.IsNullOrWhiteSpace(Get(profile, "lastVersionId"));
- });
- return new FoundLauncher("mc", "Minecraft Launcher", root, count, count == 1 ? "Profil" : "Profile");
- }
-
- private static string? Get(Dictionary d, string key) => d.TryGetValue(key, out var v) ? v as string : null;
-
- // ---------- CurseForge ----------
-
- private static FoundLauncher? DetectCurseForge()
- {
- var dir = new[]
- {
- System.IO.Path.Combine(Home, "curseforge", "minecraft", "Instances"),
- System.IO.Path.Combine(Home, "CurseForge", "minecraft", "Instances"),
- }.FirstOrDefault(Directory.Exists);
- if (dir is null) return null;
-
- string[] markers = ["minecraftinstance.json", "instance.json", "mods", "config", "resourcepacks", "shaderpacks", "saves", "options.txt"];
- int count = Directory.GetDirectories(dir).Count(d => markers.Any(m => Exists(d, m)));
- return new FoundLauncher("cf", "CurseForge", dir, count, count == 1 ? "Instanz" : "Instanzen");
- }
-
- // ---------- Prism Launcher / PolyMC (MultiMC-Format) ----------
-
- private static FoundLauncher? DetectMultiMc(string name, string root)
- {
- var instances = System.IO.Path.Combine(root, "instances");
- if (!Directory.Exists(instances)) return null;
- int count = Directory.GetDirectories(instances).Count(d => File.Exists(System.IO.Path.Combine(d, "instance.cfg")));
- return new FoundLauncher("mmc", name, root, count, count == 1 ? "Instanz" : "Instanzen");
- }
-
- private static readonly Dictionary MultiMcExes = new(StringComparer.OrdinalIgnoreCase)
- {
- ["MultiMC.exe"] = "MultiMC",
- ["prismlauncher.exe"] = "Prism Launcher",
- ["polymc.exe"] = "PolyMC",
- };
-
- /// Ordner von MultiMC-artigen Launchern, auf die eine Verknüpfung (Desktop/Startmenü) zeigt.
- private static IEnumerable<(string Name, string Root)> PortableMultiMcFromShortcuts()
- {
- var places = new[]
- {
- (Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), SearchOption.TopDirectoryOnly),
- (Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), SearchOption.TopDirectoryOnly),
- (Environment.GetFolderPath(Environment.SpecialFolder.Programs), SearchOption.AllDirectories),
- (Environment.GetFolderPath(Environment.SpecialFolder.CommonPrograms), SearchOption.AllDirectories),
- };
- var seen = new HashSet(StringComparer.OrdinalIgnoreCase);
- foreach (var (dir, option) in places)
- {
- string[] links;
- try { links = string.IsNullOrEmpty(dir) || !Directory.Exists(dir) ? [] : Directory.GetFiles(dir, "*.lnk", option); }
- catch { continue; }
- foreach (var link in links)
- {
- var target = Shortcut.Target(link);
- if (string.IsNullOrEmpty(target) || !MultiMcExes.TryGetValue(System.IO.Path.GetFileName(target), out var name)) continue;
- var root = System.IO.Path.GetDirectoryName(target);
- if (root is null || !Directory.Exists(System.IO.Path.Combine(root, "instances")) || !seen.Add(root)) continue;
- yield return (name, root);
- }
- }
- }
-
- private static bool SamePath(string a, string b) =>
- string.Equals(System.IO.Path.GetFullPath(a).TrimEnd('\\'), System.IO.Path.GetFullPath(b).TrimEnd('\\'), StringComparison.OrdinalIgnoreCase);
-
- // ---------- Technic ----------
-
- private static FoundLauncher? DetectTechnic()
- {
- var modpacks = System.IO.Path.Combine(AppData, ".technic", "modpacks");
- if (!Directory.Exists(modpacks)) return null;
- string[] markers = ["bin", "mods", "config", "saves", "resourcepacks", "options.txt"];
- int count = Directory.GetDirectories(modpacks).Count(d => markers.Any(m => Exists(d, m)));
- return new FoundLauncher("technic", "Technic Launcher", modpacks, count, count == 1 ? "Modpack" : "Modpacks");
- }
-
- private static bool Exists(string dir, string name)
- {
- var p = System.IO.Path.Combine(dir, name);
- return File.Exists(p) || Directory.Exists(p);
- }
-
- // ---------- Übergabe an den Launcher ----------
-
- /// Merkt die ausgewählten Launcher für den ersten Start von AeroMC vor (oder räumt eine alte Vormerkung weg).
- public static void WritePending(IReadOnlyCollection selected)
- {
- if (selected.Count == 0)
- {
- try { if (File.Exists(PendingFile)) File.Delete(PendingFile); } catch { }
- return;
- }
- var data = new Dictionary
- {
- ["sources"] = selected.Select(s => new Dictionary { ["kind"] = s.Kind, ["path"] = s.Path }).ToList(),
- };
- Directory.CreateDirectory(Installer.DataDir);
- File.WriteAllText(PendingFile, new JavaScriptSerializer().Serialize(data), new UTF8Encoding(false));
- }
-}
+using System.IO;
+using System.Text;
+using System.Web.Script.Serialization;
+
+namespace AeroMCSetup;
+
+/// Ein gefundener anderer Launcher, dessen Instanzen AeroMC übernehmen kann.
+/// Kennung wie im Import-Dialog des Launchers: mc, cf, mr, mmc, technic
+public sealed class FoundLauncher(string kind, string name, string path, int count, string unit)
+{
+ public string Kind { get; } = kind;
+ public string Name { get; } = name;
+ public string Path { get; } = path;
+ public int Count { get; } = count;
+ public string Unit { get; } = unit;
+}
+
+///
+/// Sucht andere Launcher an ihren üblichen Orten – nur lesend, es wird nichts verändert.
+/// Übernommen wird später im Launcher selbst (gleicher Import wie unter „Importieren“):
+/// das Setup legt dafür nur pending-import.json ab, AeroMC öffnet beim ersten Start
+/// den Import-Dialog damit fertig durchsucht.
+///
+public static class LauncherImport
+{
+ private static string AppData => Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ private static string Home => Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+
+ private static string PendingFile => System.IO.Path.Combine(Installer.DataDir, "pending-import.json");
+
+ public static List Detect()
+ {
+ var found = new List();
+ void Add(Func probe)
+ {
+ try { if (probe() is { Count: > 0 } f) found.Add(f); } catch { /* unlesbar → einfach nicht anbieten */ }
+ }
+ Add(DetectMinecraftLauncher);
+ Add(DetectCurseForge);
+ Add(DetectModrinthApp);
+ Add(() => DetectMultiMc("Prism Launcher", System.IO.Path.Combine(AppData, "PrismLauncher")));
+ Add(() => DetectMultiMc("PolyMC", System.IO.Path.Combine(AppData, "PolyMC")));
+ // MultiMC (und portable Prism/PolyMC) liegen irgendwo – über ihre Verknüpfungen finden
+ foreach (var (name, root) in PortableMultiMcFromShortcuts())
+ {
+ if (found.Any(f => f.Kind == "mmc" && SamePath(f.Path, root))) continue;
+ Add(() => DetectMultiMc(name, root));
+ }
+ Add(DetectTechnic);
+ return found;
+ }
+
+ // ---------- offizieller Minecraft Launcher ----------
+
+ private static readonly string[] ProfileFiles =
+ ["launcher_profiles.json", "launcher_profiles_microsoft_store.json", "launcher_profiles_microsoft_store_2.json"];
+
+ private static FoundLauncher? DetectMinecraftLauncher()
+ {
+ var root = System.IO.Path.Combine(AppData, ".minecraft");
+ var file = ProfileFiles.Select(f => System.IO.Path.Combine(root, f)).FirstOrDefault(File.Exists);
+ if (file is null) return null;
+
+ var json = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }
+ .Deserialize>(File.ReadAllText(file, Encoding.UTF8).TrimStart(''));
+ if (json?.TryGetValue("profiles", out var p) != true || p is not Dictionary profiles) return null;
+
+ // wie isImportableProfile in src/mcimport.js: die automatischen "Neueste Version"-Profile zählen nicht
+ int count = profiles.Values.OfType>().Count(profile =>
+ {
+ var type = (Get(profile, "type") ?? "").Trim().ToLowerInvariant();
+ if (type is "latest-release" or "latest-snapshot") return false;
+ return !string.IsNullOrWhiteSpace(Get(profile, "name")) || !string.IsNullOrWhiteSpace(Get(profile, "lastVersionId"));
+ });
+ return new FoundLauncher("mc", "Minecraft Launcher", root, count, count == 1 ? "Profil" : "Profile");
+ }
+
+ private static string? Get(Dictionary d, string key) => d.TryGetValue(key, out var v) ? v as string : null;
+
+ // ---------- CurseForge ----------
+
+ private static FoundLauncher? DetectCurseForge()
+ {
+ var dir = new[]
+ {
+ System.IO.Path.Combine(Home, "curseforge", "minecraft", "Instances"),
+ System.IO.Path.Combine(Home, "CurseForge", "minecraft", "Instances"),
+ }.FirstOrDefault(Directory.Exists);
+ if (dir is null) return null;
+
+ string[] markers = ["minecraftinstance.json", "instance.json", "mods", "config", "resourcepacks", "shaderpacks", "saves", "options.txt"];
+ int count = Directory.GetDirectories(dir).Count(d => markers.Any(m => Exists(d, m)));
+ return new FoundLauncher("cf", "CurseForge", dir, count, count == 1 ? "Instanz" : "Instanzen");
+ }
+
+ // ---------- Modrinth App ----------
+
+ private static FoundLauncher? DetectModrinthApp()
+ {
+ // neuere Fassungen: ModrinthApp, sehr alte: com.modrinth.theseus (siehe src/mrimport.js)
+ var root = new[]
+ {
+ System.IO.Path.Combine(AppData, "ModrinthApp"),
+ System.IO.Path.Combine(AppData, "com.modrinth.theseus"),
+ }.FirstOrDefault(d => Directory.Exists(System.IO.Path.Combine(d, "profiles")));
+ if (root is null) return null;
+
+ string[] markers = ["profile.json", "mods", "config", "resourcepacks", "shaderpacks", "saves", "options.txt"];
+ int count = Directory.GetDirectories(System.IO.Path.Combine(root, "profiles")).Count(d => markers.Any(m => Exists(d, m)));
+ return new FoundLauncher("mr", "Modrinth App", root, count, count == 1 ? "Instanz" : "Instanzen");
+ }
+
+ // ---------- Prism Launcher / PolyMC (MultiMC-Format) ----------
+
+ private static FoundLauncher? DetectMultiMc(string name, string root)
+ {
+ var instances = System.IO.Path.Combine(root, "instances");
+ if (!Directory.Exists(instances)) return null;
+ int count = Directory.GetDirectories(instances).Count(d => File.Exists(System.IO.Path.Combine(d, "instance.cfg")));
+ return new FoundLauncher("mmc", name, root, count, count == 1 ? "Instanz" : "Instanzen");
+ }
+
+ private static readonly Dictionary MultiMcExes = new(StringComparer.OrdinalIgnoreCase)
+ {
+ ["MultiMC.exe"] = "MultiMC",
+ ["prismlauncher.exe"] = "Prism Launcher",
+ ["polymc.exe"] = "PolyMC",
+ };
+
+ /// Ordner von MultiMC-artigen Launchern, auf die eine Verknüpfung (Desktop/Startmenü) zeigt.
+ private static IEnumerable<(string Name, string Root)> PortableMultiMcFromShortcuts()
+ {
+ var places = new[]
+ {
+ (Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), SearchOption.TopDirectoryOnly),
+ (Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), SearchOption.TopDirectoryOnly),
+ (Environment.GetFolderPath(Environment.SpecialFolder.Programs), SearchOption.AllDirectories),
+ (Environment.GetFolderPath(Environment.SpecialFolder.CommonPrograms), SearchOption.AllDirectories),
+ };
+ var seen = new HashSet(StringComparer.OrdinalIgnoreCase);
+ foreach (var (dir, option) in places)
+ {
+ string[] links;
+ try { links = string.IsNullOrEmpty(dir) || !Directory.Exists(dir) ? [] : Directory.GetFiles(dir, "*.lnk", option); }
+ catch { continue; }
+ foreach (var link in links)
+ {
+ var target = Shortcut.Target(link);
+ if (string.IsNullOrEmpty(target) || !MultiMcExes.TryGetValue(System.IO.Path.GetFileName(target), out var name)) continue;
+ var root = System.IO.Path.GetDirectoryName(target);
+ if (root is null || !Directory.Exists(System.IO.Path.Combine(root, "instances")) || !seen.Add(root)) continue;
+ yield return (name, root);
+ }
+ }
+ }
+
+ private static bool SamePath(string a, string b) =>
+ string.Equals(System.IO.Path.GetFullPath(a).TrimEnd('\\'), System.IO.Path.GetFullPath(b).TrimEnd('\\'), StringComparison.OrdinalIgnoreCase);
+
+ // ---------- Technic ----------
+
+ private static FoundLauncher? DetectTechnic()
+ {
+ var modpacks = System.IO.Path.Combine(AppData, ".technic", "modpacks");
+ if (!Directory.Exists(modpacks)) return null;
+ string[] markers = ["bin", "mods", "config", "saves", "resourcepacks", "options.txt"];
+ int count = Directory.GetDirectories(modpacks).Count(d => markers.Any(m => Exists(d, m)));
+ return new FoundLauncher("technic", "Technic Launcher", modpacks, count, count == 1 ? "Modpack" : "Modpacks");
+ }
+
+ private static bool Exists(string dir, string name)
+ {
+ var p = System.IO.Path.Combine(dir, name);
+ return File.Exists(p) || Directory.Exists(p);
+ }
+
+ // ---------- Übergabe an den Launcher ----------
+
+ /// Merkt die ausgewählten Launcher für den ersten Start von AeroMC vor (oder räumt eine alte Vormerkung weg).
+ public static void WritePending(IReadOnlyCollection selected)
+ {
+ if (selected.Count == 0)
+ {
+ try { if (File.Exists(PendingFile)) File.Delete(PendingFile); } catch { }
+ return;
+ }
+ var data = new Dictionary
+ {
+ ["sources"] = selected.Select(s => new Dictionary { ["kind"] = s.Kind, ["path"] = s.Path }).ToList(),
+ };
+ Directory.CreateDirectory(Installer.DataDir);
+ File.WriteAllText(PendingFile, new JavaScriptSerializer().Serialize(data), new UTF8Encoding(false));
+ }
+}
diff --git a/installer/obj/AeroMCSetup.csproj.nuget.dgspec.json b/installer/obj/AeroMCSetup.csproj.nuget.dgspec.json
index 1d579a0..2eb8b69 100644
--- a/installer/obj/AeroMCSetup.csproj.nuget.dgspec.json
+++ b/installer/obj/AeroMCSetup.csproj.nuget.dgspec.json
@@ -5,7 +5,7 @@
},
"projects": {
"C:\\Users\\Viper\\Desktop\\AeroMC-Launcher\\installer\\AeroMCSetup.csproj": {
- "version": "1.1.5",
+ "version": "1.1.6",
"restore": {
"projectUniqueName": "C:\\Users\\Viper\\Desktop\\AeroMC-Launcher\\installer\\AeroMCSetup.csproj",
"projectName": "AeroMC-Setup",
diff --git a/installer/obj/Debug/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/installer/obj/Debug/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs
new file mode 100644
index 0000000..3cf0af3
--- /dev/null
+++ b/installer/obj/Debug/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
diff --git a/installer/obj/Debug/net48/AeroMC-Setup.exe.withSupportedRuntime.config b/installer/obj/Debug/net48/AeroMC-Setup.exe.withSupportedRuntime.config
new file mode 100644
index 0000000..ef94b7c
--- /dev/null
+++ b/installer/obj/Debug/net48/AeroMC-Setup.exe.withSupportedRuntime.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/installer/obj/Debug/net48/AeroMC-Setup_MarkupCompile.cache b/installer/obj/Debug/net48/AeroMC-Setup_MarkupCompile.cache
new file mode 100644
index 0000000..7ea4302
--- /dev/null
+++ b/installer/obj/Debug/net48/AeroMC-Setup_MarkupCompile.cache
@@ -0,0 +1,20 @@
+AeroMC-Setup
+0.0.0.0
+
+winexe
+C#
+.cs
+C:\Users\Viper\Desktop\AeroMC-Launcher\installer\obj\Debug\net48\
+AeroMCSetup
+none
+false
+TRACE;DEBUG;NETFRAMEWORK;NET48;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45_OR_GREATER;NET451_OR_GREATER;NET452_OR_GREATER;NET46_OR_GREATER;NET461_OR_GREATER;NET462_OR_GREATER;NET47_OR_GREATER;NET471_OR_GREATER;NET472_OR_GREATER;NET48_OR_GREATER
+C:\Users\Viper\Desktop\AeroMC-Launcher\installer\App.xaml
+41549299691
+
+919373854
+251587687494
+MainWindow.xaml;Themes\Colors.Dark.xaml;Themes\Colors.Light.xaml;Themes\Controls.xaml;
+
+False
+
diff --git a/installer/obj/Debug/net48/AeroMCSetup.AssemblyInfo.cs b/installer/obj/Debug/net48/AeroMCSetup.AssemblyInfo.cs
new file mode 100644
index 0000000..8781f0f
--- /dev/null
+++ b/installer/obj/Debug/net48/AeroMCSetup.AssemblyInfo.cs
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("M_Viper")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright (c) M_Viper. Alle Rechte vorbehalten.")]
+[assembly: System.Reflection.AssemblyDescriptionAttribute("Installiert AeroMC")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("0.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("0.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("AeroMC Setup")]
+[assembly: System.Reflection.AssemblyTitleAttribute("AeroMC Setup")]
+[assembly: System.Reflection.AssemblyVersionAttribute("0.0.0.0")]
+[assembly: System.Resources.NeutralResourcesLanguageAttribute("de-DE")]
+
+// Von der MSBuild WriteCodeFragment-Klasse generiert.
+
diff --git a/installer/obj/Debug/net48/AeroMCSetup.AssemblyInfoInputs.cache b/installer/obj/Debug/net48/AeroMCSetup.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..290e702
--- /dev/null
+++ b/installer/obj/Debug/net48/AeroMCSetup.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+f169547649332c2f1c7da272087eb95fe510c6a52616eac752d180c8c6fe1d73
diff --git a/installer/obj/Debug/net48/AeroMCSetup.GeneratedMSBuildEditorConfig.editorconfig b/installer/obj/Debug/net48/AeroMCSetup.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..b4b7844
--- /dev/null
+++ b/installer/obj/Debug/net48/AeroMCSetup.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,14 @@
+is_global = true
+build_property.ApplicationManifest = app.manifest
+build_property.StartupObject =
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.RootNamespace = AeroMCSetup
+build_property.ProjectDir = C:\Users\Viper\Desktop\AeroMC-Launcher\installer\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+build_property.CsWinRTUseWindowsUIXamlProjections = false
+build_property.EffectiveAnalysisLevelStyle =
+build_property.EnableCodeStyleSeverity =
diff --git a/installer/obj/Debug/net48/AeroMCSetup.GlobalUsings.g.cs b/installer/obj/Debug/net48/AeroMCSetup.GlobalUsings.g.cs
new file mode 100644
index 0000000..4a15929
--- /dev/null
+++ b/installer/obj/Debug/net48/AeroMCSetup.GlobalUsings.g.cs
@@ -0,0 +1,6 @@
+//
+global using System;
+global using System.Collections.Generic;
+global using System.Linq;
+global using System.Threading;
+global using System.Threading.Tasks;
diff --git a/installer/obj/Debug/net48/AeroMCSetup.assets.cache b/installer/obj/Debug/net48/AeroMCSetup.assets.cache
new file mode 100644
index 0000000..4e28840
Binary files /dev/null and b/installer/obj/Debug/net48/AeroMCSetup.assets.cache differ
diff --git a/installer/obj/Debug/net48/AeroMCSetup.csproj.AssemblyReference.cache b/installer/obj/Debug/net48/AeroMCSetup.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..04b01b8
Binary files /dev/null and b/installer/obj/Debug/net48/AeroMCSetup.csproj.AssemblyReference.cache differ
diff --git a/installer/obj/Debug/net48/App.baml b/installer/obj/Debug/net48/App.baml
new file mode 100644
index 0000000..5094e61
Binary files /dev/null and b/installer/obj/Debug/net48/App.baml differ
diff --git a/installer/obj/Debug/net48/App.g.cs b/installer/obj/Debug/net48/App.g.cs
new file mode 100644
index 0000000..ad8ee82
--- /dev/null
+++ b/installer/obj/Debug/net48/App.g.cs
@@ -0,0 +1,77 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "85CCB5F529C7F3695DF076BCDBCCA84D8F4ED0DE"
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace AeroMCSetup {
+
+
+ ///
+ /// App
+ ///
+ public partial class App : System.Windows.Application {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.12.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/AeroMC-Setup;V0.0.0.0;component/app.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\..\App.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ ///
+ /// Application Entry Point.
+ ///
+ [System.STAThreadAttribute()]
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.12.0")]
+ public static void Main() {
+ AeroMCSetup.App app = new AeroMCSetup.App();
+ app.InitializeComponent();
+ app.Run();
+ }
+ }
+}
+
diff --git a/installer/obj/Debug/net48/MainWindow.baml b/installer/obj/Debug/net48/MainWindow.baml
new file mode 100644
index 0000000..8a739f7
Binary files /dev/null and b/installer/obj/Debug/net48/MainWindow.baml differ
diff --git a/installer/obj/Debug/net48/MainWindow.g.cs b/installer/obj/Debug/net48/MainWindow.g.cs
new file mode 100644
index 0000000..326270c
--- /dev/null
+++ b/installer/obj/Debug/net48/MainWindow.g.cs
@@ -0,0 +1,842 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "8CB5D6EC1BE0A9A19A04D9A92B2B0961370843E0"
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace AeroMCSetup {
+
+
+ ///
+ /// MainWindow
+ ///
+ public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+
+
+ #line 140 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock VersionText;
+
+ #line default
+ #line hidden
+
+
+ #line 142 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel Steps;
+
+ #line default
+ #line hidden
+
+
+ #line 144 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot0;
+
+ #line default
+ #line hidden
+
+
+ #line 144 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num0;
+
+ #line default
+ #line hidden
+
+
+ #line 145 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label0;
+
+ #line default
+ #line hidden
+
+
+ #line 147 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line0;
+
+ #line default
+ #line hidden
+
+
+ #line 149 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot1;
+
+ #line default
+ #line hidden
+
+
+ #line 149 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num1;
+
+ #line default
+ #line hidden
+
+
+ #line 150 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label1;
+
+ #line default
+ #line hidden
+
+
+ #line 152 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line1;
+
+ #line default
+ #line hidden
+
+
+ #line 154 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot2;
+
+ #line default
+ #line hidden
+
+
+ #line 154 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num2;
+
+ #line default
+ #line hidden
+
+
+ #line 155 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label2;
+
+ #line default
+ #line hidden
+
+
+ #line 157 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line2;
+
+ #line default
+ #line hidden
+
+
+ #line 159 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel ImportStepRow;
+
+ #line default
+ #line hidden
+
+
+ #line 160 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot3;
+
+ #line default
+ #line hidden
+
+
+ #line 160 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num3;
+
+ #line default
+ #line hidden
+
+
+ #line 161 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label3;
+
+ #line default
+ #line hidden
+
+
+ #line 163 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line3;
+
+ #line default
+ #line hidden
+
+
+ #line 165 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot4;
+
+ #line default
+ #line hidden
+
+
+ #line 165 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num4;
+
+ #line default
+ #line hidden
+
+
+ #line 166 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label4;
+
+ #line default
+ #line hidden
+
+
+ #line 179 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock WindowTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 185 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button CloseButton;
+
+ #line default
+ #line hidden
+
+
+ #line 193 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageWelcome;
+
+ #line default
+ #line hidden
+
+
+ #line 240 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border UpdateHint;
+
+ #line default
+ #line hidden
+
+
+ #line 245 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock UpdateHintText;
+
+ #line default
+ #line hidden
+
+
+ #line 248 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border RunningHint;
+
+ #line default
+ #line hidden
+
+
+ #line 260 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.DockPanel PageLicense;
+
+ #line default
+ #line hidden
+
+
+ #line 264 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox AcceptLicense;
+
+ #line default
+ #line hidden
+
+
+ #line 271 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel LicensePanel;
+
+ #line default
+ #line hidden
+
+
+ #line 277 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageOptions;
+
+ #line default
+ #line hidden
+
+
+ #line 286 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBox DirBox;
+
+ #line default
+ #line hidden
+
+
+ #line 295 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox DesktopLinkBox;
+
+ #line default
+ #line hidden
+
+
+ #line 301 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageImport;
+
+ #line default
+ #line hidden
+
+
+ #line 306 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel ImportList;
+
+ #line default
+ #line hidden
+
+
+ #line 313 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageProgress;
+
+ #line default
+ #line hidden
+
+
+ #line 314 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border SuccessIcon;
+
+ #line default
+ #line hidden
+
+
+ #line 316 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Media.ScaleTransform SuccessScale;
+
+ #line default
+ #line hidden
+
+
+ #line 321 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock ProgressTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 323 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel ProgressBarPanel;
+
+ #line default
+ #line hidden
+
+
+ #line 324 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock PercentText;
+
+ #line default
+ #line hidden
+
+
+ #line 326 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border ProgressTrack;
+
+ #line default
+ #line hidden
+
+
+ #line 327 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border ProgressFill;
+
+ #line default
+ #line hidden
+
+
+ #line 330 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock ProgressText;
+
+ #line default
+ #line hidden
+
+
+ #line 332 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel DonePanel;
+
+ #line default
+ #line hidden
+
+
+ #line 333 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox LaunchBox;
+
+ #line default
+ #line hidden
+
+
+ #line 338 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageUninstall;
+
+ #line default
+ #line hidden
+
+
+ #line 349 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DataInfo;
+
+ #line default
+ #line hidden
+
+
+ #line 350 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox RemoveDataBox;
+
+ #line default
+ #line hidden
+
+
+ #line 352 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock RemoveDataWarning;
+
+ #line default
+ #line hidden
+
+
+ #line 362 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button BackButton;
+
+ #line default
+ #line hidden
+
+
+ #line 363 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button NextButton;
+
+ #line default
+ #line hidden
+
+
+ #line 364 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button CancelButton;
+
+ #line default
+ #line hidden
+
+
+ #line 368 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Grid DialogOverlay;
+
+ #line default
+ #line hidden
+
+
+ #line 369 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border DialogCard;
+
+ #line default
+ #line hidden
+
+
+ #line 372 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Media.ScaleTransform DialogScale;
+
+ #line default
+ #line hidden
+
+
+ #line 376 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogIcon;
+
+ #line default
+ #line hidden
+
+
+ #line 379 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 382 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogText;
+
+ #line default
+ #line hidden
+
+
+ #line 385 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button DialogSecondary;
+
+ #line default
+ #line hidden
+
+
+ #line 386 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button DialogPrimary;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.12.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/AeroMC-Setup;V0.0.0.0;component/mainwindow.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\..\MainWindow.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.12.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.VersionText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 2:
+ this.Steps = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 3:
+ this.Dot0 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 4:
+ this.Num0 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 5:
+ this.Label0 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 6:
+ this.Line0 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 7:
+ this.Dot1 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 8:
+ this.Num1 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 9:
+ this.Label1 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 10:
+ this.Line1 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 11:
+ this.Dot2 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 12:
+ this.Num2 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 13:
+ this.Label2 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 14:
+ this.Line2 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 15:
+ this.ImportStepRow = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 16:
+ this.Dot3 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 17:
+ this.Num3 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 18:
+ this.Label3 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 19:
+ this.Line3 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 20:
+ this.Dot4 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 21:
+ this.Num4 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 22:
+ this.Label4 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 23:
+ this.WindowTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 24:
+
+ #line 183 "..\..\..\MainWindow.xaml"
+ ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Minimize_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 25:
+ this.CloseButton = ((System.Windows.Controls.Button)(target));
+
+ #line 185 "..\..\..\MainWindow.xaml"
+ this.CloseButton.Click += new System.Windows.RoutedEventHandler(this.Cancel_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 26:
+ this.PageWelcome = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 27:
+ this.UpdateHint = ((System.Windows.Controls.Border)(target));
+ return;
+ case 28:
+ this.UpdateHintText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 29:
+ this.RunningHint = ((System.Windows.Controls.Border)(target));
+ return;
+ case 30:
+ this.PageLicense = ((System.Windows.Controls.DockPanel)(target));
+ return;
+ case 31:
+ this.AcceptLicense = ((System.Windows.Controls.CheckBox)(target));
+
+ #line 265 "..\..\..\MainWindow.xaml"
+ this.AcceptLicense.Checked += new System.Windows.RoutedEventHandler(this.AcceptLicense_Click);
+
+ #line default
+ #line hidden
+
+ #line 265 "..\..\..\MainWindow.xaml"
+ this.AcceptLicense.Unchecked += new System.Windows.RoutedEventHandler(this.AcceptLicense_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 32:
+ this.LicensePanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 33:
+ this.PageOptions = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 34:
+
+ #line 285 "..\..\..\MainWindow.xaml"
+ ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ChangeDir_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 35:
+ this.DirBox = ((System.Windows.Controls.TextBox)(target));
+ return;
+ case 36:
+ this.DesktopLinkBox = ((System.Windows.Controls.CheckBox)(target));
+ return;
+ case 37:
+ this.PageImport = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 38:
+ this.ImportList = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 39:
+ this.PageProgress = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 40:
+ this.SuccessIcon = ((System.Windows.Controls.Border)(target));
+ return;
+ case 41:
+ this.SuccessScale = ((System.Windows.Media.ScaleTransform)(target));
+ return;
+ case 42:
+ this.ProgressTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 43:
+ this.ProgressBarPanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 44:
+ this.PercentText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 45:
+ this.ProgressTrack = ((System.Windows.Controls.Border)(target));
+
+ #line 326 "..\..\..\MainWindow.xaml"
+ this.ProgressTrack.SizeChanged += new System.Windows.SizeChangedEventHandler(this.ProgressTrack_SizeChanged);
+
+ #line default
+ #line hidden
+ return;
+ case 46:
+ this.ProgressFill = ((System.Windows.Controls.Border)(target));
+ return;
+ case 47:
+ this.ProgressText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 48:
+ this.DonePanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 49:
+ this.LaunchBox = ((System.Windows.Controls.CheckBox)(target));
+ return;
+ case 50:
+ this.PageUninstall = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 51:
+ this.DataInfo = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 52:
+ this.RemoveDataBox = ((System.Windows.Controls.CheckBox)(target));
+
+ #line 351 "..\..\..\MainWindow.xaml"
+ this.RemoveDataBox.Checked += new System.Windows.RoutedEventHandler(this.RemoveDataBox_Click);
+
+ #line default
+ #line hidden
+
+ #line 351 "..\..\..\MainWindow.xaml"
+ this.RemoveDataBox.Unchecked += new System.Windows.RoutedEventHandler(this.RemoveDataBox_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 53:
+ this.RemoveDataWarning = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 54:
+ this.BackButton = ((System.Windows.Controls.Button)(target));
+
+ #line 362 "..\..\..\MainWindow.xaml"
+ this.BackButton.Click += new System.Windows.RoutedEventHandler(this.Back_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 55:
+ this.NextButton = ((System.Windows.Controls.Button)(target));
+
+ #line 363 "..\..\..\MainWindow.xaml"
+ this.NextButton.Click += new System.Windows.RoutedEventHandler(this.Next_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 56:
+ this.CancelButton = ((System.Windows.Controls.Button)(target));
+
+ #line 364 "..\..\..\MainWindow.xaml"
+ this.CancelButton.Click += new System.Windows.RoutedEventHandler(this.Cancel_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 57:
+ this.DialogOverlay = ((System.Windows.Controls.Grid)(target));
+ return;
+ case 58:
+ this.DialogCard = ((System.Windows.Controls.Border)(target));
+ return;
+ case 59:
+ this.DialogScale = ((System.Windows.Media.ScaleTransform)(target));
+ return;
+ case 60:
+ this.DialogIcon = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 61:
+ this.DialogTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 62:
+ this.DialogText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 63:
+ this.DialogSecondary = ((System.Windows.Controls.Button)(target));
+
+ #line 385 "..\..\..\MainWindow.xaml"
+ this.DialogSecondary.Click += new System.Windows.RoutedEventHandler(this.DialogSecondary_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 64:
+ this.DialogPrimary = ((System.Windows.Controls.Button)(target));
+
+ #line 386 "..\..\..\MainWindow.xaml"
+ this.DialogPrimary.Click += new System.Windows.RoutedEventHandler(this.DialogPrimary_Click);
+
+ #line default
+ #line hidden
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/installer/obj/Debug/net48/Themes/Colors.Dark.baml b/installer/obj/Debug/net48/Themes/Colors.Dark.baml
new file mode 100644
index 0000000..3637503
Binary files /dev/null and b/installer/obj/Debug/net48/Themes/Colors.Dark.baml differ
diff --git a/installer/obj/Debug/net48/Themes/Colors.Light.baml b/installer/obj/Debug/net48/Themes/Colors.Light.baml
new file mode 100644
index 0000000..c7067f2
Binary files /dev/null and b/installer/obj/Debug/net48/Themes/Colors.Light.baml differ
diff --git a/installer/obj/Debug/net48/Themes/Controls.baml b/installer/obj/Debug/net48/Themes/Controls.baml
new file mode 100644
index 0000000..91e3ed8
Binary files /dev/null and b/installer/obj/Debug/net48/Themes/Controls.baml differ
diff --git a/installer/obj/Release/net48/AeroMC-Setup.exe b/installer/obj/Release/net48/AeroMC-Setup.exe
index a453d30..3af7274 100644
Binary files a/installer/obj/Release/net48/AeroMC-Setup.exe and b/installer/obj/Release/net48/AeroMC-Setup.exe differ
diff --git a/installer/obj/Release/net48/AeroMCSetup.AssemblyInfo.cs b/installer/obj/Release/net48/AeroMCSetup.AssemblyInfo.cs
index e998462..ca6797b 100644
--- a/installer/obj/Release/net48/AeroMCSetup.AssemblyInfo.cs
+++ b/installer/obj/Release/net48/AeroMCSetup.AssemblyInfo.cs
@@ -14,11 +14,11 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright (c) M_Viper. Alle Rechte vorbehalten.")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("Installiert AeroMC")]
-[assembly: System.Reflection.AssemblyFileVersionAttribute("1.1.5.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.1.5")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.1.6.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.1.6")]
[assembly: System.Reflection.AssemblyProductAttribute("AeroMC Setup")]
[assembly: System.Reflection.AssemblyTitleAttribute("AeroMC Setup")]
-[assembly: System.Reflection.AssemblyVersionAttribute("1.1.5.0")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.1.6.0")]
[assembly: System.Resources.NeutralResourcesLanguageAttribute("de-DE")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.
diff --git a/installer/obj/Release/net48/AeroMCSetup.AssemblyInfoInputs.cache b/installer/obj/Release/net48/AeroMCSetup.AssemblyInfoInputs.cache
index 8f7babd..84ac2d8 100644
--- a/installer/obj/Release/net48/AeroMCSetup.AssemblyInfoInputs.cache
+++ b/installer/obj/Release/net48/AeroMCSetup.AssemblyInfoInputs.cache
@@ -1 +1 @@
-6fa3eb63bf9e7c9a77cca67d608dff49330e3a93e70e18548b24192d4ef82422
+5b6f28fb41c3f0e5fe29f9489cfc618a7d6593efb71d420030e4a1d4fdb4066e
diff --git a/installer/obj/project.assets.json b/installer/obj/project.assets.json
index c3d359f..5b82f51 100644
--- a/installer/obj/project.assets.json
+++ b/installer/obj/project.assets.json
@@ -418,7 +418,7 @@
"C:\\Users\\Viper\\.nuget\\packages\\": {}
},
"project": {
- "version": "1.1.5",
+ "version": "1.1.6",
"restore": {
"projectUniqueName": "C:\\Users\\Viper\\Desktop\\AeroMC-Launcher\\installer\\AeroMCSetup.csproj",
"projectName": "AeroMC-Setup",
diff --git a/installer/obj/project.nuget.cache b/installer/obj/project.nuget.cache
index ea9e1f9..6681428 100644
--- a/installer/obj/project.nuget.cache
+++ b/installer/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "za8GIOA75zI=",
+ "dgSpecHash": "lJiGEWCFg6M=",
"success": true,
"projectFilePath": "C:\\Users\\Viper\\Desktop\\AeroMC-Launcher\\installer\\AeroMCSetup.csproj",
"expectedPackageFiles": [
diff --git a/package-lock.json b/package-lock.json
index 9cd6f14..2ff18af 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "aeromc",
- "version": "1.1.5",
+ "version": "1.1.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "aeromc",
- "version": "1.1.5",
+ "version": "1.1.6",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"@xhayper/discord-rpc": "^1.3.4",
@@ -15,6 +15,7 @@
"loopback-capture": "^3.0.2",
"node-window-manager": "^2.2.4",
"skinview3d": "^3.4.2",
+ "sql.js": "^1.14.2",
"undici": "^6.28.0",
"unzipper": "^0.12.5"
},
@@ -4346,6 +4347,12 @@
"license": "BSD-3-Clause",
"optional": true
},
+ "node_modules/sql.js": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.14.2.tgz",
+ "integrity": "sha512-3ZGPovObMFrdw79zrUHbfdE/DLIsy8jdNdssmMSQuRAymedU6q84asPt0kgiqrdMYlPegDItiIMfmIXzZnYFcw==",
+ "license": "MIT"
+ },
"node_modules/stat-mode": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz",
diff --git a/package.json b/package.json
index def0d9e..7c7a753 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "aeromc",
"productName": "AeroMC",
- "version": "1.1.5",
+ "version": "1.1.6",
"description": "AeroMC – Instanz-basierter Minecraft-Launcher (à la MultiMC/Prism)",
"homepage": "https://m-viper.de",
"launcherWebsite": "https://aeromc.viper.ipv64.net",
@@ -47,6 +47,7 @@
"loopback-capture": "^3.0.2",
"node-window-manager": "^2.2.4",
"skinview3d": "^3.4.2",
+ "sql.js": "^1.14.2",
"undici": "^6.28.0",
"unzipper": "^0.12.5"
}