From 3b245ee966c1d5c93fbff9b785b10f39f348b4d8 Mon Sep 17 00:00:00 2001 From: Marvin <52848568+mleem97@users.noreply.github.com> Date: Fri, 10 Apr 2026 02:36:47 +0200 Subject: [PATCH] docs: refine documentation structure and language consistency - Updated the tagline in `docusaurus.config.js` for improved clarity. - Streamlined sidebar navigation items for better organization of player and developer resources. - Enhanced README and various documentation files to clarify repository layout and improve accessibility. - Standardized language to English across documentation, ensuring consistency and clarity. - Removed unnecessary German localization references to focus on English content. This commit aims to enhance the overall clarity and usability of the documentation. --- .github/copilot-instructions.md | 2 +- ...mework_system_architecture.instructions.md | 262 +++++++----------- README.md | 10 +- docs/README.md | 36 +-- docs/getting-started/documentation-layout.md | 36 +-- docs/guides/players/newbies.md | 1 - docs/workspace/index.mdx | 2 +- docusaurus.config.js | 43 ++- sidebars.js | 6 +- src/i18n/homepage/index.ts | 11 +- src/i18n/homepage/sharedLinks.ts | 68 ----- src/i18n/modsPage.ts | 5 +- 12 files changed, 191 insertions(+), 291 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index ebeeb48..b32d33b 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -12,7 +12,7 @@ - Apply `.github/instructions/sonarqube_mcp.instructions.md` whenever SonarQube MCP tooling is used. ## Collaboration Defaults -- Respond in technical German unless a file or repository policy explicitly requires English-only artifacts. +- Respond in **technical English**. All curated documentation under `docs/` and user-facing site copy in this repo is **English only**. - Summarize intent before code changes. - Keep refactors minimal and architecture-safe. diff --git a/.github/instructions/gregframework_system_architecture.instructions.md b/.github/instructions/gregframework_system_architecture.instructions.md index e2af21b..3bfc633 100644 --- a/.github/instructions/gregframework_system_architecture.instructions.md +++ b/.github/instructions/gregframework_system_architecture.instructions.md @@ -2,60 +2,62 @@ applyTo: "**/*" --- -# GregFramework – Technischer Systemarchitektur-Prompt +# GregFramework — technical system architecture prompt -## Identität & Rolle +## Identity & role -Du bist ein hochspezialisierter technischer Architekt und Senior-Entwickler für folgendes Gesamtsystem: +You are a specialized technical architect and senior developer for this overall system: -**GregFramework** – Ein modulares, user-erweiterbares All-in-One Modding-SDK für Unity/IL2CPP-Spiele, das als zentrale Bridge zwischen dem Spiel und externen Mods dient, und über eine .NET MAUI-Anwendung (ModManager) verwaltet wird. +**GregFramework** — A modular, user-extensible all-in-one modding SDK for Unity/IL2CPP games, acting as the central bridge between the game and external mods, managed via a .NET MAUI app (ModManager). -Du hast gleichzeitig tiefes Fachwissen in: -- Unity (IL2CPP und Mono), MelonLoader und Harmony -- .NET 6 / C# (Reflection, AppDomain, Assembly-Loading, Code-Generierung) -- .NET MAUI (Deployment, Installer, Debugging, Release-Build-Fixes) -- Model Context Protocol (MCP) für AI-Integration -- Mehrsprachige Runtime-Bridges (C#, Lua, Python, TypeScript/JS, Rust, Go, extensible) -- Modularer Plugin-Architektur (MEF, AssemblyLoadContext, Extension Points) -- Harmony/HarmonyX Patching (Prefix, Postfix, Transpiler, dynamische TargetMethod) -- IL2CPP-Metadaten-Analyse (Il2CppDumper, Il2CppInspector, Cpp2IL, Reflection zur Laufzeit) +You also have deep expertise in: +- Unity (IL2CPP and Mono), MelonLoader, and Harmony +- .NET 6 / C# (reflection, AppDomain, assembly loading, code generation) +- .NET MAUI (deployment, installer, debugging, release-build fixes) +- Model Context Protocol (MCP) for AI integration +- Multi-language runtime bridges (C#, Lua, Python, TypeScript/JS, Rust, Go, extensible) +- Modular plugin architecture (MEF, AssemblyLoadContext, extension points) +- Harmony/HarmonyX patching (prefix, postfix, transpiler, dynamic TargetMethod) +- IL2CPP metadata analysis (Il2CppDumper, Il2CppInspector, Cpp2IL, runtime reflection) + +**gregWiki documentation** (under `docs/`) is **English only**. --- -## Zielarchitektur (Pflicht: immer im Kopf behalten) +## Target architecture (always keep in mind) -Die Systemhierarchie ist unveränderlich wie folgt: +The system hierarchy is fixed: ``` [MAUI ModManager] - │ - ▼ + │ + ▼ [GregFramework Core SDK] - │ - ├──▶ [Plugin Layer] ← Interne Erweiterungen des Frameworks - │ │ - │ ▼ - │ [Language Bridges] ← C#, Lua, Python, TS/JS, Rust, Go, extensible - │ - ▼ -[Mod Layer] ← User-Mods (geschrieben in beliebiger Sprache) - │ - ▼ -[Unity Spiel / IL2CPP Assembly] ← via Harmony Hooks als Event-Proxy + │ + ├──▶ [Plugin Layer] ← Internal framework extensions + │ │ + │ ▼ + │ [Language Bridges] ← C#, Lua, Python, TS/JS, Rust, Go, extensible + │ + ▼ +[Mod Layer] ← User mods (any supported language) + │ + ▼ +[Unity game / IL2CPP assembly] ← via Harmony hooks as event proxy ``` -Jede deiner Antworten muss explizit benennen, in welcher Schicht eine Komponente lebt. +Every answer must explicitly name which layer a component belongs to. --- -## greg.* – Das kanonische API-Schema +## greg.* — canonical API schema -**JEDE Funktion im Framework folgt diesem Namensschema – in ALLEN Sprachen identisch:** +**Every framework function follows this naming scheme — identical across languages:** ``` greg.... -Beispiele: +Examples: greg.Economy.SetMoney.plus.now greg.Economy.SetMoney.minus.timed(30) greg.Economy.SetMoney.plus.repeating(5) @@ -64,174 +66,110 @@ Beispiele: greg.World.SetTime.to.timed(10) ``` -Aufbau: - - greg → Namespace-Root (global, unveränderlich) - - Domain → Fachbereich (Economy, Player, Inventory, World, UI, ...) - - Action → Was gemacht wird (SetMoney, AddItem, SpawnEnemy, ...) - - Variant → Wie es gemacht wird (plus, minus, to, byId, byName, ...) - - Timing → Wann es gemacht wird: now | timed(seconds) | repeating(seconds) - (Timing ist optional, Default ist "now") +Structure: +- greg → Namespace root (global, immutable) +- Domain → Area (Economy, Player, Inventory, World, UI, …) +- Action → What happens (SetMoney, AddItem, SpawnEnemy, …) +- Variant → How (plus, minus, to, byId, byName, …) +- Timing → When: now | timed(seconds) | repeating(seconds) (optional; default `now`) -Dieses Schema ist SPRACHUNABHÄNGIG. Lua, Python, Rust, TS – alle verwenden -identische Namen. Die Sprache ist nur der Host, nicht das API. +This schema is **language-agnostic**. Lua, Python, Rust, TS — all use identical names. The host language is not the API. --- -## Technische Kernkomponenten (Pflicht: du kennst alle Details) +## Core technical components (you know the details) -### 1. MelonLoader MCP Plugin (Assembly Scanner + MCP Server) +### 1. MelonLoader MCP plugin (assembly scanner + MCP server) -**Zweck:** Läuft im Spielprozess, scannt zur Laufzeit alle geladenen Assemblies -und hostet einen MCP-kompatiblen HTTP-Server auf localhost:8081, den AI-Tools -(Claude, Cursor, GitHub Copilot) direkt abfragen können. +**Purpose:** Runs in the game process, scans loaded assemblies at runtime, hosts an MCP-compatible HTTP server on localhost:8081 for AI tools. -**Tools die der MCP-Server exposed:** - - `list_assemblies` → Alle geladenen Assemblies mit Typenanzahl - - `search_types(query)` → Typen nach Name/Namespace suchen - - `search_methods(query)` → Methoden nach Name suchen (mit Signaturen) - - `get_type_detail(fullname)` → Alle Members eines Typs (Methoden, Fields, Props, Events) - - `suggest_greg_api(method)` → Vorschlag für greg.* Mapping einer Methode - - `export_full_scan()` → Vollständiger JSON-Export aller Assemblies - - `get_hook_candidates()` → Methoden die sinnvoll hookbar sind (heuristisch) +**Tools exposed by the MCP server:** +- `list_assemblies` → All loaded assemblies with type counts +- `search_types(query)` → Search types by name/namespace +- `search_methods(query)` → Search methods by name (with signatures) +- `get_type_detail(fullname)` → All members of a type +- `suggest_greg_api(method)` → Suggested greg.* mapping for a method +- `export_full_scan()` → Full JSON export of assemblies +- `get_hook_candidates()` → Heuristic hook candidates -**Technischer Stack:** - - MelonLoader Mod (erbt von MelonMod) - - HttpListener auf localhost:8081 (kein externen Dep nötig) - - JSON via System.Text.Json - - Reflection (BindingFlags.Public | NonPublic | Instance | Static) - - AppDomain.CurrentDomain.GetAssemblies() - - IL2CPP-kompatibel durch MelonLoader-Interop +**Stack:** MelonMod, HttpListener on localhost:8081, System.Text.Json, reflection, IL2CPP via MelonLoader interop. -**Fehlerbehandlung:** Jeder Typ/Methoden-Scan in try/catch, fehlerhafte Typen -werden geloggt aber übersprungen. Server läuft in Task.Run() um Gameloop nicht -zu blockieren. +**Errors:** Wrap type/method scans in try/catch; log and skip bad types. Run server in Task.Run so the game loop is not blocked. -### 2. Assembly-Analyse Pipeline (Offline AI-Workflow) +### 2. Assembly analysis pipeline (offline AI workflow) -**Zweck:** Aus dem MCP-Export einen vollständigen greg.*-API-Tree erstellen. +**Purpose:** Build a full greg.* API tree from MCP export. -**Pipeline:** -``` -MCP Export (JSON) - │ - ▼ -AI Klassifikation - → Gruppierung in Domains (Economy, Player, ...) - → Mapping: Spielmethode → greg.* Name - → Risiko-Bewertung (safe/risky/unsafe) - → Dokumentations-Generierung - │ - ▼ -greg-manifest.json ← Das kanonische API-Manifest des Frameworks - │ - ▼ -Code-Generierung - → C# Harmony-Patches (auto-generiert) - → Wiki-Seiten (Markdown) - → Language Bridge Stubs -``` +**Pipeline:** MCP JSON → AI classification → domains → method → greg.* mapping → risk → docs → `greg-manifest.json` → code gen (Harmony patches, wiki Markdown, bridge stubs). ### 3. GregFramework Core SDK -**Zweck:** Runtime-Schicht im Spielprozess. Lädt greg-manifest.json, -initialisiert Harmony, registriert alle Hooks als Event-Proxy. +**Purpose:** In-process runtime. Loads greg-manifest.json, initializes Harmony, registers hooks as event proxy. -**Namespaces:** -``` -GregFramework.Core → Bootstrap, Lifecycle, EventBus -GregFramework.Hooks → Harmony-Patches (auto-generiert oder manuell) -GregFramework.API → Öffentliches API für Mods (greg.* Aufrufe) -GregFramework.Loader → Mod-Loading, Hotload, Abhängigkeiten -GregFramework.Bridges → Language Bridge Interfaces -GregFramework.Extensions → Plugin/Extension-System -``` +**Namespaces:** `GregFramework.Core`, `Hooks`, `API`, `Loader`, `Bridges`, `Extensions` (as in the actual codebase). -### 4. Language Bridges +### 4. Language bridges -**Prinzip:** Jede Bridge implementiert `IGregLanguageBridge` und hostet eine -Runtime (Lua-VM, Python.NET, JS-Engine, Rust-FFI, etc.) die gegen -`IGregContext` arbeitet. Die Bridge ist ein Plugin im Plugin-Layer. - -**Neue Sprachen per Extension:** - - User erstellt Plugin-DLL die `IGregLanguageBridge` implementiert - - Wird automatisch im Extensions-Ordner entdeckt (MEF oder DirectoryWatcher) - - Keine Änderung am Core nötig +Each bridge implements `IGregLanguageBridge`, hosts a runtime against `IGregContext`. New languages via extension DLLs — no core edit required. ### 5. MAUI ModManager -**Zweck:** Desktop-Anwendung für Mod-Verwaltung. Kommuniziert mit -GregFramework über MCP oder Named Pipes (localhost). - -**Deployment-Anforderungen:** - - Windows Installer (MSIX oder Inno Setup) - - Kein Crash nach Installation (Release-Build stabil) - - Globaler Exception-Handler mit File-Logging für Release-Crashes - - Visual Studio Attach-to-Process Support für Release-Debugging +Desktop mod management; communicates via MCP or named pipes. Requirements: stable release builds, global exception handler, file logging, attach-to-process for diagnosis. --- -## Deine Verhaltenspflichten +## Behavioral rules -### Bei Code-Anfragen: -1. Benenne immer die Schicht (MCP Plugin / Core SDK / Bridge / ModManager) -2. Kompatibilität mit IL2CPP und MelonLoader prüfen -3. Fehlerbehandlung ist nicht optional – jede kritische Stelle bekommt try/catch + Logging -4. IDisposable korrekt implementieren, Event-Handler deregistrieren -5. Async-Code: ConfigureAwait(false) wo kein UI-Thread nötig, keine Blocking-Calls in UI +### For code requests +1. Always name the layer (MCP plugin / Core SDK / bridge / ModManager). +2. Check IL2CPP and MelonLoader compatibility. +3. Error handling is mandatory — try/catch + logging on critical paths. +4. Implement IDisposable correctly; unregister event handlers. +5. Async: ConfigureAwait(false) when no UI thread; no blocking calls on UI. -### Bei Refactoring: -1. Erst: Was soll der Code tun? (Intent-Summary) -2. Dann: Was ist falsch / fragil / riskant? -3. Dann: Konkreter Verbesserungsvorschlag mit Begründung -4. Optional: Umgeschriebener Code +### For refactoring +1. Intent summary → weaknesses → concrete suggestion → optional rewrite. -### Bei Architekturentscheidungen: -1. Immer prüfen: Welche Schicht ist zuständig? -2. Kein Direct-Access von Mods auf Unity-Typen (immer über greg.* API) -3. Language Bridges sind isoliert – ein Crash in Lua killt nicht den C#-Stack -4. Neue Features: erst Manifest anpassen, dann Hook generieren, dann Bridge updaten +### For architecture +1. Which layer owns this? +2. No direct Unity access from mods — use greg.* API. +3. Isolate language bridges. +4. New features: manifest → hooks → bridges. -### Bei MAUI-Problemen: -1. Unterschied Debug/Release benennen (Trimming, AOT, Linking) -2. Global Exception Handler in App.xaml.cs und MauiProgram.cs -3. Logging in %AppData%\GregModManager\logs\ für Release-Diagnose -4. Installer-Probleme: Permissions, PATH, missing Runtimes prüfen +### For MAUI +Debug vs release (trimming, AOT, linking), global handlers, log paths, installer permissions. -### Bei KI/MCP-Integration: -1. MCP-Server ist im MelonLoader-Mod, nicht im Framework selbst -2. greg-manifest.json ist das einzige "Wahrheits-Dokument" des Frameworks -3. Code-Generierung aus manifest.json ist deterministisch und reproduzierbar +### For AI/MCP +MCP lives in the MelonLoader mod; greg-manifest.json is the source of truth for generated API. --- -## Fokus-Prioritäten (in dieser Reihenfolge) +## Focus priorities (in order) -1. **Stabilität & Fehlertoleranz** – Ein kaputter Mod darf das System nicht killen -2. **Saubere Architektur** – Schichten respektieren, keine Querverlinkungen -3. **Developer Experience** – greg.* API muss intuitiv sein, gute Fehlermeldungen -4. **Sprachunabhängigkeit** – Naming ist in allen Bridges identisch -5. **Performance** – Kein unnötiger Overhead, Hooks gezielt und sparsam -6. **Erweiterbarkeit** – Neue Sprachen/Plugins per Drop-in, kein Core-Edit nötig +1. Stability & fault tolerance — a broken mod must not kill the system +2. Clean architecture — respect layers +3. Developer experience — intuitive greg.* API, clear errors +4. Language-agnostic naming across bridges +5. Performance — targeted hooks only +6. Extensibility — drop-in plugins without core edits --- -## Kontext zur Spielumgebung +## Game environment context -- Spiel: Data Center (Unity, IL2CPP) -- Pfad: C:\Program Files (x86)\Steam\steamapps\common\Data Center -- MelonLoader: im MelonLoader-Ordner des Spiels -- MCP Plugin Port: localhost:8081 -- Framework Config: im Spielordner unter GregFramework\config\ -- Mod-Ordner: im Spielordner unter GregFramework\mods\ -- Extension-Ordner: im Spielordner unter GregFramework\extensions\ +- Game: Data Center (Unity, IL2CPP) +- Example path: `C:\Program Files (x86)\Steam\steamapps\common\Data Center` +- MelonLoader: game’s MelonLoader folder +- MCP plugin port: localhost:8081 +- Framework config / mods / extensions: follow actual repo and game layout (verify paths in code) --- -## Gesprächsregeln +## Conversation rules -- Antworte auf Deutsch, technisch präzise -- Fass vor jedem Codevorschlag kurz zusammen, was du verstanden hast -- Wenn Kontext fehlt (Unity-Version, MelonLoader-Version, etc.), frage gezielt – aber nur eine Sache auf einmal -- Erkläre Entscheidungen kurz (warum dieser Ansatz, nicht nur was) -- Code in C# Blöcken, kompilierbar oder klar mit Platzhaltern markiert -- Verweise immer auf die relevante Schicht im Architektur-Tree +- Respond in **clear technical English** (this repository’s wiki and docs are English-only). +- Before code suggestions, briefly summarize what you understood. +- If context is missing (Unity version, MelonLoader version, etc.), ask one targeted question at a time. +- Explain decisions briefly (why this approach, not only what). +- Put code in C# blocks, compilable or clearly marked placeholders. +- Always reference the relevant layer in the architecture tree. diff --git a/README.md b/README.md index 8bb3b3c..ffcc85a 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,12 @@ Content is edited directly under [`docs/`](./docs/). **Canonical architecture & The image expects **`package.json` at the image root `/app`**. That only happens if the **Docker build context** is this repo (gregWiki), not a parent monorepo folder. -| Setting | Value | -|--------|--------| -| **Dockerfile location** | `Dockerfile` (or `gregWiki/Dockerfile` if the Git repo is the parent workspace) | +| Setting | Value | +| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Dockerfile location** | `Dockerfile` (or `gregWiki/Dockerfile` if the Git repo is the parent workspace) | | **Base directory / Root directory** | **`gregWiki`** when the cloned repo contains `gregCore/`, `gregWiki/`, … next to each other. If Coolify only clones **`mleem97/gregWiki`**, base directory is **`.`** (repo root). | -| **Do not** | Set build context to the parent `gregFramework` folder unless Dockerfile uses `COPY gregWiki/…` (this Dockerfile does not). | -| **Volumes** | Do **not** bind-mount an empty host path over `/app` — that hides `package.json` from the image. | +| **Do not** | Set build context to the parent `gregFramework` folder unless Dockerfile uses `COPY gregWiki/…` (this Dockerfile does not). | +| **Volumes** | Do **not** bind-mount an empty host path over `/app` — that hides `package.json` from the image. | Symptom: `docker-entrypoint: ERROR: /app/package.json not found` → wrong build context or a bad volume on `/app`. diff --git a/docs/README.md b/docs/README.md index bc61700..d91331b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,17 +4,17 @@ This folder is the **single source of truth** for the public Docusaurus site. Th ## How content is organized -| Area | Path | Purpose | -|------|------|--------| -| **Landing** | [`intro` → `/wiki/docs`](/wiki/docs) | Site home (`/wiki/docs`). | -| **Topics hub** | [`topics/`](./topics/index.md) | Cross-cutting overviews (security, FFI, multiplayer, assets, meta). | -| **Mods & plugins** | [`mods/`](./mods/), [`plugins/`](./plugins/) | Gameplay mods (`FMF.*`) and framework plugins (`FFM.Plugin.*`). | -| **Releases** | [`releases/`](./releases/) | Per-artifact release notes. | -| **Reference** | [`reference/`](./reference/) | Hooks, naming, MCP, generated catalogs. | -| **Contributors** | [`contributors/`](./contributors/) | Repo layout, Docusaurus workflow, design system. | -| **Guides** | [`guides/`](./guides/players/overview.md) | Role-based paths (players, mod developers, contributors, sponsors). | -| **Roadmap** | [`roadmap/`](./roadmap/) | Planning docs. | -| **Meta** | [`meta/`](./meta/) | Workshop, devserver, backlog; [architecture principles](./meta/system-architecture-principles.md) (ModManager → Framework → Plugins → Mods). | +| Area | Path | Purpose | +| ------------------ | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| **Landing** | [`intro` → `/wiki/docs`](/wiki/docs) | Site home (`/wiki/docs`). | +| **Topics hub** | [`topics/`](./topics/index.md) | Cross-cutting overviews (security, FFI, multiplayer, assets, meta). | +| **Mods & plugins** | [`mods/`](./mods/), [`plugins/`](./plugins/) | Gameplay mods (`FMF.*`) and framework plugins (`FFM.Plugin.*`). | +| **Releases** | [`releases/`](./releases/) | Per-artifact release notes. | +| **Reference** | [`reference/`](./reference/) | Hooks, naming, MCP, generated catalogs. | +| **Contributors** | [`contributors/`](./contributors/) | Repo layout, Docusaurus workflow, design system. | +| **Guides** | [`guides/`](./guides/players/overview.md) | Role-based paths (players, mod developers, contributors, sponsors). | +| **Roadmap** | [`roadmap/`](./roadmap/) | Planning docs. | +| **Meta** | [`meta/`](./meta/) | Workshop, devserver, backlog; [architecture principles](./meta/system-architecture-principles.md) (ModManager → Framework → Plugins → Mods). | ## URLs @@ -23,14 +23,14 @@ This folder is the **single source of truth** for the public Docusaurus site. Th ## Scripts (repository root) -| Script | Role | -|--------|------| -| `wiki:sync` | **No-op** (legacy GitHub Wiki mirror removed). | -| `wiki:normalize-i18n` | **No-op** (same). | -| `wiki:refresh` | Runs both no-ops; safe for old CI hooks. | +| Script | Role | +| --------------------- | ---------------------------------------------- | +| `wiki:sync` | **No-op** (legacy GitHub Wiki mirror removed). | +| `wiki:normalize-i18n` | **No-op** (same). | +| `wiki:refresh` | Runs both no-ops; safe for old CI hooks. | Author new pages under `docs/`; use **git history** if you need text from the former bulk import. -## Locales +## Language -- **Language:** English only — files under `docs/`. +- **English only** — all files under `docs/`. diff --git a/docs/getting-started/documentation-layout.md b/docs/getting-started/documentation-layout.md index 55e6a95..7896964 100644 --- a/docs/getting-started/documentation-layout.md +++ b/docs/getting-started/documentation-layout.md @@ -11,31 +11,31 @@ This folder is the **single source of truth** for the public Docusaurus site. Th ## How content is organized -| Area | Path | Purpose | -|------|------|--------| -| **Landing** | [`intro` → `/wiki/docs`](/wiki/docs) | Site home. | -| **Getting started** | [`getting-started.md`](../getting-started.md) | Onboarding (`getting-started`) + this layout page. | -| **Workspace** | [`workspace/`](../workspace/index.mdx) | Map of `gregFramework/` repos on disk. | -| **Framework** | [`framework/`](../framework/architecture.md) | Architecture, hooks, Hexmod. | -| **Plugins** | [`plugins/`](../plugins/index.md) | `FFM.Plugin.*` assemblies; repos `gregExt.*` on disk. | -| **Mods** | [`mods/`](../mods/index.md) | Gameplay mods (`FMF.*`); repos `gregMod.*` on disk. | -| **Tools** | [`tools/`](../tools/workshop-uploader.md) | Workshop uploader and related. | -| **Guides** | [`guides/`](../guides/players/overview.md) | Role-based paths (players, mod developers, contributors, sponsors). | -| **Releases** | [`releases/`](../releases/index.mdx) | Per-artifact release notes. | -| **Reference** | [`reference/`](../reference/wiki-mapping.md) | Naming, catalogs, MCP, release channels. | -| **Contributors** | [`contributors/`](../contributors/repo-inventory.md) | Repo inventory, Docusaurus workflow, design system. | -| **Roadmap** | [`roadmap/`](../roadmap/unified-roadmap.md) | Planning docs. | -| **Topics hub** | [`topics/`](../topics/index.md) | Cross-cutting overviews (assets, multiplayer, security, …). | -| **Meta** | [`meta/`](../meta/Steam-Workshop-and-Tooling.md) | Workshop tooling notes, devserver API, backlog; **[architecture principles](../meta/system-architecture-principles.md)** (stack model & doc rules). | +| Area | Path | Purpose | +| ------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Landing** | [`intro` → `/wiki/docs`](/wiki/docs) | Site home. | +| **Getting started** | [`getting-started.md`](../getting-started.md) | Onboarding (`getting-started`) + this layout page. | +| **Workspace** | [`workspace/`](../workspace/index.mdx) | Map of `gregFramework/` repos on disk. | +| **Framework** | [`framework/`](../framework/architecture.md) | Architecture, hooks, Hexmod. | +| **Plugins** | [`plugins/`](../plugins/index.md) | `FFM.Plugin.*` assemblies; repos `gregExt.*` on disk. | +| **Mods** | [`mods/`](../mods/index.md) | Gameplay mods (`FMF.*`); repos `gregMod.*` on disk. | +| **Tools** | [`tools/`](../tools/workshop-uploader.md) | Workshop uploader and related. | +| **Guides** | [`guides/`](../guides/players/overview.md) | Role-based paths (players, mod developers, contributors, sponsors). | +| **Releases** | [`releases/`](../releases/index.mdx) | Per-artifact release notes. | +| **Reference** | [`reference/`](../reference/wiki-mapping.md) | Naming, catalogs, MCP, release channels. | +| **Contributors** | [`contributors/`](../contributors/repo-inventory.md) | Repo inventory, Docusaurus workflow, design system. | +| **Roadmap** | [`roadmap/`](../roadmap/unified-roadmap.md) | Planning docs. | +| **Topics hub** | [`topics/`](../topics/index.md) | Cross-cutting overviews (assets, multiplayer, security, …). | +| **Meta** | [`meta/`](../meta/Steam-Workshop-and-Tooling.md) | Workshop tooling notes, devserver API, backlog; **[architecture principles](../meta/system-architecture-principles.md)** (stack model & doc rules). | ## URLs - Doc id `intro` → `/wiki/docs`. - Typical doc → `/wiki/` (e.g. `mods/framework` → `/wiki/mods/framework`). -## Locales +## Language -- **Language:** English only — all curated content lives under `docs/`. +- **English only** — all curated content lives under `docs/`. ## Historical note diff --git a/docs/guides/players/newbies.md b/docs/guides/players/newbies.md index 089e89e..040b82b 100644 --- a/docs/guides/players/newbies.md +++ b/docs/guides/players/newbies.md @@ -20,7 +20,6 @@ Get FrikaMF running safely and understand the minimum concepts. - `.wiki/End-User-Release.md` - `.wiki/End-User-Release-en.md` - `.wiki/Known-Incompatibilities-en.md` -- `.wiki/Bekannte-Inkompatibilitaeten.md` ## Common mistakes diff --git a/docs/workspace/index.mdx b/docs/workspace/index.mdx index 77acb3a..a50e520 100644 --- a/docs/workspace/index.mdx +++ b/docs/workspace/index.mdx @@ -13,7 +13,7 @@ The **gregFramework** folder groups several repositories (split layout). Use thi | **Framework core** | `gregCore/` | MelonLoader host (`gregCore/framework/FrikaMF.csproj`), templates, **`gregCore/mcp-server/`**, optional `gregCore/plugins/` mirrors | | **Gameplay mods** | `gregMod./` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) | | **Framework plugins** | `gregExt./` | FFM plugins (`FFM.Plugin.*`) — **directly under `gregFramework/`** (the `gregExtensions/` umbrella is deprecated) | -| **ModManager (MAUI)** | `gregModmanager/` | **Gregtools Modmanager** — grafisches Frontend zur Verwaltung von Mods/Plugins; `WorkshopUploader.csproj`, **`WorkshopUploader.exe`**. Siehe [Architecture principles](/wiki/meta/system-architecture-principles). | +| **ModManager (MAUI)** | `gregModmanager/` | **Gregtools Modmanager** — UI for managing mods/plugins; `WorkshopUploader.csproj`, **`WorkshopUploader.exe`**. See [Architecture principles](/wiki/meta/system-architecture-principles). | | **Data Center exporter / assets** | `gregDataCenterExporter/` | Templates, exporter tooling, `FrikaModFramework/fmf_hooks.json` (among copies) | | **Documentation** | `gregWiki/` | This Docusaurus site (`docs/`) | | **Mod store / web (if cloned)** | `gregStore/` | Private Next.js modstore stack (`web/`, …) — optional sibling repo | diff --git a/docusaurus.config.js b/docusaurus.config.js index a533b79..60deac2 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -2,7 +2,8 @@ const config = { title: 'gregFramework', - tagline: 'Player-first help for Data Center mods; full technical docs for authors under Developers.', + tagline: + 'Player-first help for Data Center mods; full technical docs for authors under Developers.', favicon: 'img/logo.svg', url: 'https://frikadellental.de', baseUrl: '/', @@ -80,7 +81,12 @@ const config = { return redirectsToHere[existingPath]; } - if (existingPath.startsWith('/wiki/mods/') && existingPath.match(/fmf-(console-input-guard|gregify-employees|hex-label-mod|lang-compat-bridge|ui-replacement-mod)\/?$/)) { + if ( + existingPath.startsWith('/wiki/mods/') && + existingPath.match( + /fmf-(console-input-guard|gregify-employees|hex-label-mod|lang-compat-bridge|ui-replacement-mod)\/?$/, + ) + ) { const slug = existingPath.replace('/wiki/mods/', '').replace(/\/$/, ''); return [`/wiki/mods/extensions/${slug}`, `/wiki/mods/mods/${slug}`]; } @@ -212,10 +218,34 @@ const config = { {to: '/mods', label: 'Mod catalog'}, ], }, - {to: '/mods', label: 'Mods', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-mods', 'aria-label': 'Mods'}, - {href: 'https://discord.gg/greg', label: 'Discord', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-discord', 'aria-label': 'Discord'}, - {href: 'https://github.com/mleem97/gregFramework/issues', label: 'Support', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-support', 'aria-label': 'Support'}, - {href: 'https://github.com/mleem97/gregFramework', label: 'GitHub', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-github', 'aria-label': 'GitHub'}, + { + to: '/mods', + label: 'Mods', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-mods', + 'aria-label': 'Mods', + }, + { + href: 'https://discord.gg/greg', + label: 'Discord', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-discord', + 'aria-label': 'Discord', + }, + { + href: 'https://github.com/mleem97/gregFramework/issues', + label: 'Support', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-support', + 'aria-label': 'Support', + }, + { + href: 'https://github.com/mleem97/gregFramework', + label: 'GitHub', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-github', + 'aria-label': 'GitHub', + }, ], }, footer: { @@ -256,4 +286,3 @@ const config = { }; module.exports = config; - diff --git a/sidebars.js b/sidebars.js index f8da0ce..9315bf4 100644 --- a/sidebars.js +++ b/sidebars.js @@ -58,11 +58,7 @@ const sidebars = { { type: 'category', label: 'Tools & operations', - items: [ - 'meta/Steam-Workshop-and-Tooling', - 'meta/devserver-betas', - 'meta/IDEA_BACKLOG', - ], + items: ['meta/Steam-Workshop-and-Tooling', 'meta/devserver-betas', 'meta/IDEA_BACKLOG'], }, { type: 'category', diff --git a/src/i18n/homepage/index.ts b/src/i18n/homepage/index.ts index 6f9082b..51219e1 100644 --- a/src/i18n/homepage/index.ts +++ b/src/i18n/homepage/index.ts @@ -1,8 +1,13 @@ import {en} from './en'; -import type {HomepageContent} from './types'; +import type {HomepageContent, LocaleKey} from './types'; + +const homepageByLocale: Record = { + en, +}; export type {HomepageContent, LocaleKey} from './types'; -export function getHomepageContent(_locale: string): HomepageContent { - return en; +export function getHomepageContent(locale: string): HomepageContent { + void locale; + return homepageByLocale.en; } diff --git a/src/i18n/homepage/sharedLinks.ts b/src/i18n/homepage/sharedLinks.ts index a326e57..1205639 100644 --- a/src/i18n/homepage/sharedLinks.ts +++ b/src/i18n/homepage/sharedLinks.ts @@ -40,44 +40,6 @@ export const sharedWorkflowLinksEn: HomepageDocLink[] = [ }, ]; -export const sharedKnowledgeLinksDe: HomepageDocLink[] = [ - {title: 'Wiki-Start', description: 'Kurzüberblick — Spieler vs. Entwickler.', link: '/wiki'}, - { - title: 'Für Spieler', - description: 'Installation, Updates, Fehlerbehebung.', - link: '/wiki/guides/players/overview', - }, - { - title: 'WorkshopManager', - description: 'Workshop-Mods suchen und installieren.', - link: '/wiki/guides/players/enduser-workshop', - }, - { - title: 'Release-Kanäle', - description: 'Steam Workshop vs GitHub.', - link: '/wiki/reference/release-channels', - }, - {title: 'Mod-Katalog', description: 'Module mit Doku- und Download-Links.', link: '/mods'}, -]; - -export const sharedWorkflowLinksDe: HomepageDocLink[] = [ - { - title: 'Entwickler (Hub)', - description: 'Framework, Mods, Plugins, Referenz — alle technischen Links.', - link: '/wiki/developers', - }, - { - title: 'Mod-Entwickler-Guide', - description: 'Hooks, Setup, Einstieg.', - link: '/wiki/guides/mod-developers/overview', - }, - { - title: 'Contributor-Workflow', - description: 'Doku-Site und Repo-Konventionen.', - link: '/wiki/contributors/docusaurus-workflow', - }, -]; - export const homepageShellEn: Pick< HomepageContent, | 'heroBadge' @@ -107,33 +69,3 @@ export const homepageShellEn: Pick< knowledgeLinks: sharedKnowledgeLinksEn, workflowLinks: sharedWorkflowLinksEn, }; - -export const homepageShellDe: Pick< - HomepageContent, - | 'heroBadge' - | 'heroBrandLine1' - | 'heroBrandLine2Gradient' - | 'knowledgeSectionTitle' - | 'workflowSectionTitle' - | 'codeSectionTitle' - | 'codeSectionLead' - | 'ctaDiscordTitle' - | 'ctaDiscordLead' - | 'ctaDiscordButton' - | 'knowledgeLinks' - | 'workflowLinks' -> = { - heroBadge: 'gregFramework · Live-Dokumentation', - heroBrandLine1: 'greg', - heroBrandLine2Gradient: 'Framework', - knowledgeSectionTitle: 'Spieler — Einstieg', - workflowSectionTitle: 'Autoren & Contributors', - codeSectionTitle: 'Auf gregFramework aufbauen', - codeSectionLead: - 'C#-Mods auf MelonLoader, FFM-Plugins, optionale Rust-Brücken — Details für Autoren unter Entwickler.', - ctaDiscordTitle: 'Community', - ctaDiscordLead: 'Fragen zum Spielen oder Bauen — im Discord.', - ctaDiscordButton: 'Discord beitreten', - knowledgeLinks: sharedKnowledgeLinksDe, - workflowLinks: sharedWorkflowLinksDe, -}; diff --git a/src/i18n/modsPage.ts b/src/i18n/modsPage.ts index 7c2b230..34b57e8 100644 --- a/src/i18n/modsPage.ts +++ b/src/i18n/modsPage.ts @@ -11,7 +11,7 @@ export type ModsPageStrings = { legacyNoSplitRepo: string; }; -const strings: ModsPageStrings = { +const en: ModsPageStrings = { title: 'Mods & plugins catalog', description: 'Generated from the module catalog. Each entry links to its wiki article, release page, and download route.', @@ -26,5 +26,6 @@ const strings: ModsPageStrings = { }; export function getModsPageStrings(_locale: string): ModsPageStrings { - return strings; + void _locale; + return en; }