Not everything is clear to me: what class hierarchy (if any) you currently have; what programming language you use etc., but I will try to help.
1 hour ago, menyo said:
I could add a extra item class that inherits the regular Item class. This feels like overkill for just one item.
If you are talking about one type of item with several instances (I suppose a power plant doesn't create just a single Energy item and/or there may be multiple power plants) then I don't find this at all overkill; in fact this is what I might do.
2 hours ago, menyo said:
I could add a boolean to the item which tells me if it. All items get this extra boolean now just because energy is a mutant.
I wouldn't do this, especially if the Item class already has some abstract superclass or virtual functions (I'm assuming C++ or some similar language here). It may be a better idea to have a virtual bool isTradeable() or bool isEnergy() function, and override it in the Energy subclass (what you suggested in point 3) so that it returns false instead of true (or vice versa).
2 hours ago, menyo said:
If I abstract energy out of the item class I need to abstract the power plant as well since factories produces an "Item". Also, if an item needs energy to be produced I need to account for this change since currently I just iterate over the available "Items", subtract and produce. Although this feels like an elegant way to deal with the problem, due I'd really like to keep the energy as a Item.
If by abstracting out the energy class you mean creating a separate Energy class (or some other entity) independent from the Item class, then imho this can be a sufficiently elegant solution in case you hadn't intended to subclass Item (or in general use some sort of common class hierarchy for both Energy and regular Items) in the first place. (At least right now I can't come up with something better.)