mirror of
https://github.com/mleem97/gregWiki.git
synced 2026-04-10 19:19:18 +02:00
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:
2
.github/copilot-instructions.md
vendored
2
.github/copilot-instructions.md
vendored
@@ -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.
|
||||
|
||||
|
||||
@@ -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: 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.
|
||||
|
||||
10
README.md
10
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`.
|
||||
|
||||
|
||||
@@ -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/`.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user