Server API
Server mods implement IServerMod (or inherit ServerModBase / ServerMelonModBase) to receive lifecycle callbacks and access server systems via S1DS.Server.
Lifecycle hooks¶
OnServerInitialize()OnServerStarted()OnServerShutdown()OnPlayerConnected(string playerId)OnPlayerDisconnected(string playerId)OnBeforeSave()/OnAfterSave()OnBeforeLoad()/OnAfterLoad()bool OnCustomMessage(string messageType, byte[] data, string senderId)
Use guard clauses and keep heavy work out of connect/disconnect handlers.
Server systems¶
Available in SERVER builds via S1DS.Server:
Players: player/session info and eventsNetwork: transport-level helpersGameSystems: access to game subsystemsPersistence: save/load managerIsRunning: server initialized statePlayerCount: number of connected players
Example:
public override void OnServerStarted()
{
var total = S1DS.Server.PlayerCount;
}
Registration¶
Auto-discovery¶
Any MelonMod that implements IServerMod is automatically discovered and registered. This works with:
SideAwareMelonModBase(both server and client hooks)ServerMelonModBase(server-only mod with auto-discovery)- Any class that implements
IServerModinterface
Manual registration¶
For more control, create separate server handler classes and register them explicitly:
// In your main MelonMod.OnInitializeMelon()
#if SERVER
var serverMod = new MyServerHandler();
ModManager.RegisterServerMod(serverMod);
#endif
If registration happens after the server is live, OnServerInitialize() is invoked immediately.
Messaging on server¶
Prefer the shared messaging API for client↔server communication. See the Messaging page for details.