Thanks for your help. So heres my new structure:
Before game starts, preload every animation.
Client (User presses button) → [Remote Event] → Server Checks if stats are enough, if yes, subtracts energy, changes state boolean, sends → [Remote Event to every client so every player can see the animation of the ability] → Every client plays animation, when animation ends only the client of the user who used the ability will → [Remote Event to Server] → Server changes the isUsingMove1 state boolean back to false.
So only 3 remote events and some bindable events but bindable events don’t cause ping since they are server to server or client to client script.
I need to change state booleans to prevent moves from canceling out other moves, like if the user spams Move 1 or uses Move 1 and then suddenly presses move 2, the state booleans let the server reject the requests.