static bool Prefix(UnitAbilityResourceCollection __instance, BlueprintScriptableObject blueprint, ref int __result)
        {
            var owner = Helpers.GetField <UnitDescriptor>(__instance, "m_Owner");
            var connected_resources = owner?.Get <UnitPartConnectResource>()?.getConnectedResource(blueprint as BlueprintAbilityResource);

            if (connected_resources == null)
            {
                return(true);
            }

            int val = 0;
            UnitAbilityResource resource = Harmony12.Traverse.Create(__instance).Method("GetResource", blueprint).GetValue <UnitAbilityResource>();

            if (resource != null)
            {
                val = resource.Amount;
            }

            __result = 0;
            foreach (var cr in connected_resources)
            {
                __result += __instance.GetResourceAmount(cr);
            }

            __result = Math.Min(__result, val);
            return(false);
        }
        static bool Prefix(UnitAbilityResourceCollection __instance, BlueprintScriptableObject blueprint, int amount, bool restoreFull, UnitDescriptor ___m_Owner)
        {
            UnitAbilityResource resource = Harmony12.Traverse.Create(__instance).Method("GetResource", blueprint).GetValue <UnitAbilityResource>();

            if (resource == null)
            {
                return(true);
            }

            var fake_resource = resource.Blueprint?.GetComponent <FakeResourceAmountFullRestore>()?.fake_resource;

            if (fake_resource == null || !restoreFull)
            {
                return(true);
            }
            else
            {
                int maxAmount = fake_resource.GetMaxAmount(___m_Owner);
                resource.Amount = maxAmount;
                return(false);
            }
        }