Adds a modifier (this will run the reducer).
A Destroy function to remove the modifier. This can be passed to a Bin.
Removes a modfier. If it existed (and was removed) this will run the reducer. Returns true if the modifier was removed.
Overwrites the existing reducer and immediately runs the new reducer.
A status modifier holds a list of modifiers for some properties. It takes a reducer function that runs whenever this list changes (this is where you can calculate & apply changes).
Ex: In a movement status modifier you might have a property blockSprint and in your reducer if any modifier has blockSprint=true you would call SetSprintBlocked. This way you could have multiple sources blocking sprint without overwriting eachother.