Depends on #8
Initial idea is for Object to define a virtual use method that takes various parameters such as a user and target (depending on the context they might be the same, or one might be null - potentially tricky but can probably be worked around), then the use method is overridden by each item to provide specific functionality.