I am currently trying to implement a magic system, where a user can construct their own spells using spell components. What are recommended methods / structures to accomplish this?