[{"data":1,"prerenderedAt":1321},["ShallowReactive",2],{"navigation_docs_de":3,"-de-developers-build-from-source":259,"-de-developers-build-from-source-surround":1316},[4,38,110,190,232],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":-1},"Erste Schritte","i-lucide-rocket","\u002Fde\u002Fgetting-started","de\u002F1.getting-started\u002Findex",[10,13,18,23,28,33],{"title":11,"path":7,"stem":8,"icon":12},"Übersicht","i-lucide-layout-grid",{"title":14,"path":15,"stem":16,"icon":17},"Installation","\u002Fde\u002Fgetting-started\u002Finstallation","de\u002F1.getting-started\u002F01.installation","i-lucide-download",{"title":19,"path":20,"stem":21,"icon":22},"Anmelden","\u002Fde\u002Fgetting-started\u002Fsign-in","de\u002F1.getting-started\u002F02.sign-in","i-lucide-log-in",{"title":24,"path":25,"stem":26,"icon":27},"Deine erste Instanz","\u002Fde\u002Fgetting-started\u002Ffirst-instance","de\u002F1.getting-started\u002F03.first-instance","i-lucide-play",{"title":29,"path":30,"stem":31,"icon":32},"Android: APK installieren","\u002Fde\u002Fgetting-started\u002Fandroid","de\u002F1.getting-started\u002F04.android","i-lucide-smartphone",{"title":34,"path":35,"stem":36,"icon":37},"iPhone\u002FiPad: mit AltStore\u002FSideStore installieren","\u002Fde\u002Fgetting-started\u002Fiphone-ipad","de\u002F1.getting-started\u002F05.iphone-ipad","i-lucide-tablet-smartphone",{"title":39,"icon":40,"path":41,"stem":42,"children":43,"page":-1},"Launcher","i-lucide-app-window","\u002Fde\u002Flauncher","de\u002F2.launcher\u002Findex",[44,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":11,"path":41,"stem":42,"icon":12},{"title":46,"path":47,"stem":48,"icon":49},"Instanzen","\u002Fde\u002Flauncher\u002Finstances","de\u002F2.launcher\u002F01.instances","i-lucide-boxes",{"title":51,"path":52,"stem":53,"icon":54},"Modloader","\u002Fde\u002Flauncher\u002Fmod-loaders","de\u002F2.launcher\u002F02.mod-loaders","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Mods","\u002Fde\u002Flauncher\u002Fmods","de\u002F2.launcher\u002F03.mods","i-lucide-puzzle",{"title":61,"path":62,"stem":63,"icon":64},"Modpacks","\u002Fde\u002Flauncher\u002Fmodpacks","de\u002F2.launcher\u002F04.modpacks","i-lucide-package",{"title":66,"path":67,"stem":68,"icon":69},"Modpacks teilen","\u002Fde\u002Flauncher\u002Fshare-modpacks","de\u002F2.launcher\u002F05.share-modpacks","i-lucide-share-2",{"title":71,"path":72,"stem":73,"icon":74},"Aus anderen Launchern importieren","\u002Fde\u002Flauncher\u002Fimport","de\u002F2.launcher\u002F06.import","i-lucide-folder-input",{"title":76,"path":77,"stem":78,"icon":79},"Clips & Screenshots","\u002Fde\u002Flauncher\u002Fclips","de\u002F2.launcher\u002F07.clips","i-lucide-clapperboard",{"title":81,"path":82,"stem":83,"icon":84},"Freunde & Chat","\u002Fde\u002Flauncher\u002Fsocial","de\u002F2.launcher\u002F08.social","i-lucide-messages-square",{"title":86,"path":87,"stem":88,"icon":89},"Erfolge","\u002Fde\u002Flauncher\u002Fachievements","de\u002F2.launcher\u002F09.achievements","i-lucide-trophy",{"title":91,"path":92,"stem":93,"icon":94},"Skins & Umhänge","\u002Fde\u002Flauncher\u002Fwardrobe","de\u002F2.launcher\u002F10.wardrobe","i-lucide-shirt",{"title":96,"path":97,"stem":98,"icon":99},"Einstellungen","\u002Fde\u002Flauncher\u002Fsettings","de\u002F2.launcher\u002F11.settings","i-lucide-settings",{"title":101,"path":102,"stem":103,"icon":104},"Updates","\u002Fde\u002Flauncher\u002Fupdates","de\u002F2.launcher\u002F12.updates","i-lucide-refresh-cw",{"title":106,"path":107,"stem":108,"icon":109},"Server","\u002Fde\u002Flauncher\u002Fservers","de\u002F2.launcher\u002F13.servers","i-lucide-server",{"title":111,"icon":112,"path":113,"stem":114,"children":115,"page":-1},"TRS Client","i-lucide-blocks","\u002Fde\u002Fclient","de\u002F3.client\u002Findex",[116,117,121,126,131,136,141,146,151,156,160,165,170,175,180,185],{"title":11,"path":113,"stem":114,"icon":12},{"title":118,"path":119,"stem":120,"icon":112},"Was ist der TRS Client?","\u002Fde\u002Fclient\u002Foverview","de\u002F3.client\u002F01.overview",{"title":122,"path":123,"stem":124,"icon":125},"TRS-Menü und HUD-Editor","\u002Fde\u002Fclient\u002Fmenu-and-hud-editor","de\u002F3.client\u002F02.menu-and-hud-editor","i-lucide-layout-dashboard",{"title":127,"path":128,"stem":129,"icon":130},"Leistung und FPS","\u002Fde\u002Fclient\u002Fperformance","de\u002F3.client\u002F03.performance","i-lucide-gauge",{"title":132,"path":133,"stem":134,"icon":135},"PvP-Module","\u002Fde\u002Fclient\u002Fpvp","de\u002F3.client\u002F04.pvp","i-lucide-swords",{"title":137,"path":138,"stem":139,"icon":140},"Zoom, Freelook und Toggle-Sprint","\u002Fde\u002Fclient\u002Fzoom-and-freelook","de\u002F3.client\u002F05.zoom-and-freelook","i-lucide-zoom-in",{"title":142,"path":143,"stem":144,"icon":145},"Minimap, Wegpunkte und Weltkarte","\u002Fde\u002Fclient\u002Fminimap-and-world-map","de\u002F3.client\u002F06.minimap-and-world-map","i-lucide-map",{"title":147,"path":148,"stem":149,"icon":150},"Redstone-Werkzeuge","\u002Fde\u002Fclient\u002Fredstone-tools","de\u002F3.client\u002F07.redstone-tools","i-lucide-zap",{"title":152,"path":153,"stem":154,"icon":155},"Schaltungs-Bibliothek","\u002Fde\u002Fclient\u002Fcircuit-library","de\u002F3.client\u002F08.circuit-library","i-lucide-cpu",{"title":157,"path":158,"stem":159,"icon":94},"Emotes, Umhänge, Garderobe und Konten","\u002Fde\u002Fclient\u002Femotes-and-capes","de\u002F3.client\u002F09.emotes-and-capes",{"title":161,"path":162,"stem":163,"icon":164},"Screenshots, Clips und Panoramen","\u002Fde\u002Fclient\u002Fscreenshots-and-clips","de\u002F3.client\u002F10.screenshots-and-clips","i-lucide-camera",{"title":166,"path":167,"stem":168,"icon":169},"Welt-Notizen","\u002Fde\u002Fclient\u002Fnotes","de\u002F3.client\u002F11.notes","i-lucide-notebook-pen",{"title":171,"path":172,"stem":173,"icon":174},"Chat und Komfort","\u002Fde\u002Fclient\u002Fchat-and-comfort","de\u002F3.client\u002F12.chat-and-comfort","i-lucide-message-square",{"title":176,"path":177,"stem":178,"icon":179},"Sozial im Spiel","\u002Fde\u002Fclient\u002Fsocial-in-game","de\u002F3.client\u002F13.social-in-game","i-lucide-users",{"title":181,"path":182,"stem":183,"icon":184},"Standard-Tasten","\u002Fde\u002Fclient\u002Fkeybinds","de\u002F3.client\u002F14.keybinds","i-lucide-keyboard",{"title":186,"path":187,"stem":188,"icon":189},"Welt für Freunde hosten","\u002Fde\u002Fclient\u002Fworld-hosting","de\u002F3.client\u002F15.world-hosting","i-lucide-globe",{"title":191,"icon":192,"path":193,"stem":194,"children":195,"page":-1},"Hilfe","i-lucide-life-buoy","\u002Fde\u002Fhelp","de\u002F4.help\u002Findex",[196,197,202,207,212,217,222,227],{"title":11,"path":193,"stem":194,"icon":12},{"title":198,"path":199,"stem":200,"icon":201},"Absturz-Helfer","\u002Fde\u002Fhelp\u002Fcrash-helper","de\u002F4.help\u002F01.crash-helper","i-lucide-heart-pulse",{"title":203,"path":204,"stem":205,"icon":206},"Häufige Probleme","\u002Fde\u002Fhelp\u002Fcommon-problems","de\u002F4.help\u002F02.common-problems","i-lucide-circle-help",{"title":208,"path":209,"stem":210,"icon":211},"Java & Arbeitsspeicher","\u002Fde\u002Fhelp\u002Fjava","de\u002F4.help\u002F03.java","i-lucide-coffee",{"title":213,"path":214,"stem":215,"icon":216},"Linux","\u002Fde\u002Fhelp\u002Flinux","de\u002F4.help\u002F04.linux","i-lucide-terminal",{"title":218,"path":219,"stem":220,"icon":221},"Logs","\u002Fde\u002Fhelp\u002Flogs","de\u002F4.help\u002F05.logs","i-lucide-scroll-text",{"title":223,"path":224,"stem":225,"icon":226},"Bug melden","\u002Fde\u002Fhelp\u002Freport-a-bug","de\u002F4.help\u002F06.report-a-bug","i-lucide-bug",{"title":228,"path":229,"stem":230,"icon":231},"Datenschutz","\u002Fde\u002Fhelp\u002Fprivacy","de\u002F4.help\u002F07.privacy","i-lucide-shield-check",{"title":233,"icon":234,"path":235,"stem":236,"children":237,"page":-1},"Entwickler","i-lucide-code-xml","\u002Fde\u002Fdevelopers","de\u002F5.developers\u002Findex",[238,239,244,249,254],{"title":11,"path":235,"stem":236,"icon":12},{"title":240,"path":241,"stem":242,"icon":243},"Aus dem Quellcode bauen","\u002Fde\u002Fdevelopers\u002Fbuild-from-source","de\u002F5.developers\u002F01.build-from-source","i-lucide-hammer",{"title":245,"path":246,"stem":247,"icon":248},"Mitmachen","\u002Fde\u002Fdevelopers\u002Fcontributing","de\u002F5.developers\u002F02.contributing","i-lucide-git-pull-request",{"title":250,"path":251,"stem":252,"icon":253},"Übersetzen","\u002Fde\u002Fdevelopers\u002Ftranslating","de\u002F5.developers\u002F03.translating","i-lucide-languages",{"title":255,"path":256,"stem":257,"icon":258},"Öffentliche API","\u002Fde\u002Fdevelopers\u002Fpublic-api","de\u002F5.developers\u002F04.public-api","i-lucide-braces",{"id":260,"title":240,"body":261,"description":1309,"extension":1310,"links":1311,"meta":1312,"navigation":1313,"path":241,"seo":1314,"stem":242,"__hash__":1315},"docs_de\u002Fde\u002F5.developers\u002F01.build-from-source.md",{"type":262,"value":263,"toc":1296},"minimark",[264,276,281,375,394,398,606,610,691,699,707,711,714,794,797,874,885,929,933,984,991,1009,1013,1018,1028,1031,1152,1158,1203,1220,1224,1237,1287,1292],[265,266,267,268,275],"p",{},"Der TRS Launcher ist eine ",[269,270,274],"a",{"href":271,"rel":272},"https:\u002F\u002Ftauri.app",[273],"nofollow","Tauri-2","-App: Ein Rust-Kern erledigt die Arbeit, eine Nuxt-4-Single-Page-App\nist die Oberfläche. Der TRS Client im Spiel ist ein eigenes Gradle-Projekt im selben Repository.",[277,278,280],"h2",{"id":279},"was-wo-liegt","Was wo liegt",[282,283,284,297],"table",{},[285,286,287],"thead",{},[288,289,290,294],"tr",{},[291,292,293],"th",{},"Ordner",[291,295,296],{},"Was es ist",[298,299,300,312,322,335,345,355,365],"tbody",{},[288,301,302,309],{},[303,304,305],"td",{},[306,307,308],"code",{},"app\u002F",[303,310,311],{},"Nuxt-4-Frontend (SPA, kein SSR)",[288,313,314,319],{},[303,315,316],{},[306,317,318],{},"src-tauri\u002Fsrc\u002F",[303,320,321],{},"Tauri-App: Befehle, Aufgabenverwaltung, Fehler-Umsetzung, Plugins",[288,323,324,329],{},[303,325,326],{},[306,327,328],{},"src-tauri\u002Fcrates\u002Fcore\u002F",[303,330,331,334],{},[306,332,333],{},"trs-core",": der Launcher-Kern, unabhängig von der Oberfläche",[288,336,337,342],{},[303,338,339],{},[306,340,341],{},"src-tauri\u002Fresources\u002Fclient-mod\u002F",[303,343,344],{},"Fertig gebaute TRS-Client-Jars, die der Launcher mitbringt",[288,346,347,352],{},[303,348,349],{},[306,350,351],{},"client-mod\u002F",[303,353,354],{},"TRS Client: gemeinsamer Kern plus Builds für Fabric, Forge und NeoForge",[288,356,357,362],{},[303,358,359],{},[306,360,361],{},"packaging\u002F",[303,363,364],{},"Rezepte für AUR und Flatpak, Linux-Desktop-Dateien",[288,366,367,372],{},[303,368,369],{},[306,370,371],{},"tests\u002F",[303,373,374],{},"Frontend-Tests (Vitest)",[265,376,377,378,381,382,388,389,393],{},"Die Website und die TRS-API liegen in ",[306,379,380],{},"api\u002F"," auf dem Branch ",[383,384,385],"strong",{},[306,386,387],{},"website"," (siehe ",[269,390,392],{"href":391},"#website-und-api","unten",").",[277,395,397],{"id":396},"voraussetzungen","Voraussetzungen",[399,400,401,450],"tabs",{},[402,403,405],"tabs-item",{"label":404},"Windows",[406,407,408,427,438,444],"ul",{},[409,410,411,414,415,418,419,422,423,426],"li",{},[383,412,413],{},"Node.js 22"," oder neuer und ",[383,416,417],{},"pnpm"," (die Version steht in ",[306,420,421],{},"package.json","; ",[306,424,425],{},"corepack enable"," richtet sie ein)",[409,428,429,432,433],{},[383,430,431],{},"Rust"," (stable, MSVC-Toolchain) über ",[269,434,437],{"href":435,"rel":436},"https:\u002F\u002Frustup.rs",[273],"rustup",[409,439,440,443],{},[383,441,442],{},"Visual Studio Build Tools"," mit „Desktopentwicklung mit C++“",[409,445,446,449],{},[383,447,448],{},"WebView2"," (bei Windows 10 und 11 vorinstalliert)",[402,451,452,471],{"label":213},[406,453,454,460,468],{},[409,455,456,414,458],{},[383,457,413],{},[383,459,417],{},[409,461,462,464,465],{},[383,463,431],{}," (stable) über ",[269,466,437],{"href":435,"rel":467},[273],[409,469,470],{},"die Entwicklungspakete von WebKitGTK und GTK:",[472,473,474,530,570],"code-group",{},[475,476,482],"pre",{"className":477,"code":478,"filename":479,"language":480,"meta":481,"style":481},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo apt install build-essential curl file pkg-config libssl-dev libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev\n","Debian\u002FUbuntu","bash","",[306,483,484],{"__ignoreMap":481},[485,486,489,493,497,500,503,506,509,512,515,518,521,524,527],"span",{"class":487,"line":488},"line",1,[485,490,492],{"class":491},"sBMFI","sudo",[485,494,496],{"class":495},"sfazB"," apt",[485,498,499],{"class":495}," install",[485,501,502],{"class":495}," build-essential",[485,504,505],{"class":495}," curl",[485,507,508],{"class":495}," file",[485,510,511],{"class":495}," pkg-config",[485,513,514],{"class":495}," libssl-dev",[485,516,517],{"class":495}," libwebkit2gtk-4.1-dev",[485,519,520],{"class":495}," libgtk-3-dev",[485,522,523],{"class":495}," libayatana-appindicator3-dev",[485,525,526],{"class":495}," librsvg2-dev",[485,528,529],{"class":495}," libxdo-dev\n",[475,531,534],{"className":477,"code":532,"filename":533,"language":480,"meta":481,"style":481},"sudo pacman -S --needed base-devel webkit2gtk-4.1 gtk3 libayatana-appindicator librsvg openssl xdotool\n","Arch",[306,535,536],{"__ignoreMap":481},[485,537,538,540,543,546,549,552,555,558,561,564,567],{"class":487,"line":488},[485,539,492],{"class":491},[485,541,542],{"class":495}," pacman",[485,544,545],{"class":495}," -S",[485,547,548],{"class":495}," --needed",[485,550,551],{"class":495}," base-devel",[485,553,554],{"class":495}," webkit2gtk-4.1",[485,556,557],{"class":495}," gtk3",[485,559,560],{"class":495}," libayatana-appindicator",[485,562,563],{"class":495}," librsvg",[485,565,566],{"class":495}," openssl",[485,568,569],{"class":495}," xdotool\n",[475,571,574],{"className":477,"code":572,"filename":573,"language":480,"meta":481,"style":481},"sudo dnf install gcc-c++ openssl-devel webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel libxdo-devel\n","Fedora",[306,575,576],{"__ignoreMap":481},[485,577,578,580,583,585,588,591,594,597,600,603],{"class":487,"line":488},[485,579,492],{"class":491},[485,581,582],{"class":495}," dnf",[485,584,499],{"class":495},[485,586,587],{"class":495}," gcc-c++",[485,589,590],{"class":495}," openssl-devel",[485,592,593],{"class":495}," webkit2gtk4.1-devel",[485,595,596],{"class":495}," gtk3-devel",[485,598,599],{"class":495}," libappindicator-gtk3-devel",[485,601,602],{"class":495}," librsvg2-devel",[485,604,605],{"class":495}," libxdo-devel\n",[277,607,609],{"id":608},"den-launcher-im-dev-modus-starten","Den Launcher im Dev-Modus starten",[611,612,614,619,645,649,661,668,672,684],"steps",{"level":613},"3",[615,616,618],"h3",{"id":617},"code-holen","Code holen",[475,620,622],{"className":477,"code":621,"language":480,"meta":481,"style":481},"git clone https:\u002F\u002Fgithub.com\u002Ftheredstonee\u002FTRS-Launcher.git\ncd TRS-Launcher\n",[306,623,624,635],{"__ignoreMap":481},[485,625,626,629,632],{"class":487,"line":488},[485,627,628],{"class":491},"git",[485,630,631],{"class":495}," clone",[485,633,634],{"class":495}," https:\u002F\u002Fgithub.com\u002Ftheredstonee\u002FTRS-Launcher.git\n",[485,636,638,642],{"class":487,"line":637},2,[485,639,641],{"class":640},"s2Zo4","cd",[485,643,644],{"class":495}," TRS-Launcher\n",[615,646,648],{"id":647},"abhängigkeiten-installieren","Abhängigkeiten installieren",[475,650,652],{"className":477,"code":651,"language":480,"meta":481,"style":481},"pnpm install\n",[306,653,654],{"__ignoreMap":481},[485,655,656,658],{"class":487,"line":488},[485,657,417],{"class":491},[485,659,660],{"class":495}," install\n",[265,662,663,664,667],{},"Das führt auch ",[306,665,666],{},"nuxt prepare"," aus.",[615,669,671],{"id":670},"starten","Starten",[475,673,675],{"className":477,"code":674,"language":480,"meta":481,"style":481},"pnpm app:dev\n",[306,676,677],{"__ignoreMap":481},[485,678,679,681],{"class":487,"line":488},[485,680,417],{"class":491},[485,682,683],{"class":495}," app:dev\n",[265,685,686,687,690],{},"Das startet den Nuxt-Dev-Server auf ",[306,688,689],{},"http:\u002F\u002Flocalhost:3000"," und öffnet das Tauri-Fenster mit Hot Reload. Der erste\nStart kompiliert den Rust-Teil und dauert eine Weile.",[692,693,694,695,698],"tip",{},"Setz ",[306,696,697],{},"TRS_LAUNCHER_HOME"," auf einen eigenen Ordner, damit deine Testdaten nicht mit deinen echten Launcher-Daten\nvermischt werden.",[700,701,702,703,706],"note",{},"Entwickler-Builds ohne angemeldetes Konto starten das Spiel im offiziellen ",[383,704,705],{},"Demo-Modus"," von Minecraft.\nRelease-Builds brauchen immer ein Konto, das das Spiel besitzt.",[277,708,710],{"id":709},"prüfungen-ausführen","Prüfungen ausführen",[265,712,713],{},"Das sind dieselben Prüfungen, die die CI bei jedem Push und Pull Request ausführt.",[472,715,716,736],{},[475,717,720],{"className":477,"code":718,"filename":719,"language":480,"meta":481,"style":481},"pnpm typecheck\npnpm test\n","Frontend",[306,721,722,729],{"__ignoreMap":481},[485,723,724,726],{"class":487,"line":488},[485,725,417],{"class":491},[485,727,728],{"class":495}," typecheck\n",[485,730,731,733],{"class":487,"line":637},[485,732,417],{"class":491},[485,734,735],{"class":495}," test\n",[475,737,739],{"className":477,"code":738,"filename":431,"language":480,"meta":481,"style":481},"pnpm generate            # die Tauri-Crate braucht ein gebautes Frontend\ncd src-tauri\ncargo clippy --workspace --all-targets -- -D warnings\ncargo test --workspace\n",[306,740,741,752,759,783],{"__ignoreMap":481},[485,742,743,745,748],{"class":487,"line":488},[485,744,417],{"class":491},[485,746,747],{"class":495}," generate",[485,749,751],{"class":750},"sHwdD","            # die Tauri-Crate braucht ein gebautes Frontend\n",[485,753,754,756],{"class":487,"line":637},[485,755,641],{"class":640},[485,757,758],{"class":495}," src-tauri\n",[485,760,762,765,768,771,774,777,780],{"class":487,"line":761},3,[485,763,764],{"class":491},"cargo",[485,766,767],{"class":495}," clippy",[485,769,770],{"class":495}," --workspace",[485,772,773],{"class":495}," --all-targets",[485,775,776],{"class":495}," --",[485,778,779],{"class":495}," -D",[485,781,782],{"class":495}," warnings\n",[485,784,786,788,791],{"class":487,"line":785},4,[485,787,764],{"class":491},[485,789,790],{"class":495}," test",[485,792,793],{"class":495}," --workspace\n",[265,795,796],{},"Die Start-Pipeline lässt sich ohne Oberfläche testen. Sie lädt die angegebene Version in einen eigenen Datenordner und\nstartet sie:",[475,798,800],{"className":477,"code":799,"language":480,"meta":481,"style":481},"cd src-tauri\ncargo run -p trs-core --example launch -- \u003Cdaten-ordner> 1.21.1 [vanilla|fabric|quilt|forge|neoforge] [sekunden]\n",[306,801,802,808],{"__ignoreMap":481},[485,803,804,806],{"class":487,"line":488},[485,805,641],{"class":640},[485,807,758],{"class":495},[485,809,810,812,815,818,821,824,827,829,833,836,840,843,847,850,853,856,858,861,863,866,868,871],{"class":487,"line":637},[485,811,764],{"class":491},[485,813,814],{"class":495}," run",[485,816,817],{"class":495}," -p",[485,819,820],{"class":495}," trs-core",[485,822,823],{"class":495}," --example",[485,825,826],{"class":495}," launch",[485,828,776],{"class":495},[485,830,832],{"class":831},"sMK4o"," \u003C",[485,834,835],{"class":495},"daten-ordne",[485,837,839],{"class":838},"sTEyZ","r",[485,841,842],{"class":831},">",[485,844,846],{"class":845},"sbssI"," 1.21.1",[485,848,849],{"class":838}," [vanilla",[485,851,852],{"class":831},"|",[485,854,855],{"class":491},"fabric",[485,857,852],{"class":831},[485,859,860],{"class":491},"quilt",[485,862,852],{"class":831},[485,864,865],{"class":491},"forge",[485,867,852],{"class":831},[485,869,870],{"class":491},"neoforge]",[485,872,873],{"class":838}," [sekunden]\n",[265,875,876,877,880,881,884],{},"Um die Regeln des ",[269,878,879],{"href":199},"Absturz-Helfers"," an einem Log oder Absturzbericht auszuprobieren (ebenfalls in\n",[306,882,883],{},"src-tauri","):",[475,886,888],{"className":477,"code":887,"language":480,"meta":481,"style":481},"cargo run -p trs-core --example crash_scan -- \u003Clog-oder-absturzbericht> [--memory MB --system MB]\n",[306,889,890],{"__ignoreMap":481},[485,891,892,894,896,898,900,902,905,907,909,912,915,917,920,923,926],{"class":487,"line":488},[485,893,764],{"class":491},[485,895,814],{"class":495},[485,897,817],{"class":495},[485,899,820],{"class":495},[485,901,823],{"class":495},[485,903,904],{"class":495}," crash_scan",[485,906,776],{"class":495},[485,908,832],{"class":831},[485,910,911],{"class":495},"log-oder-absturzberich",[485,913,914],{"class":838},"t",[485,916,842],{"class":831},[485,918,919],{"class":838}," [--memory ",[485,921,922],{"class":495},"MB",[485,924,925],{"class":495}," --system",[485,927,928],{"class":495}," MB]\n",[277,930,932],{"id":931},"installer-bauen","Installer bauen",[399,934,935,956],{},[402,936,937,949],{"label":404},[475,938,940],{"className":477,"code":939,"language":480,"meta":481,"style":481},"pnpm app:build\n",[306,941,942],{"__ignoreMap":481},[485,943,944,946],{"class":487,"line":488},[485,945,417],{"class":491},[485,947,948],{"class":495}," app:build\n",[265,950,951,952,955],{},"Der NSIS-Installer landet in ",[306,953,954],{},"src-tauri\u002Ftarget\u002Frelease\u002Fbundle",".",[402,957,958,979],{"label":213},[475,959,961],{"className":477,"code":960,"language":480,"meta":481,"style":481},"pnpm tauri build --bundles appimage,deb,rpm\n",[306,962,963],{"__ignoreMap":481},[485,964,965,967,970,973,976],{"class":487,"line":488},[485,966,417],{"class":491},[485,968,969],{"class":495}," tauri",[485,971,972],{"class":495}," build",[485,974,975],{"class":495}," --bundles",[485,977,978],{"class":495}," appimage,deb,rpm\n",[265,980,981,982,955],{},"Die Rezepte für AUR und Flatpak liegen in ",[306,983,361],{},[700,985,986,987,990],{},"Offizielle Releases signieren die Update-Dateien mit dem privaten Schlüssel des Projekts. Ohne diesen Schlüssel kann\nder Build nach dem Erstellen der Installer mit einem Fehler über einen fehlenden privaten Schlüssel enden. Schalte die\nUpdate-Dateien für eigene Builds aus:\n",[306,988,989],{},"pnpm tauri build --config '{\"bundle\":{\"createUpdaterArtifacts\":false}}'"," (statt des JSON-Texts geht auch der Pfad zu\neiner JSON-Datei mit demselben Inhalt).",[265,992,993,996,997,1000,1001,1004,1005,1008],{},[383,994,995],{},"CurseForge"," braucht beim Bauen einen API-Schlüssel: die Umgebungsvariable ",[306,998,999],{},"CURSEFORGE_API_KEY"," oder die Datei\n",[306,1002,1003],{},"~\u002F.tauri\u002Fcurseforge-api-key"," (unter Windows ",[306,1006,1007],{},"%USERPROFILE%\\.tauri\\curseforge-api-key","). Ohne Schlüssel klappt der\nBuild trotzdem, CurseForge wird dann nur ausgeblendet.",[277,1010,1012],{"id":1011},"den-trs-client-bauen","Den TRS Client bauen",[265,1014,1015,1016,955],{},"Um den Launcher zu bauen, musst du die Mod nicht bauen – fertige Jars liegen in ",[306,1017,341],{},[265,1019,1020,1023,1024,1027],{},[383,1021,1022],{},"Voraussetzung:"," ein ",[383,1025,1026],{},"JDK 21"," oder neuer, um Gradle auszuführen. Gradle-Toolchains laden JDK 17, 21 oder 25 zum\nKompilieren, wenn sie fehlen.",[265,1029,1030],{},"Jede Loader-Familie ist ein eigener Gradle-Build mit eigenem Wrapper:",[282,1032,1033,1045],{},[285,1034,1035],{},[288,1036,1037,1039,1042],{},[291,1038,293],{},[291,1040,1041],{},"Loader und Versionen",[291,1043,1044],{},"Bauen",[298,1046,1047,1066,1080,1095,1109,1124,1138],{},[288,1048,1049,1058,1061],{},[303,1050,1051,1053,1054,1057],{},[306,1052,351],{}," (Wurzel, ",[306,1055,1056],{},"fabric\u002F",")",[303,1059,1060],{},"Fabric 1.14.4–26.3",[303,1062,1063],{},[306,1064,1065],{},".\u002Fgradlew collectLauncherJars",[288,1067,1068,1073,1076],{},[303,1069,1070],{},[306,1071,1072],{},"client-mod\u002Fneoforge\u002F",[303,1074,1075],{},"NeoForge 1.20.2–26.3",[303,1077,1078],{},[306,1079,1065],{},[288,1081,1082,1087,1090],{},[303,1083,1084],{},[306,1085,1086],{},"client-mod\u002Fforge\u002F",[303,1088,1089],{},"Forge 1.20–26.3",[303,1091,1092],{},[306,1093,1094],{},".\u002Fgradlew :collectLauncherJars",[288,1096,1097,1102,1105],{},[303,1098,1099],{},[306,1100,1101],{},"client-mod\u002Fforge-mojmap-legacy\u002F",[303,1103,1104],{},"Forge 1.14.4, 1.15.2, 1.16.x, 1.17.1, 1.18.x, 1.19.x",[303,1106,1107],{},[306,1108,1065],{},[288,1110,1111,1116,1119],{},[303,1112,1113],{},[306,1114,1115],{},"client-mod\u002Fforge-1.13.2\u002F",[303,1117,1118],{},"Forge 1.13.2",[303,1120,1121],{},[306,1122,1123],{},".\u002Fgradlew build",[288,1125,1126,1131,1134],{},[303,1127,1128],{},[306,1129,1130],{},"client-mod\u002Flegacy\u002F",[303,1132,1133],{},"Forge 1.8.9–1.12.2",[303,1135,1136],{},[306,1137,1065],{},[288,1139,1140,1145,1148],{},[303,1141,1142],{},[306,1143,1144],{},"client-mod\u002Flegacy-1.7.10\u002F",[303,1146,1147],{},"Forge 1.7.10",[303,1149,1150],{},[306,1151,1123],{},[265,1153,1154,1155,1157],{},"Für den Fabric-Build in ",[306,1156,351],{},":",[475,1159,1161],{"className":477,"code":1160,"language":480,"meta":481,"style":481},".\u002Fgradlew build                      # alle Versionen + die Unit-Tests von common\u002F\n.\u002Fgradlew :fabric:1.21.1:build       # eine einzelne Version\n.\u002Fgradlew :fabric:1.21.1:runClient   # diese Minecraft-Version mit der Mod starten (Spielordner: client-mod\u002Frun)\n.\u002Fgradlew collectLauncherJars        # dist\u002F*.jar und dist\u002Fbuilds.json für den Launcher schreiben\n",[306,1162,1163,1173,1183,1193],{"__ignoreMap":481},[485,1164,1165,1168,1170],{"class":487,"line":488},[485,1166,1167],{"class":491},".\u002Fgradlew",[485,1169,972],{"class":495},[485,1171,1172],{"class":750},"                      # alle Versionen + die Unit-Tests von common\u002F\n",[485,1174,1175,1177,1180],{"class":487,"line":637},[485,1176,1167],{"class":491},[485,1178,1179],{"class":495}," :fabric:1.21.1:build",[485,1181,1182],{"class":750},"       # eine einzelne Version\n",[485,1184,1185,1187,1190],{"class":487,"line":761},[485,1186,1167],{"class":491},[485,1188,1189],{"class":495}," :fabric:1.21.1:runClient",[485,1191,1192],{"class":750},"   # diese Minecraft-Version mit der Mod starten (Spielordner: client-mod\u002Frun)\n",[485,1194,1195,1197,1200],{"class":487,"line":785},[485,1196,1167],{"class":491},[485,1198,1199],{"class":495}," collectLauncherJars",[485,1201,1202],{"class":750},"        # dist\u002F*.jar und dist\u002Fbuilds.json für den Launcher schreiben\n",[692,1204,1205,1206,1209,1210,1213,1214,1216,1217,955],{},"Unter Windows nimm ",[306,1207,1208],{},".\\gradlew"," oder ",[306,1211,1212],{},"gradlew.bat"," statt ",[306,1215,1167],{},". Bau die Projekte nacheinander – sie schreiben\nalle in dasselbe ",[306,1218,1219],{},"client-mod\u002Fdist\u002F",[277,1221,1223],{"id":1222},"website-und-api","Website und API",[265,1225,1226,1227,1229,1230,1232,1233,1236],{},"Die Website und die TRS-API sind ein eigenes Nuxt-4\u002FNitro-Projekt auf dem Branch ",[306,1228,387],{},". Es hat eine eigene\n",[306,1231,421],{}," und Lockfile und braucht ",[383,1234,1235],{},"Node.js 24.11"," oder neuer.",[475,1238,1240],{"className":477,"code":1239,"language":480,"meta":481,"style":481},"git checkout website\ncd api\npnpm install\npnpm typecheck && pnpm lint && pnpm test\n",[306,1241,1242,1252,1259,1265],{"__ignoreMap":481},[485,1243,1244,1246,1249],{"class":487,"line":488},[485,1245,628],{"class":491},[485,1247,1248],{"class":495}," checkout",[485,1250,1251],{"class":495}," website\n",[485,1253,1254,1256],{"class":487,"line":637},[485,1255,641],{"class":640},[485,1257,1258],{"class":495}," api\n",[485,1260,1261,1263],{"class":487,"line":761},[485,1262,417],{"class":491},[485,1264,660],{"class":495},[485,1266,1267,1269,1272,1275,1278,1281,1283,1285],{"class":487,"line":785},[485,1268,417],{"class":491},[485,1270,1271],{"class":495}," typecheck",[485,1273,1274],{"class":831}," &&",[485,1276,1277],{"class":491}," pnpm",[485,1279,1280],{"class":495}," lint",[485,1282,1274],{"class":831},[485,1284,1277],{"class":491},[485,1286,735],{"class":495},[265,1288,1289,1290,955],{},"Die öffentlichen Endpunkte der API beschreibt ",[269,1291,255],{"href":256},[1293,1294,1295],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":481,"searchDepth":637,"depth":637,"links":1297},[1298,1299,1300,1305,1306,1307,1308],{"id":279,"depth":637,"text":280},{"id":396,"depth":637,"text":397},{"id":608,"depth":637,"text":609,"children":1301},[1302,1303,1304],{"id":617,"depth":761,"text":618},{"id":647,"depth":761,"text":648},{"id":670,"depth":761,"text":671},{"id":709,"depth":637,"text":710},{"id":931,"depth":637,"text":932},{"id":1011,"depth":637,"text":1012},{"id":1222,"depth":637,"text":1223},"Node, pnpm und Rust einrichten, den Launcher im Dev-Modus starten, die Prüfungen ausführen, Installer bauen und die TRS-Client-Mod bauen.","md",null,{},{"icon":243},{"title":240,"description":1309},"k63tyt4f88MEFK1bskxL0JzvzEuh4FGHrKWs1SOv_yo",[1317,1319],{"title":11,"path":235,"stem":236,"description":1318,"icon":12,"children":-1},"Quellcode, TRS Launcher selbst bauen, die TRS API und wie du mithelfen kannst.",{"title":245,"path":246,"stem":247,"description":1320,"icon":248,"children":-1},"Branches und Pull Requests, Code-Regeln, Tests, der Changelog auf Englisch und Deutsch und die Lizenz GPL-3.0.",1791894777630]