


A shared BepInEx mod for On Together that provides common utilities and a command framework for other mods to build on.
Alpha exposes a static AlphaPlugin.CommandManager (ChatCommandManager) that any mod can use to register in-game slash commands.
Implementing a command:
public class MyCommand : IChatCommand
{
public string Name => "mycmd";
public string ShortName => "mc"; // optional short alias
public string Description => "Does something cool.";
public string Namespace => "mymod"; // used for grouping and auto-help
public void Execute(string[] args) { /* ... */ }
}
Registering in your plugin's Awake():
AlphaPlugin.CommandManager?.Register(new MyCommand());
When the first command for a namespace is registered, a /{namespace}help command (and short form /{ns[0]}h) is automatically created for that namespace.
Built-in help usage:
/mymodhelpcommand
/mymodhelp verbose — includes descriptions
/mymodhelp mycmd — looks up a single command
ChatUtils)| Method | Description |
|---|---|
AddGlobalNotification(text) |
Displays a notification in the in-game global chat. |
SendMessageAsync(userName, text, isLocal) |
Sends a chat message (truncated to 250 chars). |
SendChunkedMessageAsync(userName, text, isLocal, strategy) |
Splits long text into ≤250-char chunks and sends each one. Strategy: "word" (default) or "hard". |
CleanTMPTags(input) |
Strips TextMeshPro formatting tags (e.g. <#ff0000>, <b>) from a string. |
CleanCommand() |
Hides a slash command from chat after it is processed (clears the input field). |
UISendMessage(text) |
Injects text into the chat input field and submits it programmatically. |
IStringChunker)Breaks arbitrary text into segments no longer than a given character limit.
| Implementation | Behaviour |
|---|---|
WordBoundaryChunker |
Splits on whitespace; avoids cutting words mid-word. |
HardCutChunker |
Hard-cuts at the character limit, no word awareness. |
PlayerUtils)| Method | Description |
|---|---|
GetUserName() |
Returns the local player's display name (may contain TMP tags). |
GetUserNameNoFormat() |
Returns the display name with TMP tags stripped. |
AlphaPlugin.RunOnMainThread(() => { /* runs on Unity main thread next Update */ });
Useful for scheduling Unity API calls from background threads (e.g. WebSocket handlers).
All settings are managed by BepInEx and can be changed in BepInEx/config/com.andrewlin.ontogether.alpha.cfg.
| Section | Key | Default | Description |
|---|---|---|---|
| General | EnableFeature |
true |
Master enable/disable switch for Alpha. |
| General | ShowCommand |
false |
Keep the slash command visible in chat after execution. |
Install via Thunderstore / r2modman, or drop the .dll into BepInEx/plugins/.
Dependency: BepInEx-BepInExPack-5.4.2305
MIT