Yes, but in vanilla Minecraft one of them must be a skeleton. (Or perhaps a ghast or blaze; though I've never personally seen them aggro another mob, I don't think the code specifically prevents it.) You have to get the other mob between the skeleton and something that will aggro the skeleton (such as yourself, or a snow golem) so that when it tries to shoot it hits the other mob instead. This will aggro the other mob, and then they'll fight.
It's fairly limited, but it is possible.
(Note that if a creeper is killed by a skeleton it will drop a music disc instead of gunpowder. These pit fights are fun and profitable!)
No, you can't make two zombies fight. Because of the way melee damage is coded, melee attacks can never cause "friendly fire": melee monsters acquire their target first, then deal direct damage to that target and only that target when they're in melee range. They don't attack like the player, where they swing and then damage is applied to whatever entity they connect with. Consequently, a zombie will never accidentally hit and damage another zombie. And since being damaged by another monster is the only way for a monster to aggro against another monster, zombies (and melee monsters in general) will never target each other.
No, ghasts won't fight each other. They appear to be programmed to ignore each other. I tested this by creating an arena with one "caged" ghast and one floating freely, switching to survival mode, and getting the caged one to shoot at me. Unlike skeletons, which will turn on each other when they suffer friendly fire, the ghast happily ignored the fireballs to its back and kept attacking me.
Your water elevator is misconfigured. It looks like it is flowing from under the sign, INTO your room. That is going to cause the bunching you are witnessing. I assume you are not seeing any zombies go up your water elevator.
Here's a 3 step process to make sure things are working well:
- Make sure mobs are going up your elevator (or following whatever
exit route you have designed.)
- Make sure you have not reached the "local" mob cap. That is, the number of mobs in a 9x9x9 region around the spawner is < 6.
- Make sure your global mob cap is not getting reached. The Spawn article on the Wiki explains this. Basically it's "Video Rendering Radius"^2 * 70 / 289. So, by default on single player this is around 70 hostile mobs.
One way to ensure 2 is to dig the floor down deeper than you have, cover it in water, and the mobs will immediately fall out of the way.
Best Answer
Here are the brief steps to ensure only zombies and players live.
(Thanks Unionhawk for pointing out my mistake in the first answer and providing suggestions on this answer!)
Make a redstone clock.
Connect 4 command blocks into the redstone clock.
Insert these commands into the command blocks:
3.5 If you are in a superflat world you may want to add a kill Slime command.
Remember to activate these command blocks at the same time.
Activate the redstone clock.
Done.
You can also make the super fast command block clock but you have to change the
doTileDrops
gamerule tofalse
.Here are the brief steps to spawn a zombie.
Place a command block on the ground.
set the following command:
Activate it.
This will make the zombie spawn 2 blocks on top of the command block.