using Aki.Reflection.Patching; using BepInEx; using EFT.UI; using System.Linq; using System.Reflection; using DynamicInteraction = GClass2815; using ItemContext = GClass2622; using ItemInfoInteractions = GClass2816; namespace IcyClawz.CustomInteractions { [BepInPlugin("com.IcyClawz.CustomInteractions", "IcyClawz.CustomInteractions", "1.3.0")] public class Plugin : BaseUnityPlugin { private void Awake() { new ItemUiContextPatch().Enable(); new InteractionButtonsContainerPatch().Enable(); } } internal class ItemUiContextPatch : ModulePatch { protected override MethodBase GetTargetMethod() => typeof(ItemUiContext).GetMethod("GetItemContextInteractions", BindingFlags.Public | BindingFlags.Instance); [PatchPostfix] private static void Postfix(ref ItemInfoInteractions __result, ItemUiContext __instance, ItemContext itemContext) { foreach (var provider in CustomInteractionsManager.Providers.OfType()) { var customInteractions = provider.GetCustomInteractions(__instance, itemContext.ViewType, itemContext.Item); if (customInteractions != null) { foreach (CustomInteraction customInteraction in customInteractions) { __result.AddCustomInteraction(customInteraction); } } } } } internal class InteractionButtonsContainerPatch : ModulePatch { protected override MethodBase GetTargetMethod() => typeof(InteractionButtonsContainer).GetMethod("method_3", BindingFlags.NonPublic | BindingFlags.Instance); [PatchPrefix] private static bool Prefix(ref InteractionButtonsContainer __instance, DynamicInteraction interaction) { if (interaction is CustomInteractionImpl customInteractionImpl) { __instance.AddCustomButton(customInteractionImpl); return false; } return true; } } }