Getting started
Client-side mods run inside the game alongside the OblivionMP client. They can read and change entity data, react to input, define custom data that is synchronized between players, and exchange custom network messages.
A mod is a .NET class library that references the OblivionMp.Sdk package (shipped with the server under mods/OblivionMp.Sdk.zip) and defines a single class extending ModBase. The mod loader instantiates this class when the game starts.
The quickest way to start is the official OblivionMP mod template. It ships a ready-to-build solution with client, server, and shared projects wired up against the SDK, plus a script that packages both mods. Clone it and follow the README.
using OblivionMp.Sdk;
using ReadyM.Api.DI;
public class MyMod : ModBase
{
public override string Name => "MyMod";
protected override void RegisterServices(IDependencyContainer services)
{
// register your services, components, RPC handlers, and archetype changes here
}
public override void Start()
{
// called once the game is ready; wire up key bindings and gameplay here
}
}
All SDK functionality is reached through the static SDK class — for example SDK.Input, SDK.Sync, and SDK.Services.
Everything registered in RegisterServices is resolved from the same dependency injection container the SDK uses. Any system or hosted service defined in your mod assembly is discovered and registered automatically.
Feature status
| Feature | Status |
|---|---|
| Key bindings | ✅ done |
| Player & entity data | 🚧 mostly done |
| Custom data sync | ✅ done |
| Gameplay systems | ✅ done |
| Custom RPC | ✅ done |
| Hosted services | ✅ done |
| Server-side mods | 🚧 primitive API |
| Save file API | 🚧 sync implemented, no public API yet |
| Mod manifests | 🔜 not enforced in 0.1.0 |