Files
2023-11-09 19:47:20 +07:00

36 lines
1.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using LuckPerms.Torch.PlatformApi;
using Torch.Managers;
using Torch.Managers.PatchManager;
using Torch.Managers.PatchManager.MSIL;
using Torch.Utils;
namespace LuckPerms.Torch.PlatformHooks;
internal static class PlayerPatch
{
[ReflectedMethodInfo(typeof(MultiplayerManagerBase), "RaiseClientJoined")]
private static MethodInfo Target = null!;
[ReflectedMethodInfo(typeof(PlayerPatch), nameof(Transpiler))]
private static MethodInfo TranspilerMethod = null!;
public static void Patch(PatchContext context)
{
context.GetPattern(Target).Transpilers.Add(TranspilerMethod);
}
private static IEnumerable<MsilInstruction> Transpiler(IEnumerable<MsilInstruction> instructions)
{
var list = instructions.ToList();
var newIndex = list.FindIndex(b => b.OpCode == OpCodes.Newobj);
list[newIndex] = list[newIndex].InlineValue(typeof(LpPlayerModel).GetConstructors(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)[0]);
return list;
}
}