What is the difference between a BindableEvent and a RemoteEvent and which one should be used?
BindableEvent This is for communication based on the same side, e.g server talking with another server script, or the client talking to another client. This cannot do server to client (vice versa) that's what the RemoteEvent is for
RemoteEvent This allows communication between the server and the client (vice versa). This is what you'll be using the most often (as well as remote function) to get past FE blockage.
RemoteFunction BindableFunction The function version of both of these do the same thing respectfully, but they do use different working and how to wrap them in a function. Also, they require for something to be returned and will yield until it happens. Useful for making parts for example.
BindableEvent
s are used to send messages from the server to the server, and from a client to the same client. RemoteEvent
s are used to send messages from the server to client(s), and to send messages from a client to the server.