AviiNL-rcon icon

rcon

Add RCON communication protocol to BepInEx compatible games

Last updated 3 months ago
Total downloads 557
Total rating 1 
Categories Libraries Server-side Utility
Dependency string AviiNL-rcon-0.0.1
Dependants 1 other mod depends on this mod

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.901 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured and includes unstripped Unity DLLs.

Preferred version: 5.4.901

README

RCON

This is an RCON library for BepInEx compatible games that do not ship with a native RCON implementation, like Valheim.

Usage

Add rcon.dll to your BepInEx/plugins folder. Run the server at least once to generate the required config files.

Configuration

The configuration file will be generated as BepInEx/config/nl.avii.plugins.rcon.cfg

Open this file with your favorite editor and change enabled to true.
Change the port number to something close to the game port, for Valheim I've used GamePort+2, and at least on Nitrado game servers, I am able to connect to it. (not sure about other providers)

> NOTE: If you host your own dedicated server, make sure to port forward the selected port if you wish to connect to it remotely.

The password field is self-explanatory.

After changing the values, restart the server.

Commands

This library does not ship with commands but is intended to be used as a dependency for other plugins.

Add a reference to rcon.dll to your own project

Adding a command

There are 2 ways to register commands from your own plugins.

Inline command example

[BepInPlugin("com.bepinex.plugins.example", "Example", "1.0")]
[BepInDependency("nl.avii.plugins.rcon", BepInDependency.DependencyFlags.HardDependency)]
[BepInProcess("valheim_server.exe")]
public class Plugin : BaseUnityPlugin
{
    rcon.rcon RCON;

    void OnEnable()
    {
        RCON = GetComponent<rcon.rcon>();
        if (RCON == null)
        {
            Logger.LogError("rcon plugin not loaded");
            return;
        }

        RCON.RegisterCommand(this, "test", (args) =>
        {
            Logger.LogInfo("Command &#x27;test&#x27; execution");

            return "string to return to rcon client";
        });
    }

    void OnDisable()
    {
        if (RCON == null)
        {
            Logger.LogError("rcon plugin not loaded");
            return;
        }

        RCON.UnRegisterCommand(this, "test");
    }
}

Or using a separate class handler, register the command in OnEnable() of your plugin:

RCON.RegisterCommand<TestCommand>(this, "test");

And Unregister in OnDisable()

RCON.UnRegisterCommand(this, "test");

Add create a TestCommand.cs class

using rcon;
class TestCommand : AbstractCommand
{
    public override string onCommand(string[] args)
    {
        // This will be executed on `test`
        // There is a protected property called "Plugin"
        // which holds a reference to your plugin class
        return "string to return to rcon client";
    }
}

Unknown Command Handler

If an issued command can not be found, the library fires an the rcon.OnUnknownCommand event.

This is an example to forward unknown commands to a connected client based on their steamid

void OnEnable()
{
    ...

    RCON.OnUnknownCommand += RCON_OnUnknownCommand;
}

private string RCON_OnUnknownCommand(string command, string[] args)
{
    var arguments = args.ToList();
    string steamid = arguments.First();
    if (steamid == null)
    {
        return "Unknown command";
    }

    List<ZNetPeer> peers = (List<ZNetPeer>)AccessTools.Field(typeof(ZNet), "m_peers").GetValue(ZNet.instance);
    var peer = peers.Where(x => ((ZSteamSocket)x.m_socket).GetPeerID().ToString().Trim().ToLower() == steamid.Trim().ToLower()).FirstOrDefault();
    if (peer == null)
        return $"Player with steamid {steamid} not connected";

    arguments.RemoveAt(0);

    ZRoutedRpc.instance.InvokeRoutedRPC(peer.m_uid, "ExamplePlugin", command, arguments);

    return $"Command {command} forwarded to {peer.m_uid}";
}

Available versions

Please note that the install buttons only work if you have compatible client software installed, such as the Thunderstore Mod Manager. Otherwise use the zip download links instead.

Upload date Version number Downloads Download link  
2021-3-27 0.0.1 557 Version 0.0.1 Install