Sorry. There’s an endless list of quirks and workarounds you’ll have to do to hide the container being a part.
Just let all things have the all the magic properties and either have an either-or magical or mundane
property or make a definition
in terms of another property (like whether enchantment bonus
is -32768) to delineate magic things from non-magic things. Then just check whether something’s magic before passing it to a notionally magic thing based rulebook or an activity notionally on magic things. Or go ahead and pass it if you prefer doing something like:
Zapping is a thing based rulebook.
This is the can't zap mundane things rule:
if the container in question is mundane, rule fails.
The can't zap mundane things rule is listed first in the Zapping rules.
(For any rulebook based on an object or subkind thereof, container in question
and supporter in question
can be used to refer to the object the rulebook was invoked with.)
You can also have phrases like:
to cast (m - magic thing): [special effect]
to cast (t - thing): do nothing.
It’ll go to the right place 'cause it’s like rule-ordering: more specific goes first (but there’s no fall-through.)
I talked about OOP-ish effects in I7 a couple times previously: