1249 lines
60 KiB
HTML
1249 lines
60 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta http-equiv="Content-Security-Policy"
|
||
content="default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; img-src 'self' data: https:; connect-src 'self';" />
|
||
<title>AeroMC</title>
|
||
<link rel="stylesheet" href="styles.css" />
|
||
</head>
|
||
<body>
|
||
<!-- Obere Werkzeugleiste (MultiMC-Stil: Icon + Text) -->
|
||
<header class="toolbar">
|
||
<button id="btn-new" class="tbtn" data-ic="plus" title="Neue Instanz (Strg+N)">Instanz hinzufügen</button>
|
||
<button id="btn-import" class="tbtn" data-ic="import" title="Instanzen importieren">Importieren</button>
|
||
<button id="btn-open-dir" class="tbtn" data-ic="folder" title="Ordner öffnen">Ordner</button>
|
||
<span class="tbsep"></span>
|
||
<button id="btn-bedrock" class="tbtn" data-ic="blocks" title="Minecraft Bedrock (Windows-Ausgabe)">Bedrock</button>
|
||
<button id="btn-console" class="tbtn" data-ic="terminal" title="Konsole / Log">Konsole</button>
|
||
<button id="btn-skin" class="tbtn" data-ic="user" title="Skin-Hintergrund ein/aus">Skin</button>
|
||
<span class="tbgrow"></span>
|
||
<div class="search-wrap">
|
||
<input id="search" type="text" placeholder="Suchen… (Strg+F)" autocomplete="off" title="Strg+F fokussiert die Suche" />
|
||
</div>
|
||
<button id="btn-account" class="tbtn acct-btn" title="Microsoft-Konto"><span id="account-av" class="acct-av"></span><span id="account-name">Konten</span></button>
|
||
<button id="btn-settings" class="tbtn" data-ic="settings" title="Einstellungen">Optionen</button>
|
||
</header>
|
||
|
||
<!-- Arbeitsbereich: Instanzliste + rechte Aktionsleiste -->
|
||
<main class="workspace">
|
||
<div class="list-area">
|
||
<div id="grid" class="list"></div>
|
||
<section id="empty" class="empty hidden">
|
||
<h2>Noch keine Instanzen</h2>
|
||
<p>Lege deine erste Minecraft-Instanz an – eigene Version, eigene Mods.</p>
|
||
<button id="btn-new-2" class="btn btn-primary btn-lg" data-ic="plus">Erste Instanz anlegen</button>
|
||
</section>
|
||
</div>
|
||
|
||
<aside id="inst-panel" class="side">
|
||
<div id="p-empty" class="side-empty">Keine Instanz ausgewählt</div>
|
||
<div id="p-content" class="hidden">
|
||
<div id="p-icon" class="side-ico">🌱</div>
|
||
<div id="p-name" class="side-title">Instanz</div>
|
||
<div id="p-groupline" class="side-grp">Gruppe ändern</div>
|
||
<div class="hr"></div>
|
||
<button id="p-play" class="sbtn play">Starten</button>
|
||
<button id="p-offline" class="sbtn">Offline starten</button>
|
||
<div class="hr"></div>
|
||
<button id="p-edit" class="sbtn">Instanz bearbeiten</button>
|
||
<button id="p-notes" class="sbtn">Notizen bearbeiten</button>
|
||
<button id="p-mods" class="sbtn">Mods anzeigen</button>
|
||
<button id="p-worlds" class="sbtn">Welten verwalten</button>
|
||
<button id="p-screens" class="sbtn">Bildschirmfotos verwalten</button>
|
||
<button id="p-modpack" class="sbtn hidden">Modpack aktualisieren</button>
|
||
<button id="p-logs" class="sbtn">Logdateien ansehen</button>
|
||
<button id="p-servers" class="sbtn">Server verwalten</button>
|
||
<div class="hr"></div>
|
||
<button id="p-mcfolder" class="sbtn">Minecraft-Ordner</button>
|
||
<button id="p-configfolder" class="sbtn">Konfigurations-Ordner</button>
|
||
<button id="p-instfolder" class="sbtn">Instanz-Ordner</button>
|
||
<div class="hr"></div>
|
||
<button id="p-shortcut" class="sbtn">Verknüpfung erstellen</button>
|
||
<button id="p-export" class="sbtn">Instanz exportieren</button>
|
||
<button id="p-delete" class="sbtn del" title="Entf">Löschen</button>
|
||
<button id="p-copy" class="sbtn">Instanz kopieren</button>
|
||
</div>
|
||
</aside>
|
||
</main>
|
||
|
||
<!-- Statusleiste (zwei Zeilen, MultiMC-Stil) -->
|
||
<footer class="statusbar">
|
||
<div class="st-row"><span id="status-left">Bereit</span><span id="status-right"></span></div>
|
||
<div class="st-row st-row2">
|
||
<span id="status-play">Keine Instanz ausgewählt</span>
|
||
<span id="status-auth" class="auth-warn hidden" title="Erneut prüfen"></span>
|
||
<span id="status-total"></span>
|
||
</div>
|
||
</footer>
|
||
|
||
<!-- ===================== Dialog: Neue/Bearbeiten Instanz ===================== -->
|
||
<div id="modal-instance" class="modal hidden">
|
||
<div class="modal-card">
|
||
<div class="modal-head">
|
||
<h3 id="instance-modal-title">Neue Instanz</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<label class="field">
|
||
<span>Name</span>
|
||
<input id="f-name" type="text" placeholder="z. B. Survival 1.21" />
|
||
</label>
|
||
|
||
<label class="field">
|
||
<span>Gruppe <small class="opt">(optional)</small></span>
|
||
<input id="f-group" type="text" list="group-list" placeholder="z. B. Modpacks, Server, Tests" autocomplete="off" />
|
||
<datalist id="group-list"></datalist>
|
||
</label>
|
||
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>Minecraft-Version</span>
|
||
<div class="version-row">
|
||
<select id="f-version-type">
|
||
<option value="release">Releases</option>
|
||
<option value="snapshot">Snapshots</option>
|
||
<option value="all">Alle</option>
|
||
</select>
|
||
<select id="f-version"></select>
|
||
</div>
|
||
<small id="f-version-hint" class="hint">Lade Versionsliste …</small>
|
||
</label>
|
||
<label class="field field-icon">
|
||
<span>Icon</span>
|
||
<select id="f-icon"></select>
|
||
<div id="f-icon-grid" class="icon-grid"></div>
|
||
<div class="icon-custom">
|
||
<span id="f-icon-preview" class="icon-preview hidden"></span>
|
||
<button type="button" id="f-pick-image" class="btn btn-mini">🖼 Bild…</button>
|
||
<button type="button" id="f-clear-image" class="btn btn-mini hidden">✕</button>
|
||
</div>
|
||
</label>
|
||
</div>
|
||
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>Mod-Loader</span>
|
||
<select id="f-loader">
|
||
<option value="vanilla">Vanilla (ohne Loader)</option>
|
||
<option value="fabric">Fabric</option>
|
||
<option value="forge">Forge</option>
|
||
<option value="neoforge">NeoForge</option>
|
||
<option value="quilt">Quilt</option>
|
||
</select>
|
||
</label>
|
||
<label class="field">
|
||
<span>Loader-Version <small class="opt">(optional)</small></span>
|
||
<select id="f-loader-version"><option value="">neueste (empfohlen)</option></select>
|
||
<small id="f-loader-hint" class="hint"></small>
|
||
</label>
|
||
</div>
|
||
|
||
<label class="field">
|
||
<span>Notizen <small class="opt">(optional)</small></span>
|
||
<textarea id="f-notes" rows="2" placeholder="Modliste, Server-IP, To-dos …"></textarea>
|
||
</label>
|
||
|
||
<!-- erweiterte Java-Einstellungen nur im Bearbeiten-Modus sichtbar -->
|
||
<fieldset id="f-advanced" class="advanced hidden">
|
||
<legend>Java (nur diese Instanz – leer = globale Einstellung)</legend>
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>RAM min. (MB)</span>
|
||
<input id="f-min-mem" type="number" min="512" step="256" placeholder="global" />
|
||
</label>
|
||
<label class="field">
|
||
<span>RAM max. (MB)</span>
|
||
<input id="f-max-mem" type="number" min="512" step="256" placeholder="global" />
|
||
</label>
|
||
</div>
|
||
<small id="f-mem-hint" class="hint"></small>
|
||
<label class="field">
|
||
<span>Java (java.exe)</span>
|
||
<div class="path-row">
|
||
<input id="f-java" type="text" placeholder="leer = globale Einstellung bzw. automatisch" />
|
||
<button id="f-java-pick" class="btn" type="button">Wählen…</button>
|
||
</div>
|
||
<div class="path-row">
|
||
<select id="f-java-detected"><option value="">– gefundene Java-Installationen –</option></select>
|
||
</div>
|
||
<small id="f-java-hint" class="hint"></small>
|
||
</label>
|
||
<label class="field">
|
||
<span>Zusätzliche JVM-Argumente</span>
|
||
<div class="path-row">
|
||
<input id="f-extra-args" type="text" placeholder="z. B. -XX:+UseG1GC" />
|
||
<button id="f-extra-args-aikar" class="btn btn-mini" type="button"
|
||
title="Fügt eine bewährte Sammlung von Garbage-Collector-Flags ein (bekannt als „Aikar's Flags"), die bei größeren Modpacks Ruckler durch Garbage Collection reduzieren kann.">GC-Flags einfügen</button>
|
||
</div>
|
||
</label>
|
||
<label class="field">
|
||
<span>Pre-Launch-Befehl <small class="opt">(läuft vor dem Start)</small></span>
|
||
<input id="f-prelaunch" type="text" placeholder="z. B. echo Start >> spielstart.log" />
|
||
</label>
|
||
<label class="field">
|
||
<span>Post-Exit-Befehl <small class="opt">(nach dem Beenden)</small></span>
|
||
<input id="f-postexit" type="text" placeholder="optional" />
|
||
</label>
|
||
</fieldset>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button class="btn" data-close>Abbrechen</button>
|
||
<button id="btn-save-instance" class="btn btn-primary">Speichern</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Einstellungen ===================== -->
|
||
<div id="modal-settings" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3>Einstellungen</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body settings-body">
|
||
<nav class="settings-nav" aria-label="Einstellungsbereiche">
|
||
<div class="settings-nav-label">Bereiche</div>
|
||
<button class="snav on" data-pane="pane-general">Allgemein</button>
|
||
<button class="snav" data-pane="pane-appearance">Darstellung</button>
|
||
<button class="snav" data-pane="pane-minecraft">Spiel</button>
|
||
<button class="snav" data-pane="pane-start">Start & Java</button>
|
||
<button class="snav" data-pane="pane-network">Netzwerk</button>
|
||
<button class="snav" data-pane="pane-accounts">Konten</button>
|
||
<button class="snav" data-pane="pane-backup">Backup</button>
|
||
<button class="snav" data-pane="pane-info">Info</button>
|
||
</nav>
|
||
<div class="settings-content">
|
||
<div id="pane-general" class="spane">
|
||
<div class="settings-hero">
|
||
<h4>Allgemein</h4>
|
||
<p>Globale Launcher-Optionen, Instanzverwaltung und sichtbare Bereiche.</p>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card">
|
||
<h5>Oberfläche</h5>
|
||
<label class="field">
|
||
<span>Design</span>
|
||
<select id="s-theme">
|
||
<option value="dark">Dunkel</option>
|
||
<option value="light">Hell</option>
|
||
</select>
|
||
</label>
|
||
<label class="field">
|
||
<span>Instanzen sortieren</span>
|
||
<select id="s-sortby">
|
||
<option value="lastPlayed">Nach letztem Start</option>
|
||
<option value="name">Nach Name</option>
|
||
</select>
|
||
</label>
|
||
</section>
|
||
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Instanzen</h5>
|
||
<label class="field">
|
||
<span>Instanz-Verzeichnis</span>
|
||
<div class="path-row">
|
||
<input id="s-instances-dir" type="text" readonly />
|
||
<button id="s-pick-dir" class="btn">Wählen…</button>
|
||
</div>
|
||
<small class="hint">Hier werden alle Instanzen als Unterordner mit ihrem Namen gespeichert.</small>
|
||
</label>
|
||
</section>
|
||
|
||
<section class="settings-card">
|
||
<h5>Bereiche</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-bedrock" type="checkbox" /> <span>Bedrock-Bereich anzeigen</span>
|
||
</label>
|
||
<small id="s-bedrock-hint" class="hint">Wird automatisch ausgeblendet, wenn Bedrock nicht installiert ist.</small>
|
||
</section>
|
||
|
||
<section class="settings-card">
|
||
<h5>Benachrichtigungen</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-notify" type="checkbox" /> <span>Windows-Benachrichtigung, wenn ein großer Download oder ein Backup im Hintergrund fertig wird</span>
|
||
</label>
|
||
<small class="hint">Erscheint nur, während das Launcher-Fenster nicht im Vordergrund ist.</small>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-appearance" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Darstellung</h4>
|
||
<p>Optik der Oberfläche und visuelle Extras für die Instanzansicht.</p>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card">
|
||
<h5>Icons</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-iso3d" type="checkbox" /> <span>Block-Symbole räumlich darstellen (3D)</span>
|
||
</label>
|
||
</section>
|
||
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Skin-Hintergrund</h5>
|
||
<label class="field">
|
||
<span>Quelle <small class="opt">(optional)</small></span>
|
||
<select id="s-bgskin"><option value="">Aus</option></select>
|
||
<small class="hint">Zeigt den Minecraft-Skin des gewählten Kontos als Hintergrund im Instanzbereich.</small>
|
||
</label>
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>Pose</span>
|
||
<select id="s-bgskin-pose">
|
||
<option value="walking">Laufend</option>
|
||
<option value="standing">Stehend</option>
|
||
<option value="legends">Heldenhaft</option>
|
||
<option value="bedwars">Kampfhaltung</option>
|
||
<option value="hoverboard">Schwebend</option>
|
||
<option value="sitting">Sitzend</option>
|
||
<option value="spooky">Unheimlich</option>
|
||
</select>
|
||
</label>
|
||
<label class="field">
|
||
<span>Deckkraft: <span id="s-bgskin-val">55</span> %</span>
|
||
<input id="s-bgskin-opacity" type="range" min="10" max="100" step="5" />
|
||
</label>
|
||
</div>
|
||
<label class="checkbox-field">
|
||
<input id="s-bgskin-cycle" type="checkbox" /> <span>Bei mehreren angemeldeten Konten automatisch durchwechseln</span>
|
||
</label>
|
||
<label class="field">
|
||
<span>Wechsel alle <small class="opt">(Sekunden)</small></span>
|
||
<input id="s-bgskin-cycle-seconds" type="number" min="5" step="5" />
|
||
<small class="hint">Läuft nur, wenn 2 oder mehr Konten angemeldet sind, und beginnt nach dem letzten Konto wieder von vorn.</small>
|
||
</label>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-minecraft" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Spiel</h4>
|
||
<p>Standardwerte für neue und bestehende Instanzen ohne eigene Überschreibung.</p>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card">
|
||
<h5>Speicher</h5>
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>Standard-RAM min. (MB)</span>
|
||
<input id="s-min-mem" type="number" min="512" step="256" />
|
||
</label>
|
||
<label class="field">
|
||
<span>Standard-RAM max. (MB)</span>
|
||
<input id="s-max-mem" type="number" min="512" step="256" />
|
||
</label>
|
||
</div>
|
||
<small class="hint">Gilt für alle Instanzen ohne eigene RAM-Einstellung.</small>
|
||
</section>
|
||
|
||
<section class="settings-card">
|
||
<h5>Fenster</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-mc-max" type="checkbox" /> <span>Minecraft maximiert starten</span>
|
||
</label>
|
||
<div class="field-row">
|
||
<label class="field"><span>Fensterbreite</span><input id="s-mc-width" type="number" min="320" step="10" /></label>
|
||
<label class="field"><span>Fensterhöhe</span><input id="s-mc-height" type="number" min="240" step="10" /></label>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-start" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Start & Java</h4>
|
||
<p>Runtime-Auswahl, Startverhalten und globale Befehle für alle Instanzen.</p>
|
||
</div>
|
||
<div class="settings-grid settings-grid-stack">
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Java</h5>
|
||
<label class="field">
|
||
<span>Java (java.exe)</span>
|
||
<div class="path-row">
|
||
<input id="s-java" type="text" placeholder="leer = java aus PATH" />
|
||
<button id="s-pick-java" class="btn">Wählen…</button>
|
||
</div>
|
||
<div class="path-row">
|
||
<select id="s-java-detected"><option value="">– gefundene Java-Installationen –</option></select>
|
||
<button id="s-scan-java" class="btn">Erkennen</button>
|
||
</div>
|
||
<small id="s-java-status" class="hint">–</small>
|
||
</label>
|
||
<label class="checkbox-field">
|
||
<input id="s-auto-java" type="checkbox" /> <span>Fehlende Java-Version automatisch herunterladen</span>
|
||
</label>
|
||
<small class="hint">Holt beim Spielstart die passende Fassung von Eclipse Temurin, wenn keine geeignete Java-Installation gefunden wird. Ablage im Launcher-Ordner, rund 45 MB je Version.</small>
|
||
</section>
|
||
|
||
<section class="settings-card">
|
||
<h5>Konsole</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-console-launch" type="checkbox" /> <span>Konsole anzeigen, während das Spiel läuft</span>
|
||
</label>
|
||
<label class="checkbox-field">
|
||
<input id="s-console-autoclose" type="checkbox" /> <span>Konsole automatisch schließen, nachdem das Spiel beendet wurde</span>
|
||
</label>
|
||
<label class="checkbox-field">
|
||
<input id="s-console-crash" type="checkbox" /> <span>Konsole anzeigen, wenn das Spiel abstürzt</span>
|
||
</label>
|
||
<label class="field">
|
||
<span>Historie-Limit (Zeilen)</span>
|
||
<input id="s-console-lines" type="number" min="1000" step="1000" />
|
||
</label>
|
||
</section>
|
||
|
||
<section class="settings-card">
|
||
<h5>Globale Befehle</h5>
|
||
<label class="field">
|
||
<span>Pre-Launch-Befehl</span>
|
||
<input id="s-global-pre" type="text" placeholder="läuft vor jedem Spielstart" />
|
||
</label>
|
||
<label class="field">
|
||
<span>Post-Exit-Befehl</span>
|
||
<input id="s-global-post" type="text" placeholder="läuft nach jedem Beenden" />
|
||
</label>
|
||
<small class="hint">Instanzspezifische Befehle aus dem Bearbeiten-Dialog haben Vorrang.</small>
|
||
</section>
|
||
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Externe Programme</h5>
|
||
<label class="field">
|
||
<span>Wrapper-Befehl</span>
|
||
<input id="s-wrapper" type="text" placeholder="z. B. prime-run (leer = kein Wrapper)" />
|
||
</label>
|
||
<small class="hint">Startet Java über dieses Programm. Java-Pfad und Argumente werden automatisch angehängt.</small>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-network" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Netzwerk</h4>
|
||
<p>Verbindungsoptionen für Downloads und externe Dienste.</p>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Proxy</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-proxy-enabled" type="checkbox" /> <span>HTTP-Proxy für Downloads verwenden</span>
|
||
</label>
|
||
<div class="field-row">
|
||
<label class="field"><span>Host</span><input id="s-proxy-host" type="text" placeholder="proxy.firma.de" /></label>
|
||
<label class="field field-port"><span>Port</span><input id="s-proxy-port" type="text" placeholder="8080" /></label>
|
||
</div>
|
||
<div class="field-row">
|
||
<label class="field"><span>Benutzer <small class="opt">(optional)</small></span><input id="s-proxy-user" type="text" /></label>
|
||
<label class="field"><span>Passwort <small class="opt">(optional)</small></span><input id="s-proxy-pass" type="password" /></label>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>CurseForge</h5>
|
||
<label class="field">
|
||
<span>Eigener API-Key <small class="opt">(optional)</small></span>
|
||
<div class="path-row">
|
||
<input id="s-cf-key" type="password" placeholder="leer lassen, um die Weiterleitung unten zu nutzen" />
|
||
<button type="button" id="s-cf-test" class="btn">Prüfen</button>
|
||
</div>
|
||
<small class="hint">Schlüssel von CurseForge for Studios (Profil → Schlüssel erstellen, beginnt mit cfc_pat_…) oder klassischer Organisationsschlüssel. Nach dem Eintragen speichern. „Prüfen“ testet den Key bei CurseForge.</small>
|
||
<small id="s-cf-test-status" class="hint"></small>
|
||
</label>
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>Weiterleitung <small class="opt">(optional)</small></span>
|
||
<input id="s-cf-proxy" type="text" placeholder="https://cf.example.de" />
|
||
</label>
|
||
<label class="field">
|
||
<span>Token <small class="opt">(falls verlangt)</small></span>
|
||
<input id="s-cf-proxy-token" type="password" />
|
||
</label>
|
||
</div>
|
||
<small class="hint">Ein Server, der den Schlüssel für dich hält. Ohne beides funktionieren Modrinth-Modpacks (.mrpack) weiterhin.</small>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-accounts" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Konten</h4>
|
||
<p>Microsoft-Konten verwalten und das aktive Spielkonto wechseln.</p>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Verknüpfte Konten</h5>
|
||
<div id="s-accounts" class="account-list"></div>
|
||
<div class="path-row">
|
||
<button id="s-add-account" class="btn btn-primary">+ Konto hinzufügen</button>
|
||
<button id="s-open-accounts" class="btn">Verwaltung öffnen</button>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-backup" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Backup</h4>
|
||
<p>Alle Instanzen gesammelt als ZIP sichern, bevor größere Änderungen anstehen.</p>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Globales Backup</h5>
|
||
<small class="hint">Backups werden automatisch unter Dokumente/AeroMC Launcher/Backups gespeichert. Instanzen und Launcher-Einstellungen werden gesichert. Konten und Tokens werden nicht mitgesichert.</small>
|
||
<div class="path-row" style="margin-top:14px">
|
||
<button id="s-backup-global" class="btn btn-primary">Backup erstellen</button>
|
||
<span id="s-backup-status" class="hint">Noch kein Backup erstellt.</span>
|
||
</div>
|
||
<div id="s-backup-progress" class="backup-progress hidden" aria-hidden="true">
|
||
<div class="backup-progress-bar"><div id="s-backup-progress-fill" class="backup-progress-fill"></div></div>
|
||
<div id="s-backup-progress-text" class="backup-progress-text hint">0 %</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Automatisch sichern</h5>
|
||
<label class="checkbox-field">
|
||
<input id="s-autobackup" type="checkbox" /> <span>Sicherungen nach Zeitplan erstellen</span>
|
||
</label>
|
||
<div class="field-row">
|
||
<label class="field">
|
||
<span>Wie oft</span>
|
||
<select id="s-autobackup-every">
|
||
<option value="daily">Täglich</option>
|
||
<option value="weekly">Wöchentlich</option>
|
||
</select>
|
||
</label>
|
||
<label class="field">
|
||
<span>Wie viele behalten</span>
|
||
<input id="s-autobackup-keep" type="number" min="1" max="50" />
|
||
</label>
|
||
</div>
|
||
<label class="checkbox-field">
|
||
<input id="s-autobackup-launch" type="checkbox" /> <span>Zusätzlich vor jedem Spielstart sichern</span>
|
||
</label>
|
||
<small class="hint">Eine Sicherung umfasst <em>alle</em> Instanzen und kann je nach Umfang einige Minuten dauern. Vor dem Spielstart wird sie abgewartet – der Start verzögert sich entsprechend. Ältere automatische Sicherungen werden gelöscht, sobald die eingestellte Anzahl überschritten ist.</small>
|
||
<small id="s-autobackup-last" class="hint">Noch keine automatische Sicherung.</small>
|
||
</section>
|
||
|
||
<section class="settings-card settings-card-wide">
|
||
<h5>Wiederherstellen</h5>
|
||
<small class="hint">Wähle ein Backup aus Dokumente/AeroMC Launcher/Backups aus. Achtung: Alle vorhandenen Instanzen werden beim Wiederherstellen mit dem Inhalt des Backups überschrieben. Launcher-Einstellungen werden ebenfalls wiederhergestellt. Konten und Tokens bleiben unverändert.</small>
|
||
<label class="field backup-select-field">
|
||
<span>Verfügbares Backup</span>
|
||
<select id="s-restore-backup"></select>
|
||
</label>
|
||
<div class="path-row" style="margin-top:14px">
|
||
<button id="s-restore-global" class="btn">Backup wiederherstellen</button>
|
||
<span id="s-restore-status" class="hint">Noch kein Backup wiederhergestellt.</span>
|
||
</div>
|
||
<div id="s-restore-progress" class="backup-progress hidden" aria-hidden="true">
|
||
<div class="backup-progress-bar"><div id="s-restore-progress-fill" class="backup-progress-fill"></div></div>
|
||
<div id="s-restore-progress-text" class="backup-progress-text hint">0 %</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="pane-info" class="spane hidden">
|
||
<div class="settings-hero">
|
||
<h4>Info</h4>
|
||
</div>
|
||
<div class="settings-grid">
|
||
<section class="settings-card settings-card-wide info-card">
|
||
<div class="about-brand">
|
||
<img src="assets/logo.png" alt="" class="about-logo" />
|
||
<div>
|
||
<div class="about-name">AeroMC</div>
|
||
</div>
|
||
</div>
|
||
<div id="s-appinfo" class="settings-kv info-meta"></div>
|
||
<div class="info-actions">
|
||
<button id="s-check-update" class="btn">Nach Updates suchen</button>
|
||
<span id="s-update-status" class="info-status">Kein Update-Check ausgeführt.</span>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button class="btn" data-close>Schließen</button>
|
||
<button id="btn-save-settings" class="btn btn-primary">Speichern</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Bestätigung ===================== -->
|
||
<div id="modal-confirm" class="modal hidden">
|
||
<div class="modal-card modal-sm">
|
||
<div class="modal-head">
|
||
<h3 id="confirm-title">Sicher?</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p id="confirm-text"></p>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button class="btn" data-close>Abbrechen</button>
|
||
<button id="confirm-ok" class="btn btn-danger">Löschen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Eingabe-Dialog (ersetzt window.prompt, das in Electron nicht geht) -->
|
||
<div id="modal-prompt" class="modal hidden">
|
||
<div class="modal-card modal-sm">
|
||
<div class="modal-head">
|
||
<h3 id="prompt-title">Eingabe</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p id="prompt-text" class="hint"></p>
|
||
<label class="field" style="margin-top:10px">
|
||
<span id="prompt-label">Name</span>
|
||
<input id="prompt-input" type="text" autocomplete="off" />
|
||
</label>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button class="btn" data-close>Abbrechen</button>
|
||
<button id="prompt-ok" class="btn btn-primary">OK</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Mods (Modrinth) ===================== -->
|
||
<div id="modal-mods" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<div class="detail-head">
|
||
<span class="detail-icon">🧩</span>
|
||
<div>
|
||
<h3 id="m-title">Mods</h3>
|
||
<div id="m-sub" class="detail-sub"></div>
|
||
</div>
|
||
</div>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body mods-body">
|
||
<div id="m-warn" class="mods-warn hidden"></div>
|
||
|
||
<div class="mods-search">
|
||
<select id="m-art" title="Was soll gesucht werden?">
|
||
<option value="mod">Mods</option>
|
||
<option value="resourcepack">Ressourcenpakete</option>
|
||
<option value="shader">Shader</option>
|
||
</select>
|
||
<input id="m-query" type="text" placeholder="Mods durchsuchen … (z. B. Sodium, JEI, Create)" />
|
||
<button id="m-search-btn" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
|
||
<div class="mods-filters">
|
||
<select id="m-source" title="Quelle">
|
||
<option value="modrinth">Modrinth</option>
|
||
<option value="curseforge">CurseForge</option>
|
||
</select>
|
||
<select id="m-sort" title="Sortierung">
|
||
<option value="downloads">Beliebt</option>
|
||
<option value="relevance">Relevanz</option>
|
||
<option value="follows">Follower</option>
|
||
<option value="newest">Neu</option>
|
||
<option value="updated">Aktualisiert</option>
|
||
</select>
|
||
<select id="m-category" title="Kategorie">
|
||
<option value="">Alle Kategorien</option>
|
||
<option value="optimization">Optimierung</option>
|
||
<option value="utility">Werkzeuge</option>
|
||
<option value="adventure">Adventure</option>
|
||
<option value="technology">Technik</option>
|
||
<option value="magic">Magie</option>
|
||
<option value="worldgen">Weltgenerierung</option>
|
||
<option value="decoration">Dekoration</option>
|
||
<option value="storage">Lagerung</option>
|
||
<option value="food">Essen</option>
|
||
<option value="mobs">Kreaturen</option>
|
||
<option value="equipment">Ausrüstung</option>
|
||
<option value="library">Bibliothek</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="mods-tabs">
|
||
<button id="m-tab-catalog" class="mtab on">Katalog</button>
|
||
<button id="m-tab-installed" class="mtab">Installiert (<span id="m-installed-count">0</span>)</button>
|
||
</div>
|
||
|
||
<div id="m-pane-catalog">
|
||
<div id="m-results" class="mods-list"><div class="mods-empty">Lade beliebte Mods …</div></div>
|
||
<button id="m-more" class="btn btn-mini hidden">Mehr laden</button>
|
||
</div>
|
||
<div id="m-pane-installed" class="hidden">
|
||
<div class="mmc-bar">
|
||
<button id="m-add-file" class="btn btn-mini" data-ic="plus">Datei hinzufügen…</button>
|
||
<button id="m-check-updates" class="btn btn-mini">Nach Updates suchen</button>
|
||
<button id="m-apply-updates" class="btn btn-primary btn-mini hidden">Alle aktualisieren</button>
|
||
<span id="m-update-status" class="hint"></span>
|
||
</div>
|
||
<div id="m-installed" class="mods-list"><div class="mods-empty">Noch keine Mods.</div></div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="m-open-folder" class="btn" data-ic="folder">mods-Ordner</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Microsoft-Login ===================== -->
|
||
<div id="modal-login" class="modal hidden">
|
||
<div class="modal-card modal-sm">
|
||
<div class="modal-head">
|
||
<h3>Microsoft-Login</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div id="login-accounts" class="account-list"></div>
|
||
|
||
<div id="login-code" class="hidden login-code">
|
||
<p>Öffne diese Seite und gib den Code ein:</p>
|
||
<a id="login-url" class="login-link" href="#">microsoft.com/link</a>
|
||
<div id="login-usercode" class="login-usercode">– – – –</div>
|
||
<button id="login-copy" class="btn btn-mini" data-ic="copy">Code kopieren</button>
|
||
<p id="login-status" class="hint">Warte auf Bestätigung …</p>
|
||
</div>
|
||
|
||
<p id="login-hint" class="hint">Melde dich mit deinem Microsoft-Konto an (Minecraft Java Edition nötig). Das aktive Konto wird beim nächsten Start verwendet. Für zwei Konten gleichzeitig: eine Instanz starten, hier das zweite Konto aktivieren und eine weitere Instanz starten – laufende Spiele behalten ihr Konto.</p>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="login-skin" class="btn">Skin ändern…</button>
|
||
<div class="spacer"></div>
|
||
<button id="login-add" class="btn btn-primary" data-ic="plus">Konto hinzufügen</button>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Konsole / Log ===================== -->
|
||
<div id="modal-console" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3>Konsole / Log</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<pre id="console-out" class="console-out"></pre>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="console-clear" class="btn">Leeren</button>
|
||
<button id="console-copy" class="btn">Kopieren</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Welten & Ressourcenpakete ===================== -->
|
||
<div id="modal-content" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3 id="content-title">Welten & Ressourcenpakete</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="mods-columns">
|
||
<div class="mods-col">
|
||
<h4>Welten <button id="content-open-worlds" class="btn btn-mini" data-ic="folder"></button></h4>
|
||
<div id="content-worlds" class="mods-list"></div>
|
||
</div>
|
||
<div class="mods-col">
|
||
<h4>Ressourcenpakete <button id="content-open-rp" class="btn btn-mini" data-ic="folder"></button></h4>
|
||
<div id="content-rp" class="mods-list"></div>
|
||
</div>
|
||
<div class="mods-col">
|
||
<h4>Datenpakete <button id="content-open-dp" class="btn btn-mini" data-ic="folder"></button></h4>
|
||
<div id="content-dp" class="mods-list"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Screenshots ===================== -->
|
||
<div id="modal-screens" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3 id="screens-title">Screenshots</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="screens-toolbar">
|
||
<button id="screens-select-all" class="btn btn-mini">Alle auswählen</button>
|
||
<button id="screens-select-none" class="btn btn-mini">Auswahl aufheben</button>
|
||
<button id="screens-delete-sel" class="btn btn-danger btn-mini" disabled>Auswahl löschen</button>
|
||
<span id="screens-sel-hint" class="hint">Klick auf Vorschaubild zum Auswählen</span>
|
||
</div>
|
||
<div id="screens-grid" class="screens-grid"></div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="screens-open" class="btn" data-ic="folder">Ordner</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Modpack aktualisieren ===================== -->
|
||
<div id="modal-modpack" class="modal hidden">
|
||
<div class="modal-card modal-sm">
|
||
<div class="modal-head">
|
||
<h3>Modpack aktualisieren</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p id="mp-status" class="hint">Suche …</p>
|
||
<div id="mp-kern" class="crash-kern hidden"></div>
|
||
<p class="hint">Welten, Bildschirmfotos und deine Optionen bleiben unangetastet. Mods und Konfigurationsdateien des Pakets werden ersetzt; was die neue Fassung nicht mehr enthält, wird entfernt.</p>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
<button id="mp-do" class="btn btn-primary hidden">Jetzt aktualisieren</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Serverliste ===================== -->
|
||
<div id="modal-servers" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3 id="servers-title">Server</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p class="hint">Diese Liste steht in der Datei servers.dat der Instanz und erscheint im Spiel unter „Mehrspieler". Änderungen wirken erst beim nächsten Start.</p>
|
||
<div class="field-row" style="margin-top:12px">
|
||
<label class="field"><span>Name</span><input id="srv-name" type="text" placeholder="z. B. Mein Server" /></label>
|
||
<label class="field"><span>Adresse</span><input id="srv-ip" type="text" placeholder="mc.example.de oder 192.168.1.50:25566" /></label>
|
||
<button id="srv-add" class="btn btn-primary" style="align-self:flex-end">Hinzufügen</button>
|
||
</div>
|
||
<div id="srv-list" class="mods-list" style="margin-top:12px"></div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Server übertragen ===================== -->
|
||
<div id="modal-srv-copy" class="modal hidden">
|
||
<div class="modal-card modal-sm">
|
||
<div class="modal-head">
|
||
<h3>Server übertragen</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p id="srv-copy-sub" class="hint">–</p>
|
||
<div id="srv-copy-list" class="mods-list"></div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Abbrechen</button>
|
||
<button id="srv-copy-do" class="btn btn-primary">Übertragen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Skin ===================== -->
|
||
<div id="modal-skin" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3>Skin ändern</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p id="skin-konto" class="hint">–</p>
|
||
<div class="skin-vorschau">
|
||
<div class="skin-spalte">
|
||
<div class="skin-label">Aktuell</div>
|
||
<div class="skin-bild">
|
||
<img id="skin-aktuell" alt="" class="hidden" />
|
||
<span id="skin-aktuell-leer" class="hint">wird geladen …</span>
|
||
</div>
|
||
</div>
|
||
<div class="skin-spalte">
|
||
<div class="skin-label">Neu</div>
|
||
<div class="skin-bild">
|
||
<img id="skin-neu" alt="" class="hidden" />
|
||
<span id="skin-neu-leer" class="hint">noch keine Datei gewählt</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<small class="hint">Die Vorschau zeigt die Figur so, wie sie im Spiel aussieht. Die Armform wirkt sich auf die Darstellung aus.</small>
|
||
<div class="path-row" style="margin-top:12px">
|
||
<input id="skin-pfad" type="text" readonly placeholder="PNG mit 64×64 Pixeln" />
|
||
<button id="skin-pick" class="btn">Datei wählen…</button>
|
||
</div>
|
||
<label class="field" style="margin-top:10px">
|
||
<span>Armform</span>
|
||
<select id="skin-variante">
|
||
<option value="classic">Klassisch (breite Arme, Steve)</option>
|
||
<option value="slim">Schmal (Alex)</option>
|
||
</select>
|
||
</label>
|
||
<p id="skin-status" class="hint"></p>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="skin-reset" class="btn btn-danger">Auf Standard zurücksetzen</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
<button id="skin-apply" class="btn btn-primary" disabled>Skin setzen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Logdateien ===================== -->
|
||
<div id="modal-logs" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3 id="logs-title">Logdateien</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="mmc-bar">
|
||
<label class="field" style="margin:0;flex:1">
|
||
<span>Datei</span>
|
||
<select id="logs-select"></select>
|
||
</label>
|
||
<span id="logs-info" class="hint"></span>
|
||
</div>
|
||
<pre id="logs-text" class="crash-voll">Wähle eine Datei …</pre>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="logs-folder" class="btn" data-ic="folder">Ordner öffnen</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
<button id="logs-copy" class="btn btn-primary">Log kopieren</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Absturzbericht ===================== -->
|
||
<div id="modal-crash" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3>Minecraft ist abgestürzt</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p id="crash-sub" class="hint">–</p>
|
||
<div id="crash-kern" class="crash-kern"></div>
|
||
<details class="crash-details">
|
||
<summary>Vollständigen Bericht anzeigen</summary>
|
||
<pre id="crash-voll" class="crash-voll"></pre>
|
||
</details>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="crash-folder" class="btn" data-ic="folder">Ordner öffnen</button>
|
||
<button id="crash-console" class="btn">Konsole</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
<button id="crash-copy" class="btn btn-primary">Bericht kopieren</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Update ===================== -->
|
||
<div id="modal-update" class="modal hidden">
|
||
<div class="modal-card modal-sm">
|
||
<div class="modal-head">
|
||
<h3>Update verfügbar</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p class="upd-version">
|
||
<span id="upd-current" class="upd-old">–</span>
|
||
<span class="upd-arrow">→</span>
|
||
<span id="upd-new" class="upd-newv">–</span>
|
||
</p>
|
||
<p id="upd-channel" class="upd-channel hint">Update-Kanal: –</p>
|
||
<div id="upd-notes" class="upd-notes"></div>
|
||
<div id="upd-progress" class="upd-progress hidden">
|
||
<div class="upd-bar"><div id="upd-bar-fill" class="upd-bar-fill"></div></div>
|
||
<div id="upd-status" class="hint">Wird heruntergeladen …</div>
|
||
</div>
|
||
<p id="upd-hint" class="hint">Der Launcher lädt das Update herunter und startet die Installation automatisch.</p>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button class="btn" data-close>Später</button>
|
||
<button id="upd-open" class="btn btn-primary hidden">Release öffnen</button>
|
||
<button id="upd-install" class="btn btn-primary">Installieren</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Import ===================== -->
|
||
<div id="modal-import" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<h3>Importieren</h3>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="mods-tabs import-tabs">
|
||
<button id="import-tab-zip" class="mtab on" data-kind="zip">ZIP-Archiv</button>
|
||
<button id="import-tab-modpack" class="mtab" data-kind="modpack">Modpack</button>
|
||
<button id="import-tab-mc" class="mtab" data-kind="mc">Minecraft Launcher</button>
|
||
<button id="import-tab-cf" class="mtab" data-kind="cf">CurseForge</button>
|
||
<button id="import-tab-mmc" class="mtab" data-kind="mmc">MultiMC / Prism</button>
|
||
<button id="import-tab-technic" class="mtab" data-kind="technic">Technic</button>
|
||
</div>
|
||
|
||
<div id="import-pane-zip" class="import-pane">
|
||
<p class="import-copy">Importiert eine einzelne Instanz aus einem ZIP-Archiv.</p>
|
||
<p class="hint">Erkannt werden AeroMC-Exporte (instance.json) und einzelne MultiMC- oder Prism-Instanzen (instance.cfg) – letztere auch als gezippter Instanzordner. Der Launcher legt daraus automatisch eine neue Instanz an, samt Mods, Welten und Konfiguration.</p>
|
||
</div>
|
||
|
||
<div id="import-pane-modpack" class="import-pane hidden">
|
||
<p class="import-copy">Modpack aus dem Katalog installieren oder als Datei importieren.</p>
|
||
<p class="hint">Suche läuft über Modrinth. Datei-Import unterstützt zusätzlich CurseForge-ZIP (manifest.json) – dafür ist ein API-Key oder eine Weiterleitung in den Netzwerk-Einstellungen nötig.</p>
|
||
|
||
<div class="field-row" style="margin-top:12px;align-items:flex-end">
|
||
<label class="field" style="flex:1">
|
||
<span>Suche (Modrinth)</span>
|
||
<input id="mp-query" type="text" placeholder="z. B. Fabulously Optimized, Create …" autocomplete="off" />
|
||
</label>
|
||
<label class="field" style="width:140px">
|
||
<span>MC-Version <small class="opt">(opt.)</small></span>
|
||
<input id="mp-mc" type="text" placeholder="1.21.1" autocomplete="off" />
|
||
</label>
|
||
<button id="mp-search-btn" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
<div class="field-row" style="margin-top:8px">
|
||
<label class="field">
|
||
<span>Sortierung</span>
|
||
<select id="mp-sort">
|
||
<option value="relevance">Relevanz</option>
|
||
<option value="downloads">Downloads</option>
|
||
<option value="follows">Follower</option>
|
||
<option value="newest">Neu</option>
|
||
<option value="updated">Aktualisiert</option>
|
||
</select>
|
||
</label>
|
||
</div>
|
||
<div id="mp-status" class="hint" style="margin-top:8px">Gib einen Suchbegriff ein oder lasse das Feld leer für beliebte Packs.</div>
|
||
<div id="mp-results" class="mods-list" style="margin-top:10px;max-height:280px;overflow:auto"></div>
|
||
</div>
|
||
|
||
<div id="import-pane-mc" class="import-pane hidden">
|
||
<label class="field">
|
||
<span>Minecraft-Launcher-Ordner</span>
|
||
<div class="path-row">
|
||
<input id="mc-path" type="text" placeholder="z. B. C:\Users\DeinName\AppData\Roaming\.minecraft" />
|
||
<button id="mc-pick" class="btn">Wählen…</button>
|
||
<button id="mc-scan" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
<small id="mc-status" class="hint">Leer lassen nutzt automatisch den Standardpfad unter Windows.</small>
|
||
</label>
|
||
|
||
<div id="mc-result" class="hidden">
|
||
<div class="mmc-bar">
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="mc-all" type="checkbox" checked /> <span>Alle auswählen</span>
|
||
</label>
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="mc-copy" type="checkbox" checked /> <span>Spieldaten mitkopieren (Mods, Welten, Konfiguration)</span>
|
||
</label>
|
||
</div>
|
||
<div id="mc-list" class="mods-list"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="import-pane-cf" class="import-pane hidden">
|
||
<label class="field">
|
||
<span>CurseForge-Instanzen</span>
|
||
<div class="path-row">
|
||
<input id="cf-path" type="text" placeholder="z. B. C:\Users\DeinName\curseforge\minecraft\Instances" />
|
||
<button id="cf-pick" class="btn">Wählen…</button>
|
||
<button id="cf-scan" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
<small id="cf-status" class="hint">Standardpfad unter Windows: C:\Users\DeinName\curseforge\minecraft\Instances</small>
|
||
</label>
|
||
|
||
<div id="cf-result" class="hidden">
|
||
<div class="mmc-bar">
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="cf-all" type="checkbox" checked /> <span>Alle auswählen</span>
|
||
</label>
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="cf-copy" type="checkbox" checked /> <span>Spieldaten mitkopieren (Welten, Mods, Konfiguration)</span>
|
||
</label>
|
||
</div>
|
||
<div id="cf-list" class="mods-list"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="import-pane-mmc" class="import-pane hidden">
|
||
<label class="field">
|
||
<span>MultiMC- oder Prism-Ordner</span>
|
||
<div class="path-row">
|
||
<input id="mmc-path" type="text" placeholder="z. B. E:\Minecraft\MultiMC" />
|
||
<button id="mmc-pick" class="btn">Wählen…</button>
|
||
<button id="mmc-scan" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
<small id="mmc-status" class="hint">Gib den Ordner an, in dem MultiMC.exe oder PrismLauncher.exe liegt.</small>
|
||
</label>
|
||
|
||
<div id="mmc-result" class="hidden">
|
||
<div class="mmc-bar">
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="mmc-all" type="checkbox" checked /> <span>Alle auswählen</span>
|
||
</label>
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="mmc-copy" type="checkbox" checked /> <span>Spieldaten mitkopieren (Welten, Mods, Konfiguration)</span>
|
||
</label>
|
||
</div>
|
||
<div id="mmc-list" class="mods-list"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="import-pane-technic" class="import-pane hidden">
|
||
<p class="import-copy">Modpack direkt von der Technic-Plattform installieren oder eine bereits vorhandene Technic-Installation importieren.</p>
|
||
|
||
<div class="field-row" style="align-items:flex-end">
|
||
<label class="field" style="flex:1">
|
||
<span>Technic-Katalog durchsuchen</span>
|
||
<input id="tp-query" type="text" placeholder="z. B. Hexxit, Tekxit …" autocomplete="off" />
|
||
</label>
|
||
<button id="tp-search-btn" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
<div id="tp-status" class="hint" style="margin-top:8px">Gib einen Suchbegriff ein oder lasse das Feld leer für beliebte Packs.</div>
|
||
<div id="tp-results" class="mods-list" style="margin-top:10px;max-height:220px;overflow:auto"></div>
|
||
|
||
<div class="modal-sep" style="margin:16px 0"></div>
|
||
|
||
<label class="field">
|
||
<span>Oder: vorhandenen Technic-Ordner importieren</span>
|
||
<div class="path-row">
|
||
<input id="technic-path" type="text" placeholder="z. B. C:\Users\DeinName\AppData\Roaming\.technic" />
|
||
<button id="technic-pick" class="btn">Wählen…</button>
|
||
<button id="technic-scan" class="btn btn-primary">Suchen</button>
|
||
</div>
|
||
<small id="technic-status" class="hint">Leer lassen nutzt automatisch den Standardpfad unter Windows (%APPDATA%\.technic).</small>
|
||
</label>
|
||
|
||
<div id="technic-result" class="hidden">
|
||
<div class="mmc-bar">
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="technic-all" type="checkbox" checked /> <span>Alle auswählen</span>
|
||
</label>
|
||
<label class="checkbox-field" style="margin:0">
|
||
<input id="technic-copy" type="checkbox" checked /> <span>Spieldaten mitkopieren (Mods, Welten, Konfiguration)</span>
|
||
</label>
|
||
</div>
|
||
<div id="technic-list" class="mods-list"></div>
|
||
<p class="hint" style="margin-top:8px">Minecraft-Version und Mod-Loader werden nach bestem Wissen aus dem Pack erkannt – bitte nach dem Import kurz prüfen, falls ein Pack ungewöhnlich aufgebaut ist.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<div id="mc-progress" class="hint hidden"></div>
|
||
<div id="mmc-progress" class="hint hidden"></div>
|
||
<div id="cf-progress" class="hint hidden"></div>
|
||
<div id="technic-progress" class="hint hidden"></div>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Abbrechen</button>
|
||
<button id="import-zip-do" class="btn btn-primary">ZIP wählen…</button>
|
||
<button id="import-modpack-do" class="btn btn-primary hidden">Modpack wählen…</button>
|
||
<button id="mc-do" class="btn btn-primary hidden" disabled>Übernehmen</button>
|
||
<button id="cf-do" class="btn btn-primary hidden" disabled>Übernehmen</button>
|
||
<button id="mmc-do" class="btn btn-primary hidden" disabled>Übernehmen</button>
|
||
<button id="technic-do" class="btn btn-primary hidden" disabled>Übernehmen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Dialog: Bedrock ===================== -->
|
||
<div id="modal-bedrock" class="modal hidden">
|
||
<div class="modal-card modal-lg">
|
||
<div class="modal-head">
|
||
<div class="detail-head">
|
||
<span class="detail-icon">🧱</span>
|
||
<div>
|
||
<h3>Minecraft Bedrock</h3>
|
||
<div id="bd-sub" class="detail-sub">Wird geprüft …</div>
|
||
</div>
|
||
</div>
|
||
<button class="modal-close" data-close>✕</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div id="bd-missing" class="mods-warn hidden">
|
||
⚠ Bedrock ist nicht installiert. Es wird über den Microsoft Store bezogen – der Launcher kann es nicht selbst installieren.
|
||
</div>
|
||
|
||
<div id="bd-content">
|
||
<div class="bd-actions">
|
||
<button id="bd-play" class="btn btn-primary btn-lg">▶ Bedrock starten</button>
|
||
<button id="bd-import" class="btn">Add-on / Welt importieren…</button>
|
||
</div>
|
||
|
||
<div class="mods-tabs">
|
||
<button class="mtab btab on" data-kind="worlds">Welten</button>
|
||
<button class="mtab btab" data-kind="resource_packs">Ressourcenpakete</button>
|
||
<button class="mtab btab" data-kind="behavior_packs">Verhaltenspakete</button>
|
||
<button class="mtab btab" data-kind="skin_packs">Skin-Pakete</button>
|
||
<button class="mtab btab" data-kind="screenshots">Bildschirmfotos</button>
|
||
</div>
|
||
|
||
<div id="bd-list" class="mods-list"></div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-foot">
|
||
<button id="bd-folder" class="btn" data-ic="folder">Ordner öffnen</button>
|
||
<div class="spacer"></div>
|
||
<button class="btn" data-close>Schließen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===================== Kontextmenü (Rechtsklick auf Instanz) ===================== -->
|
||
<div id="ctx-menu" class="ctx hidden">
|
||
<button class="ctx-item" data-act="p-edit">Symbol ändern</button>
|
||
<button class="ctx-item" data-act="p-edit">Umbenennen</button>
|
||
<button class="ctx-item" data-act="p-groupline">Gruppe ändern</button>
|
||
<div class="ctx-sep"></div>
|
||
<button class="ctx-item ctx-strong" data-act="p-play">Starten</button>
|
||
<button class="ctx-item" data-act="p-offline">Offline starten</button>
|
||
<div class="ctx-sep"></div>
|
||
<button class="ctx-item" data-act="p-edit">Instanz bearbeiten</button>
|
||
<button class="ctx-item" data-act="p-notes">Notizen bearbeiten</button>
|
||
<button class="ctx-item" data-act="p-mods">Mods anzeigen</button>
|
||
<button class="ctx-item" data-act="p-worlds">Welten verwalten</button>
|
||
<button class="ctx-item" data-act="p-screens">Bildschirmfotos verwalten</button>
|
||
<button class="ctx-item" data-act="p-logs">Logdateien ansehen</button>
|
||
<button class="ctx-item" data-act="p-servers">Server verwalten</button>
|
||
<div class="ctx-sep"></div>
|
||
<button class="ctx-item" data-act="p-mcfolder">Minecraft-Ordner</button>
|
||
<button class="ctx-item" data-act="p-configfolder">Konfigurations-Ordner</button>
|
||
<button class="ctx-item" data-act="p-instfolder">Instanz-Ordner</button>
|
||
<div class="ctx-sep"></div>
|
||
<button class="ctx-item" data-act="p-shortcut">Verknüpfung erstellen</button>
|
||
<button class="ctx-item" data-act="p-export">Instanz exportieren</button>
|
||
<button class="ctx-item ctx-danger" data-act="p-delete">Löschen</button>
|
||
<button class="ctx-item" data-act="p-copy">Instanz kopieren</button>
|
||
</div>
|
||
|
||
<!-- Toast -->
|
||
<div id="toast" class="toast hidden"></div>
|
||
|
||
<canvas id="skin-canvas" width="420" height="700" style="display:none"></canvas>
|
||
<script src="vendor/skinview3d.js"></script>
|
||
<script src="renderer.js"></script>
|
||
</body>
|
||
</html>
|