Developers should be able remove existing minecraft features in order to overload or rebalance for their own purposes.
A way to uniquely identify existing Minecraft components and remove them from the game.
Allow developers to provide their own implementations of tools/blocks without touching the internal code.
Allow developers to modify drop properties of mobs based on the removal of existing Minecraft components (and add their own later).
Allow developers to remove linked features (items/blocks to their recipes) with a single function.
Justification and Use Case:
A developer may want to re-write the conventional base tool hierarchy. As an example, the developer wants to replace wood tools for flint tools and modify the other tools base properties such that a higher tier is viable. To do this, current references to tools (instanceof checks, mob drops, recipes and statistics) all need to be modified as they contain hard-coded type checks.
By modifying all hard-coded checks to conform to a dynamic type system would allow for a more plastic modding experience that is not dependant on working with existing features.
Other than removing all hardcoded block/item instanceof checks, statistics would be very difficult to manage. As an example, it may require an IPickaxe which automatically adds the functions to register block mining etc, therefore updating the statistics.