You translated correct. Instead of "otići" you can use another word "ići".
"Moram otići/ići u Starbucks kupiti joj kavu."
Croatian is a language without strong word order.
So, your sentence could be also like this: Moram joj otići/ići u Starbucks kupiti kavu. This is also correct but sounds little less used. Better is your translation.
Also it can be heard: "Moram otići/ići joj u Starbucks kupiti kavu" but this is the worst option, rarely spoken. It can be wrong understood*. Somebody could understand that you must go to her to get a coffee (for example: she's working in some store and you will get a coffee from her, not for her). If you use third option (Moram otići/ići joj u Starbucks kupiti kavu), it would better sound like this: Moram otići/ići kupiti joj kavu u Starbucks. This is correct and this is an example where it is known that you will get a coffee for her, and not buy from her.
There is no any other possible option with changing place for word "joj" so that sentence sounds correct.
* Second option could be understood like third one but with less posibilities to understand it wrong.