Upload via GUI (19 Dateien)

This commit is contained in:
Git Manager GUI
2026-08-01 07:03:08 +02:00
parent fb6da6562e
commit ab502f44ef
19 changed files with 10983 additions and 21 deletions
+514
View File
@@ -0,0 +1,514 @@
<!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">Instanz hinzufügen</button>
<button id="btn-import" class="tbtn" data-ic="import" title="Instanz aus .zip importieren">Importieren</button>
<button id="btn-modpack" class="tbtn" data-ic="package" title="Modrinth-Modpack (.mrpack)">Modpack</button>
<button id="btn-open-dir" class="tbtn" data-ic="folder" title="Ordner öffnen">Ordner</button>
<span class="tbsep"></span>
<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…" autocomplete="off" />
</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>
<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">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>
<label class="field">
<span>Zusätzliche JVM-Argumente</span>
<input id="f-extra-args" type="text" placeholder="z. B. -XX:+UseG1GC" />
</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">
<button class="snav on" data-pane="pane-launcher">Launcher</button>
<button class="snav" data-pane="pane-minecraft">Minecraft</button>
<button class="snav" data-pane="pane-java">Java</button>
<button class="snav" data-pane="pane-commands">Befehle</button>
<button class="snav" data-pane="pane-external">Externe Programme</button>
<button class="snav" data-pane="pane-proxy">Proxy</button>
<button class="snav" data-pane="pane-accounts">Konten</button>
<button class="snav" data-pane="pane-info">Info</button>
</nav>
<div class="settings-content">
<div id="pane-launcher" class="spane">
<h4>Launcher</h4>
<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>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>
<label class="field">
<span>Skin-Hintergrund <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>
<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>
<div id="pane-minecraft" class="spane hidden">
<h4>Minecraft</h4>
<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>
</div>
<div id="pane-java" class="spane hidden">
<h4>Java</h4>
<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>
</div>
<div id="pane-commands" class="spane hidden">
<h4>Benutzerdefinierte Befehle</h4>
<label class="field">
<span>Pre-Launch-Befehl (global)</span>
<input id="s-global-pre" type="text" placeholder="läuft vor jedem Spielstart" />
</label>
<label class="field">
<span>Post-Exit-Befehl (global)</span>
<input id="s-global-post" type="text" placeholder="läuft nach jedem Beenden" />
</label>
<small class="hint">Gilt für alle Instanzen. Eine Instanz mit eigenem Befehl (im Bearbeiten-Dialog) hat Vorrang.</small>
</div>
<div id="pane-external" class="spane hidden">
<h4>Externe Programme</h4>
<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 (z. B. GPU-Auswahl). Java-Pfad und Argumente werden automatisch angehängt.</small>
</div>
<div id="pane-proxy" class="spane hidden">
<h4>Proxy</h4>
<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>
</div>
<div id="pane-accounts" class="spane hidden">
<h4>Konten</h4>
<p class="hint">Microsoft-Konten verwaltest du über den Konten-Button in der Toolbar.</p>
<button id="s-open-accounts" class="btn">Konten öffnen</button>
</div>
<div id="pane-info" class="spane hidden">
<h4>Über AeroMC</h4>
<div class="about-brand">
<img src="assets/logo.png" alt="" class="about-logo" />
<div>
<div class="about-name">AeroMC</div>
<div class="hint">Instanz-basierter Minecraft-Launcher</div>
</div>
</div>
<div id="s-appinfo" class="appinfo"></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>
<!-- ===================== 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">
<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-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 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). Mehrere Konten sind möglich das aktive wird zum Spielen verwendet.</p>
</div>
<div class="modal-foot">
<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>
</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 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>
<!-- 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>