made MPRule/MPPlayerRule stateless and more declarative. all state changes and events handled at MPPlayer