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 SteamBlacklist v1.4.1
baer1.SteamBlacklist.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Steamworks; using Steamworks.Data; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.UIElements.Collections; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("baer1.SteamBlacklist")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.4.1.0")] [assembly: AssemblyInformationalVersion("1.4.1+e4cae5ea487582ab40038061e0c2c1e054b15c46")] [assembly: AssemblyProduct("SteamBlacklist")] [assembly: AssemblyTitle("baer1.SteamBlacklist")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SteamBlacklist { [BepInPlugin("baer1.SteamBlacklist", "SteamBlacklist", "1.4.1")] public class SteamBlacklist : BaseUnityPlugin { [HarmonyPatch(typeof(MenuManager), "Awake")] public class CheckLobbyCompatibilityPatch { private static void Prefix(MenuManager __instance) { if (Instance.DisplayedIncompatibilityPopup > 2) { return; } foreach (PluginInfo value in Chainloader.PluginInfos.Values) { if (!(value.Metadata.GUID != "BMX.LobbyCompatibility")) { Instance.DisplayedIncompatibilityPopup++; if (Instance.DisplayedIncompatibilityPopup == 1) { break; } Logger.LogWarning((object)"LobbyCompatibility detected, please uninstall it as it is incompatible with SteamBlacklist"); GameObject val = GameObject.Find("/Canvas/MenuContainer/"); GameObject val2 = GameObject.Find("Canvas/MenuContainer/LANWarning/"); if ((Object)(object)val2 == (Object)null) { break; } GameObject val3 = Object.Instantiate<GameObject>(val2, val.transform); ((Object)val3).name = "LOBBYCOMPATIBILITY_POPUP"; val3.SetActive(true); Transform val4 = val3.transform.Find("Panel/NotificationText"); TextMeshProUGUI component = ((Component)val4).GetComponent<TextMeshProUGUI>(); ((TMP_Text)component).text = "LobbyCompatibility detected\nPlease uninstall it as it is incompatible with the SteamBlacklist mod"; } } } } [HarmonyPatch(typeof(GameNetworkManager), "SteamMatchmaking_OnLobbyMemberJoined")] public class SteamPlayerJoinPatch { private static bool Prefix(Lobby lobby, Friend friend) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Expected I4, but got Unknown //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) Logger.LogDebug((object)$" >> SteamPlayerJoinPatch (SteamMatchmaking_OnLobbyMemberJoined) STEAM PLAYER JOINED {((Friend)(ref friend)).Name} {friend.Id} {((Friend)(ref friend)).Relationship}"); if (!GameNetworkManager.Instance.isHostingGame) { Logger.LogDebug((object)$" << SteamPlayerJoinPatch NOT HOST {((Friend)(ref friend)).Name} ({friend.Id}) [{((Friend)(ref friend)).Relationship}]"); return true; } bool flag = true; if (SteamId.op_Implicit(friend.Id) == SteamId.op_Implicit(((Lobby)(ref lobby)).Owner.Id)) { Logger.LogInfo((object)("Host joined: " + ((Friend)(ref friend)).Name)); Logger.LogDebug((object)$" << SteamPlayerJoinPatch HOST {((Friend)(ref friend)).Name} {friend.Id}"); return true; } if (GameNetworkManager.Instance.currentLobby.HasValue) { Relationship relationship = ((Friend)(ref friend)).Relationship; Relationship val = relationship; switch ((int)val) { case 5: Logger.LogInfo((object)$"Blocked player rejected: {((Friend)(ref friend)).Name} ({friend.Id})"); flag = false; break; case 6: { string arg; if (Instance.AllowBlockedFriends.Value) { arg = "allowed"; } else { arg = "rejected"; flag = false; } Logger.LogInfo((object)$"Blocked friend {arg}: {((Friend)(ref friend)).Name} ({friend.Id})"); break; } case 3: Logger.LogInfo((object)$"Friend joined: {((Friend)(ref friend)).Name} ({friend.Id})"); break; case 0: Logger.LogInfo((object)$"Player joined: {((Friend)(ref friend)).Name} ({friend.Id})"); break; case 4: Logger.LogInfo((object)$"Player joined: {((Friend)(ref friend)).Name} ({friend.Id})"); Logger.LogInfo((object)"You have sent them a friend request"); break; case 2: Logger.LogInfo((object)$"Player joined: {((Friend)(ref friend)).Name} ({friend.Id})"); Logger.LogInfo((object)"They have sent you a friend request"); break; case 1: Logger.LogInfo((object)$"Player joined: {((Friend)(ref friend)).Name} ({friend.Id})"); Logger.LogInfo((object)"You have ignored their friend request"); break; default: Logger.LogInfo((object)$"Player joined: {((Friend)(ref friend)).Name} ({friend.Id}) [Relationship: {((Friend)(ref friend)).Relationship}]"); break; } } Instance.SteamJoinQueue.TryAdd(SteamId.op_Implicit(friend.Id), flag); Logger.LogDebug((object)(" << SteamPlayerJoinPatch " + (flag ? "ALLOW" : "DENY") + $" {((Friend)(ref friend)).Name} {friend.Id}")); return true; } } [HarmonyPatch(typeof(GameNetworkManager), "ConnectionApproval")] public class PlayerJoinPatch { private static bool Prefix(ConnectionApprovalRequest request, ConnectionApprovalResponse response) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) Logger.LogDebug((object)$" >> PlayerJoinPatch (ConnectionApproval) UNITY-NETCODE PLAYER CONNECTED {request.ClientNetworkId} {request.Payload}"); if (GameNetworkManager.Instance.disableSteam) { Logger.LogDebug((object)" << PlayerJoinPatch STEAM DISABLED"); return true; } if (request.ClientNetworkId == 0) { Logger.LogDebug((object)" << PlayerJoinPatch HOST"); Logger.LogDebug((object)$" >> StartHostPatch (None) Resetting SteamJoinQueue (was {Instance.SteamJoinQueue.Count} items)"); Instance.SteamJoinQueue.Clear(); Logger.LogDebug((object)$" << StartHostPatch RESET SteamJoinQueue {Instance.SteamJoinQueue.Count}"); return true; } string[] array; ulong num; try { array = Encoding.ASCII.GetString(request.Payload).Split(","); num = (ulong)Convert.ToInt64(array[1]); Logger.LogDebug((object)$" >> STEAMID={num} - PAYLOAD={array}"); } catch (Exception) { Logger.LogDebug((object)$"Received invalid approval request: {request.Payload}"); return false; } Logger.LogDebug((object)$"Received approval request: {num}"); bool? flag; try { flag = DictionaryExtensions.Get<ulong, bool>((IDictionary<ulong, bool>)Instance.SteamJoinQueue, num, false); } catch (KeyNotFoundException) { flag = null; } if (flag.HasValue && flag.Value) { Instance.SteamJoinQueue.Remove(num); Logger.LogDebug((object)$" << PlayerJoinPatch ALLOW {request.ClientNetworkId} {array[1]}"); Logger.LogDebug((object)$"Playing with {num} - notifying steam..."); SteamFriends.SetPlayedWith(SteamId.op_Implicit(num)); return true; } response.Reason = (flag.HasValue ? "You have been blacklisted!" : "Invalid SteamID, please remove any AntiKick mods!"); response.CreatePlayerObject = false; response.Approved = false; response.Pending = false; Logger.LogInfo((object)string.Format("Denied approval request: {0} - {1}!", num, response.Reason.Split(",")[0].Replace("!", ""))); Instance.SteamJoinQueue.Remove(num); Logger.LogDebug((object)$" << PlayerJoinPatch DENY {request.ClientNetworkId} {response.Reason}"); return false; } } [HarmonyPatch(typeof(GameNetworkManager), "LobbyDataIsJoinable")] private class JoinGamePatch { private static bool Prefix(Lobby lobby, ref bool __result) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected I4, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Expected I4, but got Unknown //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_0492: Unknown result type (might be due to invalid IL or missing references) //IL_0494: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_045a: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_056d: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_04cc: Unknown result type (might be due to invalid IL or missing references) //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04da: Unknown result type (might be due to invalid IL or missing references) //IL_066d: Unknown result type (might be due to invalid IL or missing references) //IL_0632: Unknown result type (might be due to invalid IL or missing references) ((Lobby)(ref lobby)).Refresh(); string text = null; Friend owner = ((Lobby)(ref lobby)).Owner; Relationship relationship = ((Friend)(ref owner)).Relationship; Relationship val = relationship; switch ((int)val) { case 5: { ManualLogSource logger8 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger8.LogInfo((object)$"Lobby hosted by blocked player: {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); text = "Lobby is hosted by a blocked player!"; break; } case 6: { if (!Instance.AllowBlockedFriends.Value) { text = "Lobby is hosted by a blocked friend!"; } ManualLogSource logger7 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger7.LogInfo((object)$"Lobby is hosted by a blocked friend: {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); break; } case 3: { ManualLogSource logger6 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger6.LogInfo((object)$"Lobby host (Friend): {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); break; } case 0: { ManualLogSource logger5 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger5.LogInfo((object)$"Lobby host: {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); break; } case 4: { ManualLogSource logger4 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger4.LogInfo((object)$"Lobby host: {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); Logger.LogInfo((object)"You have sent them a friend request"); break; } case 2: { ManualLogSource logger3 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger3.LogInfo((object)$"Lobby host: {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); Logger.LogInfo((object)"They have sent you a friend request"); break; } case 1: { ManualLogSource logger2 = Logger; owner = ((Lobby)(ref lobby)).Owner; logger2.LogInfo((object)$"Lobby host: {((Friend)(ref owner)).Name} ({((Lobby)(ref lobby)).Owner.Id})"); Logger.LogInfo((object)"You have ignored their friend request"); break; } default: { ManualLogSource logger = Logger; owner = ((Lobby)(ref lobby)).Owner; string name = ((Friend)(ref owner)).Name; object arg = ((Lobby)(ref lobby)).Owner.Id; owner = ((Lobby)(ref lobby)).Owner; logger.LogInfo((object)$"Lobby host: {name} ({arg}) [Relationship: {((Friend)(ref owner)).Relationship}]"); break; } } if (text != null) { Object.FindObjectOfType<MenuManager>().SetLoadingScreen(false, (RoomEnter)11, text); __result = false; return false; } foreach (Friend member in ((Lobby)(ref lobby)).Members) { Friend current = member; if (Instance.IgnoreBlockedMembers.Value) { break; } if (SteamId.op_Implicit(current.Id) == SteamId.op_Implicit(((Lobby)(ref lobby)).Owner.Id)) { continue; } Relationship relationship2 = ((Friend)(ref current)).Relationship; Relationship val2 = relationship2; switch ((int)val2) { case 5: Logger.LogInfo((object)$"Lobby contains a blocked player: {((Friend)(ref current)).Name} ({current.Id})"); text = "Lobby contains a blocked player!"; break; case 6: if (!Instance.AllowBlockedFriends.Value) { text = "Lobby contains a blocked friend!"; } Logger.LogInfo((object)$"Lobby contains a blocked friend: {((Friend)(ref current)).Name} ({current.Id})"); break; case 3: Logger.LogInfo((object)$"Lobby member (Friend): {((Friend)(ref current)).Name} ({current.Id})"); break; case 0: Logger.LogInfo((object)$"Lobby member: {((Friend)(ref current)).Name} ({current.Id})"); break; case 4: Logger.LogInfo((object)$"Lobby member: {((Friend)(ref current)).Name} ({current.Id})"); Logger.LogInfo((object)"You have sent them a friend request"); break; case 2: Logger.LogInfo((object)$"Lobby member: {((Friend)(ref current)).Name} ({current.Id})"); Logger.LogInfo((object)"They have sent you a friend request"); break; case 1: Logger.LogInfo((object)$"Lobby member: {((Friend)(ref current)).Name} ({current.Id})"); Logger.LogInfo((object)"You have ignored their friend request"); break; default: Logger.LogInfo((object)$"Lobby member: {((Friend)(ref current)).Name} ({current.Id}) [Relationship: {((Friend)(ref current)).Relationship}]"); break; } if (text == null) { continue; } Object.FindObjectOfType<MenuManager>().SetLoadingScreen(false, (RoomEnter)11, text); __result = false; return false; } try { string data = ((Lobby)(ref lobby)).GetData("vers"); if (data != GameNetworkManager.Instance.gameVersionNum.ToString()) { Logger.LogDebug((object)$" == Lobby join denied! Invalid version: '{data}' lobby id: '{((Lobby)(ref lobby)).Id}'"); Object.FindObjectOfType<MenuManager>().SetLoadingScreen(false, (RoomEnter)5, $"Invalid version\nLobby: {data}\nClient: {GameNetworkManager.Instance.gameVersionNum}"); return false; } if (((Lobby)(ref lobby)).GetData("joinable") == "false") { Logger.LogDebug((object)" == Lobby join denied! Host lobby is not joinable"); Object.FindObjectOfType<MenuManager>().SetLoadingScreen(false, (RoomEnter)3, "The server host has already landed their ship."); __result = false; return false; } if (((Lobby)(ref lobby)).MemberCount >= 4 || ((Lobby)(ref lobby)).MemberCount < 1) { Logger.LogDebug((object)$" == Lobby join denied! Invalid member count {((Lobby)(ref lobby)).MemberCount} lobby id: '{((Lobby)(ref lobby)).Id}'"); Object.FindObjectOfType<MenuManager>().SetLoadingScreen(false, (RoomEnter)4, "The server is full!"); __result = false; return false; } Logger.LogDebug((object)$" == Lobby join accepted! Lobby id {((Lobby)(ref lobby)).Id} is OK"); __result = true; } catch (Exception ex) { Logger.LogError((object)("Lobby join denied! Error: " + ex.StackTrace)); __result = false; } return false; } } [HarmonyPatch(typeof(SteamLobbyManager), "LoadServerList")] public class LobbyListPatch { private static bool Prefix() { _Prefix(); return false; } private static async void _Prefix() { SteamLobbyManager lobbymanager = Object.FindObjectOfType<SteamLobbyManager>(); if (GameNetworkManager.Instance.waitingForLobbyDataRefresh) { return; } lobbymanager.refreshServerListTimer = 0f; ((TMP_Text)lobbymanager.serverListBlankText).text = "Loading server list..."; lobbymanager.currentLobbyList = null; LobbySlot[] array = Object.FindObjectsOfType<LobbySlot>(); LobbySlot[] array2 = array; foreach (LobbySlot slot in array2) { Object.Destroy((Object)(object)((Component)slot).gameObject); } LobbyQuery val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).WithMaxResults(20); val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).WithKeyValue("started", "0"); val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).WithKeyValue("versNum", GameNetworkManager.Instance.gameVersionNum.ToString()); val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).WithSlotsAvailable(1); switch (lobbymanager.sortByDistanceSetting) { case 0: val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).FilterDistanceClose(); break; case 1: val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).FilterDistanceFar(); break; case 2: val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).FilterDistanceWorldwide(); break; } lobbymanager.currentLobbyList = null; Debug.Log((object)"Requested server list"); GameNetworkManager.Instance.waitingForLobbyDataRefresh = true; val = SteamMatchmaking.LobbyList; ((LobbyQuery)(ref val)).WithSlotsAvailable(1); int sortByDistanceSetting = lobbymanager.sortByDistanceSetting; if (1 == 0) { } LobbyQuery val2; switch (sortByDistanceSetting) { case 0: val2 = SteamMatchmaking.LobbyList; val2 = ((LobbyQuery)(ref val2)).FilterDistanceClose(); val2 = ((LobbyQuery)(ref val2)).WithSlotsAvailable(1); val = ((LobbyQuery)(ref val2)).WithKeyValue("vers", GameNetworkManager.Instance.gameVersionNum.ToString()); break; case 1: val2 = SteamMatchmaking.LobbyList; val2 = ((LobbyQuery)(ref val2)).FilterDistanceFar(); val2 = ((LobbyQuery)(ref val2)).WithSlotsAvailable(1); val = ((LobbyQuery)(ref val2)).WithKeyValue("vers", GameNetworkManager.Instance.gameVersionNum.ToString()); break; default: val2 = SteamMatchmaking.LobbyList; val2 = ((LobbyQuery)(ref val2)).FilterDistanceWorldwide(); val2 = ((LobbyQuery)(ref val2)).WithSlotsAvailable(1); val = ((LobbyQuery)(ref val2)).WithKeyValue("vers", GameNetworkManager.Instance.gameVersionNum.ToString()); break; } if (1 == 0) { } LobbyQuery lobbyQuery = val; if (!lobbymanager.sortWithChallengeMoons) { lobbyQuery = ((LobbyQuery)(ref lobbyQuery)).WithKeyValue("chal", "f"); } SteamLobbyManager val3 = lobbymanager; val = ((lobbymanager.serverTagInputField.text == string.Empty) ? ((LobbyQuery)(ref lobbyQuery)).WithKeyValue("tag", "none") : ((LobbyQuery)(ref lobbyQuery)).WithKeyValue("tag", lobbymanager.serverTagInputField.text.Substring(0, Mathf.Min(19, lobbymanager.serverTagInputField.text.Length)).ToLower())); val3.currentLobbyList = await ((LobbyQuery)(ref val)).RequestAsync(); GameNetworkManager.Instance.waitingForLobbyDataRefresh = false; if (lobbymanager.currentLobbyList != null) { if (lobbymanager.currentLobbyList.Length == 0) { ((TMP_Text)lobbymanager.serverListBlankText).text = "No available servers to join."; } else { ((TMP_Text)lobbymanager.serverListBlankText).text = ""; } lobbymanager.lobbySlotPositionOffset = 0f; lobbymanager.loadLobbyListCoroutine = ((MonoBehaviour)lobbymanager).StartCoroutine(loadLobbyListAndFilter(lobbymanager.currentLobbyList, lobbymanager)); } else { Debug.Log((object)"Lobby list is null after request."); ((TMP_Text)lobbymanager.serverListBlankText).text = "No available servers to join (Steam did not respond)."; } } private static IEnumerator loadLobbyListAndFilter(Lobby[] lobbyList, SteamLobbyManager lobbymanager) { int hidden = 0; Lobby[] currentLobbyList = lobbymanager.currentLobbyList; for (int j = 0; j < currentLobbyList.Length; j++) { Lobby lobby = currentLobbyList[j]; string lobbyName = ((Lobby)(ref lobby)).GetData("name"); if (lobbyName.Length == 0) { continue; } Friend owner = ((Lobby)(ref lobby)).Owner; int num; if ((int)((Friend)(ref owner)).Relationship != 5) { if (!Instance.AllowBlockedFriends.Value) { owner = ((Lobby)(ref lobby)).Owner; num = (((int)((Friend)(ref owner)).Relationship == 6) ? 1 : 0); } else { num = 0; } } else { num = 1; } if (num != 0) { ManualLogSource logger = Logger; object[] obj2 = new object[4] { lobbyName, ((Lobby)(ref lobby)).Id, null, null }; owner = ((Lobby)(ref lobby)).Owner; obj2[2] = ((Friend)(ref owner)).Name; obj2[3] = ((Lobby)(ref lobby)).Owner.Id; string text = string.Format("Lobby hidden: '{0}' ({1}) by '{2}' ({3}) [Blocked", obj2); owner = ((Lobby)(ref lobby)).Owner; logger.LogInfo((object)(text + (((int)((Friend)(ref owner)).Relationship == 6) ? " friend]" : " host]"))); hidden++; continue; } if (Instance.AddArtificialMenuDelay.Value) { for (int i = 0; i < 10; i++) { yield return null; } } GameObject original = ((((Lobby)(ref lobby)).GetData("chal") != "t") ? lobbymanager.LobbySlotPrefab : lobbymanager.LobbySlotPrefabChallenge); GameObject obj = Object.Instantiate<GameObject>(original, lobbymanager.levelListContainer); obj.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, 0f + lobbymanager.lobbySlotPositionOffset); lobbymanager.lobbySlotPositionOffset -= 42f; LobbySlot componentInChildren = obj.GetComponentInChildren<LobbySlot>(); ((TMP_Text)componentInChildren.LobbyName).text = lobbyName.Substring(0, Mathf.Min(lobbyName.Length, 40)); ((TMP_Text)componentInChildren.playerCount).text = $"{((Lobby)(ref lobby)).MemberCount} / 4"; componentInChildren.lobbyId = ((Lobby)(ref lobby)).Id; componentInChildren.thisLobby = lobby; lobby = default(Lobby); } if (hidden > 0) { Logger.LogInfo((object)($"{hidden} " + ((hidden == 1) ? "lobby was" : "lobbies were") + " hidden because you blocked " + ((hidden == 1) ? "its host" : "their hosts"))); } else if (hidden == lobbymanager.currentLobbyList.Length) { ((TMP_Text)lobbymanager.serverListBlankText).text = "No available servers to join (All servers are hosted by people you've blocked)."; } yield return null; } } internal byte DisplayedIncompatibilityPopup = 0; public static SteamBlacklist Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } internal ConfigEntry<bool> AllowBlockedFriends { get; private set; } = null; internal ConfigEntry<bool> IgnoreBlockedMembers { get; private set; } = null; internal ConfigEntry<bool> AddArtificialMenuDelay { get; private set; } = null; public Dictionary<ulong, bool> SteamJoinQueue { get; set; } = new Dictionary<ulong, bool>(); private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Patch(); AllowBlockedFriends = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "allowBlockedFriends", true, "Allows blocked players in your friends list"); IgnoreBlockedMembers = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ignoreBlockedMembers", true, "true: Join lobby if host is not blocked\nfalse: Join lobby if host and members aren't blocked"); AddArtificialMenuDelay = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "addArtificialMenuDelay", true, "true: Lobby list is animated\nfalse: Lobby list created as fast as possible"); Logger.LogInfo((object)"Loaded SteamBlacklist mod v1.4.1"); } internal static void Patch() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("baer1.SteamBlacklist"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "baer1.SteamBlacklist"; public const string PLUGIN_NAME = "SteamBlacklist"; public const string PLUGIN_VERSION = "1.4.1"; } }