static bool simulate_patch(uint simulation, bool inputSteady, UseableVehicleBattery __instance, ref bool ___isUsing, ref bool ___isReplacing, ref float ___startedUse, ref float ___useTime, ref InteractableVehicle ___vehicle)
        {
            bool isReplaceable = Time.realtimeSinceStartup - ___startedUse > ___useTime * 0.75f;
            bool isUseable     = Time.realtimeSinceStartup - ___startedUse > ___useTime;

            if (___isReplacing && isReplaceable)
            {
                ___isReplacing = false;
                if (___vehicle != null && ___vehicle.isBatteryReplaceable)
                {
                    if (Plugin.TryGetCustomDataFor <ushort>(___vehicle.asset.GUID, FieldName, out ushort requiredBatteryID))
                    {
                        if (requiredBatteryID != __instance.player.equipment.itemID)
                        {
                            return(false);
                        }
                    }

                    ___vehicle.replaceBattery(__instance.player, __instance.player.equipment.quality);
                    ___vehicle = null;
                }
                if (Provider.isServer)
                {
                    __instance.player.equipment.useStepA();
                }
            }
            if (___isUsing && isUseable)
            {
                __instance.player.equipment.isBusy = false;
                ___isUsing = false;
                if (Provider.isServer)
                {
                    __instance.player.equipment.useStepB();
                }
            }

            return(false);
        }