It's hard to answer because the questions are pretty vague, since all the problems are not clearly specified. Basically you use the word 'hard', but not all things should be easy right? If the battle system is complex, then it's expected that it can be hard to maintain. Also 'hard' sometimes meas it's not wrong, just hard. If you feel it's wrong you should specifically show places which you think are.
As a pattern rule for similar complex sequences, you should try to minimize specifics and unify all actions as much as possible. I.e. you should eliminate A_Something, B_Something, C_Something and try to reduce it so some generic Something thus eliminating switch-like strictures for processing data. You can then define infinite sequences with simple structure like:
public class Action {
// ...
List<Action> subactions;
}
or even with a simple sequence List<Action>.
But again, this advice can be totally wrong, without more details. As suggest you to reduce this question to one, which troubles you most, and describe it carefully. Then you can create new questions if necessary.
As for updated question, it's still not very clear what is done on a server and what is on client. If client is a mere visualisation of a logic, it's necessary for a server to know such things as animation sequences, so it can tell a client how to animate battle. Can you clarify that aspect also? Also consider adding some client/server message processing code.