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!");
}
}
}
}