using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Aki.Reflection.Patching; using BepInEx.Bootstrap; using EFT; using HarmonyLib; namespace Aki.Core.Patches { /// /// Prevents loading of non-whitelisted client mods to minimize the amount of false issue reports being made during the public BE phase /// public class PreventClientModsPatch : ModulePatch { protected override MethodBase GetTargetMethod() { return AccessTools.Method(typeof(TarkovApplication), nameof(TarkovApplication.method_20)); } [PatchPrefix] private static void Prefix() { CheckForNonWhitelistedPlugins(); } private static void CheckForNonWhitelistedPlugins() { var whitelistedPlugins = new HashSet { "com.spt-aki.core", "com.spt-aki.custom", "com.spt-aki.debugging", "com.spt-aki.singleplayer", "com.bepis.bepinex.configurationmanager", "com.terkoiz.freecam", "com.sinai.unityexplorer", "com.cwx.debuggingtool-dxyz", "com.cwx.debuggingtool", "xyz.drakia.botdebug", "com.kobrakon.camunsnap", "RuntimeUnityEditor" }; var disallowedPlugins = Chainloader.PluginInfos.Values.Select(pi => pi.Metadata.GUID).Except(whitelistedPlugins).ToArray(); if (disallowedPlugins.Any()) { AkiCorePlugin._logger.LogError($"One or more non-whitelisted plugins were detected. Mods are not allowed in BleedingEdge builds of SPT. Illegal plugins:\n{string.Join("\n", disallowedPlugins)}"); throw new Exception("Non-debug client mods have been detected. Mods are not allowed in BleedingEdge builds of SPT - please remove them before playing!"); } } } }