Skip to content

SourceSharp/ModSharp.Template

Repository files navigation

ModSharp Module Template

A .NET template for creating ModSharp modules.

Installation

Install the template globally:

dotnet new install ModSharp.Module.Template

Or install from NuGet

Usage

Create a new ModSharp module:

dotnet new modsharp-module -n MyModule --DisplayName "My Module" --DisplayAuthor "Your Name"

Parameters

  • -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")

Generated Structure

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

Architecture

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

Lifecycle

Phase Order
Init Sharp Extensions -> Managers.Load -> Modules.Load
PostInit Managers.PostLoad -> Modules.PostLoad
Shutdown Modules.Unload -> Managers.Unload -> Sharp Extensions.Shutdown

Registering a new Manager or Module

// 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>();

Example

dotnet new modsharp-module -n MyAwesomeModule --DisplayName "My Awesome Module" --DisplayAuthor "John Doe"
cd MyAwesomeModule
dotnet build

Requirements

  • .NET 10.0 SDK
  • Sharp.Shared package (referenced automatically)

License

This template is provided as-is for creating ModSharp modules.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages