It was coded that way only because it's then quite easy to implement the aggressiveness. No need to keep it that way at all.
As for the AI and monster behavior, we had a brainstorming with Keyboard once, we came up with an elegant solution to implementing the AI, but it never got completed; I have no idea whether Keyboard is working on it at all, might be worth it contacting him before you do something in this regard.
Here's the brainstorming thread: https://forum.cuberite.org/showthread.php?tid=820
Personally, I think the inheritance through PassiveMonster, AggressiveMonster etc is wrong, we should instead inherit through classes that provide some kind of extra values, such as TameableMob, and have the aggressiveness handled by the AI subsystem entirely.
As for the AI and monster behavior, we had a brainstorming with Keyboard once, we came up with an elegant solution to implementing the AI, but it never got completed; I have no idea whether Keyboard is working on it at all, might be worth it contacting him before you do something in this regard.
Here's the brainstorming thread: https://forum.cuberite.org/showthread.php?tid=820
Personally, I think the inheritance through PassiveMonster, AggressiveMonster etc is wrong, we should instead inherit through classes that provide some kind of extra values, such as TameableMob, and have the aggressiveness handled by the AI subsystem entirely.