Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of DirectPlay v1.0.4
IronLabs.DirectPlay.dll
Decompiled 2 hours agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("IronLabs.DirectPlay")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("IronLabs.DirectPlay")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("046ED613-45E5-48D3-9B7B-72703870DA05")] [assembly: AssemblyFileVersion("1.0.4")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.4.0")] namespace IronLabs.DirectPlay; [BepInPlugin("Ironlabs.Directplay", "IronLabs.DirectPlay", "1.0.4")] public sealed class DirectPlayPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(FejdStartup), "Start")] private static class StartPatch { private static void Postfix(FejdStartup __instance) { ModLogger.LogDebug("DirectPlay FejdStartup.Start postfix invoked."); StartPostfix(__instance); } } [HarmonyPatch(typeof(FejdStartup), "OnWorldStart")] private static class LocalSessionPatch { private static void Prefix() { ModLogger.LogDebug("DirectPlay FejdStartup.OnWorldStart prefix invoked."); PlatformPrefs.SetString("IronLabs.DirectPlay.LastSession", "local"); } } [HarmonyPatch(typeof(FejdStartup), "JoinServer")] private static class MultiplayerSessionPatch { private static void Prefix(FejdStartup __instance) { ModLogger.LogDebug("DirectPlay FejdStartup.JoinServer prefix invoked."); if (__instance.HasServerToJoin()) { PlatformPrefs.SetString("IronLabs.DirectPlay.LastSession", "multiplayer"); } } } private const string PluginGuid = "Ironlabs.Directplay"; private const string PluginName = "IronLabs.DirectPlay"; private const string PluginVersion = "1.0.4"; private const string LastSessionPreference = "IronLabs.DirectPlay.LastSession"; private const string LocalSession = "local"; private const string MultiplayerSession = "multiplayer"; private static readonly ModLog ModLogger = new ModLog(Logger.CreateLogSource("IronLabs.DirectPlay"), "IronLabs.DirectPlay"); private static bool _attemptedAutoStart; private readonly Harmony _harmony = new Harmony("Ironlabs.Directplay"); private static bool _patchesApplied; private void Awake() { PatchOwnNamespace(); ModLogger.LogInfo("IronLabs.DirectPlay 1.0.4 is loaded."); } private void PatchOwnNamespace() { if (_patchesApplied) { ModLogger.LogDebug("Harmony patches are already active; skipping registration."); return; } string text = typeof(DirectPlayPlugin).Namespace; Type[] types = Assembly.GetExecutingAssembly().GetTypes(); foreach (Type type in types) { if (type.Namespace == text) { _harmony.CreateClassProcessor(type).Patch(); } } _patchesApplied = true; ModLogger.LogDebug("Harmony patches were applied for the plugin namespace."); } private void OnDestroy() { if (_patchesApplied) { _harmony.UnpatchSelf(); _patchesApplied = false; } } private static void StartPostfix(FejdStartup startup) { if (_attemptedAutoStart || HasDisabledArgument()) { return; } _attemptedAutoStart = true; string profileFilename = PlatformPrefs.GetString("profile", ""); if (!RememberedProfileExists(profileFilename)) { return; } if (PlatformPrefs.GetString("IronLabs.DirectPlay.LastSession", "") == "multiplayer") { JoinLastMultiplayerSession(startup, profileFilename); return; } string worldName = PlatformPrefs.GetString("world", ""); if (RememberedWorldExists(worldName)) { startup.OnCharacterStart(); if (IsRememberedWorldSelected(startup, worldName)) { StartWorld(startup, profileFilename, worldName); } } } private static bool HasDisabledArgument() { string[] commandLineArgs = Environment.GetCommandLineArgs(); for (int i = 0; i < commandLineArgs.Length - 1; i++) { if (MatchesDisabledArgument(commandLineArgs, i)) { ModLogger.LogDebug("Received command-line switch: --directplay false."); return true; } } return false; } private static bool MatchesDisabledArgument(string[] arguments, int index) { if (string.Equals(arguments[index], "--directplay", StringComparison.OrdinalIgnoreCase)) { return string.Equals(arguments[index + 1], "false", StringComparison.OrdinalIgnoreCase); } return false; } private static bool RememberedProfileExists(string profileFilename) { if (string.IsNullOrEmpty(profileFilename)) { return false; } if (!SaveSystem.GetAllPlayerProfiles().Exists((PlayerProfile profile) => profile.GetFilename() == profileFilename)) { return false; } return true; } private static bool RememberedWorldExists(string worldName) { if (string.IsNullOrEmpty(worldName)) { return false; } if (SaveSystem.GetWorldList().Exists((World world) => world.m_name == worldName)) { return true; } return false; } private static void JoinLastMultiplayerSession(FejdStartup startup, string profileFilename) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) LocalServerList val = new LocalServerList((string)null, ServerListGui.GetServerListLocations("recent")); ServerJoinData val3; try { if (val.Count == 0) { goto IL_002a; } ServerJoinData val2 = val[0]; if (!((ServerJoinData)(ref val2)).IsValid) { goto IL_002a; } val3 = val[0]; startup.SetServerToJoin(val3); goto end_IL_0011; IL_002a: ModLogger.LogError("DirectPlay could not find a valid recent multiplayer server."); return; end_IL_0011:; } finally { ((IDisposable)val)?.Dispose(); } ModLogger.LogDebug($"DirectPlay is joining multiplayer server '{val3}' with character '{profileFilename}'."); startup.OnCharacterStart(); startup.JoinServer(); } private static bool IsRememberedWorldSelected(FejdStartup startup, string worldName) { World value = Traverse.Create((object)startup).Field("m_world").GetValue<World>(); if (value != null && value.m_name == worldName) { return true; } return false; } private static void StartWorld(FejdStartup startup, string profileFilename, string worldName) { ModLogger.LogDebug("DirectPlay is joining local world '" + worldName + "' with character '" + profileFilename + "'."); startup.OnWorldStart(); } } internal sealed class ModLog { private readonly ManualLogSource _logger; private readonly string _pluginName; internal ModLog(ManualLogSource logger, string pluginName) { _logger = logger; _pluginName = pluginName; } internal void LogFatal(object message) { Write((LogLevel)1, message); } internal void LogError(object message) { Write((LogLevel)2, message); } internal void LogWarning(object message) { Write((LogLevel)4, message); } internal void LogMessage(object message) { Write((LogLevel)8, message); } internal void LogInfo(object message) { Write((LogLevel)16, message); } internal void LogDebug(object message) { Write((LogLevel)32, message); } private void Write(LogLevel level, object message) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) _logger.Log(level, message); } }