A .NET template for creating ModSharp modules.
Install the template globally:
dotnet new install ModSharp.Module.TemplateOr install from NuGet
Create a new ModSharp module:
dotnet new modsharp-module -n MyModule --DisplayName "My Module" --DisplayAuthor "Your Name"-n|--name: The name of the module (required)--DisplayName: The display name shown in the module (default: "Project")--DisplayAuthor: The author name shown in the module (default: "Author")
MyModule/
├── MyModule.cs # Entry point implementing IModSharpModule
├── MyModule.csproj # Project file targeting .NET 10.0
├── InterfaceBridge.cs # Centralized access to ModSharp framework APIs
├── appsettings.json # Optional module configuration (loaded at startup)
├── Manager/
│ ├── IManager.cs # Manager lifecycle interface (Load/PostLoad/Unload)
│ └── PlayerManager.cs # Example: client listener, events, commands
├── Module/
│ ├── IModule.cs # Module lifecycle interface (Load/PostLoad/Unload)
│ ├── DamageMultiplierModule.cs # Example: hook into damage, subscribe to manager events
│ └── MoneyModule.cs # Example: ConVar, NetVar, inter-module dependency
└── Extensions/
├── SafeEvent.cs # Exception-safe event dispatch with read-only interface
├── ManagerServiceCollectionExtensions.cs # AddManager<T>() helpers
└── ModuleServiceCollectionExtensions.cs # AddModule<T>() helpers
The template follows a layered architecture:
| Layer | Purpose | Can depend on |
|---|---|---|
| Extensions | Sharp framework extensions (Commands, Events, Hooks) | Framework only |
| Manager | Infrastructure (client management, event dispatch) | Extensions, other Managers |
| Module | Business logic (game features) | Extensions, Managers, other Modules |
Managers should not depend on Modules. Avoid circular dependencies (A needs B, B needs A).
| Phase | Order |
|---|---|
| Init | Sharp Extensions -> Managers.Load -> Modules.Load |
| PostInit | Managers.PostLoad -> Modules.PostLoad |
| Shutdown | Modules.Unload -> Managers.Unload -> Sharp Extensions.Shutdown |
// Manager (no custom interface)
services.AddManager<MyManager>();
// Manager (with custom interface, for other layers to inject)
services.AddManager<IMyManager, MyManager>();
// Module (same pattern)
services.AddModule<MyModule>();
services.AddModule<IMyModule, MyModule>();dotnet new modsharp-module -n MyAwesomeModule --DisplayName "My Awesome Module" --DisplayAuthor "John Doe"
cd MyAwesomeModule
dotnet build- .NET 10.0 SDK
- Sharp.Shared package (referenced automatically)
This template is provided as-is for creating ModSharp modules.