Yes its good to unhardcode stuff(altho using them in jars is pretty much the best way for performance gains, or just caching them), but there are things that should not be unhardcoded.
Keeping the handlers in the core gives you the possibility of having class based restriction so for example
if (itemId = infinite line of itemIds) or if (potions.class)
Doesnt seem much but used properly on the places where it can its a pretty good thing.