Files
se-launcher/CringeLauncher/Patches/WhitelistRegistrationPatch.cs
zznty e5c4f0c07c
Some checks failed
Build / Compute Version (push) Successful in 4s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 2m12s
Build / Build Nuget package (NuGet) (push) Successful in 1m55s
Build / Build Nuget package (SharedCringe) (push) Has been cancelled
Build / Build Nuget package (CringePlugins) (push) Has been cancelled
Build / Build Launcher (push) Has been cancelled
first
2024-10-28 05:15:13 +07:00

37 lines
1.2 KiB
C#

using System.Reflection;
using System.Reflection.Emit;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using VRage.Scripting;
namespace CringeLauncher.Patches;
[HarmonyPatch]
public static class WhitelistRegistrationPatch
{
private static IEnumerable<MethodInfo> TargetMethods()
{
yield return AccessTools.Method(typeof(MyScriptWhitelist), "Register",
new[] { typeof(MyWhitelistTarget), typeof(INamespaceSymbol), typeof(Type) });
yield return AccessTools.Method(typeof(MyScriptWhitelist), "Register",
new[] { typeof(MyWhitelistTarget), typeof(ITypeSymbol), typeof(Type) });
}
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
var ins = instructions.ToList();
var throwIns = ins.FindAll(b => b.opcode == OpCodes.Throw).Select(b => ins.IndexOf(b));
foreach (var index in throwIns)
{
var i = index;
do
{
ins[i] = new(OpCodes.Nop);
} while (ins[--i].opcode.FlowControl != FlowControl.Cond_Branch);
ins[index] = new(OpCodes.Ret);
}
return ins;
}
}