mirror of
https://github.com/mleem97/gregWiki.git
synced 2026-04-11 03:29:19 +02:00
- Updated the README and various documentation files to reflect the new flat layout of the `gregFramework`, emphasizing the direct placement of repositories like `gregMod.<Name>/` and `gregExt.<Name>/` under `gregFramework/`. - Added details about the `gregModmanager/` and `gregDataCenterExporter/` directories, clarifying their roles and contents. - Improved descriptions and links throughout the documentation to ensure consistency and accuracy, enhancing user navigation and understanding of the project structure. - Adjusted language in several sections to better communicate the purpose and organization of the repositories. This commit improves the overall clarity and usability of the documentation.
4.7 KiB
4.7 KiB
id, title, sidebar_label, description, sidebar_position, tags
| id | title | sidebar_label | description | sidebar_position | tags | ||
|---|---|---|---|---|---|---|---|
| contributor-workshop | Contributor Guide — WorkshopManager | Contributor Guide | Development setup, building, publishing workflow, and release process for the WorkshopManager. | 20 |
|
Contributor Guide — WorkshopManager
This guide covers the development workflow for the WorkshopManager and how to publish mods to the Steam Workshop.
Prerequisites
- Visual Studio 2022 with .NET Multi-platform App UI and Windows App SDK workloads.
- .NET 9 SDK (for the WorkshopManager MAUI app).
- .NET 6 SDK (for framework, plugins, and mods targeting MelonLoader).
- Steam with Data Center installed (App ID 4170200).
Repository structure
Paths are relative to the gregFramework/ workspace root (split repos cloned side by side).
| Path | Purpose |
|---|---|
gregCore/framework/FrikaMF.csproj |
Core MelonLoader framework DLL |
gregExt.*/ |
FFM framework plugins (FFM.Plugin.* assemblies — one repo per plugin) |
gregMod.*/ |
Standalone gameplay mods (FMF.* assemblies) |
gregModmanager/WorkshopUploader.csproj |
WorkshopManager MAUI app |
gregFramework/scripts/Deploy-Release-ToWorkshop.ps1 |
Package all builds into Workshop folders (when present in your clone) |
gregFramework/scripts/Deploy-Release-ToDataCenter.ps1 |
Deploy to game for local testing |
Building
Build everything (solution)
dotnet build gregCore/FrikaMF.sln -c Release
Build standalone mods (per split repo)
dotnet build gregMod.ConsoleInputGuard/FMF.ConsoleInputGuard.csproj -c Release
dotnet build gregMod.GregifyEmployees/FMF.GregifyEmployees.csproj -c Release
dotnet build gregMod.HexLabelMod/FMF.HexLabelMod.csproj -c Release
dotnet build gregMod.LangCompatBridge/FMF.JoniMLCompatMod.csproj -c Release
Build WorkshopManager only
dotnet build gregModmanager/WorkshopUploader.csproj -c Release
Workshop project structure
Each mod/plugin gets its own folder under <GameRoot>/workshop/:
<GameRoot>/workshop/
├── FrikaModFramework/
│ ├── content/
│ │ └── Mods/
│ │ └── FrikaModdingFramework.dll
│ ├── metadata.json
│ └── preview.png
├── FFM.Plugin.Multiplayer/
│ ├── content/
│ │ └── FMF/
│ │ └── Plugins/
│ │ └── FFM.Plugin.Multiplayer.dll
│ ├── metadata.json
│ └── preview.png
└── ...
The content/ folder mirrors the game directory structure and is what Steam uploads.
Deploy to Workshop folders
pwsh -File scripts/Deploy-Release-ToWorkshop.ps1
This script:
- Builds all framework, plugin, and mod projects.
- Creates a Workshop project folder for each under
<GameRoot>/workshop/. - Copies the built DLL into
content/<target path>/. - Creates
metadata.jsonwith title, description, tags, and visibility.
Publishing workflow
GUI (recommended)
- Run the WorkshopManager app.
- Open a project from the Projects tab.
- Edit title, description, tags, visibility, and preview image.
- Write change notes describing what changed.
- Click Save and upload to Steam.
- After upload, the app syncs your local
content/with Steam's version.
CLI (headless)
WorkshopUploader.exe --mode publish --path <project-folder>
Post-upload sync
After publishing, the app re-downloads the item from Steam and replaces your local content/ folder. This ensures your working copy matches exactly what Steam has — similar to git pull after git push.
Extending the service layer
The SteamWorkshopService in gregModmanager/Services/SteamWorkshopService.cs wraps the Facepunch.Steamworks 2.3.3 API. Key methods:
| Method | Purpose |
|---|---|
PublishAsync |
Create or update a Workshop item with change notes |
SyncAfterPublishAsync |
Re-download from Steam to sync local content |
BrowseAsync |
Browse all Workshop items with sort/tag filters |
SearchAsync |
Text search across Workshop items |
ListSubscribedAsync |
List user's subscribed items |
ListFavoritedAsync |
List user's favorited items |
SubscribeAsync / UnsubscribeAsync |
Toggle subscription |
AddFavoriteAsync / RemoveFavoriteAsync |
Toggle favorite |
VoteAsync |
Vote up or down |
GetItemDetailsAsync |
Full item details with stats |
Adding a new mod to the release
- Create the mod as a split repo folder
gregMod.<Name>/under the gregFramework workspace (or clone an existinggregMod.*repo). - Add it to the
$modsarray inDeploy-Release-ToWorkshop.ps1. - Run the deploy script.
- Open the new workshop project in the WorkshopManager and publish.