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 AeroMC – Instanzliste mit Seitenleiste und Skin-Vorschau @@ -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-Design: Nachtblau mit Cyan-Verläufen wie die Webseite
AeroMC
Nachtblau, Cyan-Verläufe, runde Knöpfe – wie die Webseite
Nachtlila-Design: wie AeroMC in dunklem Lila
Nachtlila
wie AeroMC, nur in dunklem Lila
Minecraft-Design: Block-Optik mit Grasnarbe, Erde und Stein-Knöpfen
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" }