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.
This commit is contained in:
Marvin
2026-04-10 02:36:47 +02:00
parent 331847013d
commit 3b245ee966
12 changed files with 191 additions and 291 deletions

View File

@@ -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.

View File

@@ -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.<Domain>.<Action>.<Variant>.<Timing>
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: games 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 repositorys 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.

View File

@@ -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`.

View File

@@ -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/`.

View File

@@ -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/<doc-id-path>` (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

View File

@@ -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

View File

@@ -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.<Name>/` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) |
| **Framework plugins** | `gregExt.<Name>/` | 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 |

View File

@@ -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;

View File

@@ -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',

View File

@@ -1,8 +1,13 @@
import {en} from './en';
import type {HomepageContent} from './types';
import type {HomepageContent, LocaleKey} from './types';
const homepageByLocale: Record<LocaleKey, HomepageContent> = {
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;
}

View File

@@ -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,
};

View File

@@ -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;
}