From f9a40ba788935f53921aa5b6c94b270f2bb5cc9e Mon Sep 17 00:00:00 2001 From: Alexa <53471801+Alexa-RR@users.noreply.github.com> Date: Wed, 27 May 2026 13:13:20 +0300 Subject: [PATCH] patcher: install mod to /Mods, not /MelonLoader/Mods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MelonLoader 0.6.x scans \Mods\ for plugin DLLs and ignores anything under MelonLoader\Mods\. Our default plugin_dest was MelonLoader/Mods, so DorkNet.ClientMod.dll landed somewhere MelonLoader never looked at — Player.log showed '0 Mods loaded.' and Rec Room booted unpatched, hitting the real rec.net version check which returns UpdateRequired. Changed ClientPatcher's default + the manifest doc to 'Mods'. Per-version branches also need 'plugin_dest' = 'Mods' in their build-patcher-zip.ps1 manifest (separate commits). --- launcher/Backend/ClientPatcher.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/launcher/Backend/ClientPatcher.cs b/launcher/Backend/ClientPatcher.cs index 8af57ba..8ef0e4b 100644 --- a/launcher/Backend/ClientPatcher.cs +++ b/launcher/Backend/ClientPatcher.cs @@ -21,7 +21,7 @@ namespace DorkNet.Launcher.Backend; /// "$schema_version": 1, /// "loader_archive": "MelonLoader.zip", // optional — unzipped into <recroom-root>\ /// "plugin_dll": "DorkNet.ClientMod.dll", // required — copied to plugin_dest -/// "plugin_dest": "MelonLoader/Mods", // optional — defaults to "MelonLoader/Mods" +/// "plugin_dest": "Mods", // optional — defaults to "Mods" (top-level, MelonLoader scans it) /// "config_template": "dorknet-clientmod.json.template", // optional — rendered with {HOST}/{PHOTON_APPID}/{PHOTON_VOICE_APPID} /// "config_dest": "MelonLoader/UserData/dorknet-clientmod.json", // optional — defaults shown /// "old_plugin_paths": ["BepInEx/plugins/DorkNet.ClientPatch.dll"], // optional — deleted before install @@ -39,7 +39,11 @@ namespace DorkNet.Launcher.Backend; /// passes through unchanged. public sealed class ClientPatcher { - private const string DefaultPluginDest = "MelonLoader/Mods"; + // MelonLoader 0.6.x scans \Mods\ for plugin DLLs — + // NOT \MelonLoader\Mods\. UserData is correctly under + // \MelonLoader\UserData\ though, since that's what + // Mod.cs hardcodes when reading its config. + private const string DefaultPluginDest = "Mods"; private const string DefaultConfigDest = "MelonLoader/UserData/dorknet-clientmod.json"; public Task ApplyAsync(