Redesigned the commands classes to try to make it a bit more clean

Finished adding userdata support