Por lo general, los murciélagos spawnean en zonas cerradas con un nivel de luz muy bajo (entre 7 a 1), a partir de la capa 63 y más abajo de ella. Sabiendo esto hay 4 posibles soluciones:
- Iluminar la zona, hasta llegar al punto de tener un nivel de luz superior a 7.
- Construir las estructuras o construcciones en niveles superiores a la capa 63.
- Poner un sistema de comandos para matar los murciélagos en la zona que no se quiera que estén.
- Activar un gamerule que evite que todas los mobs spawneen naturalmente:
/gamerule doMobSpawning false
Si elegiste la opción 3 para hacer la solución, hay dos opciones adicionales (que son sencillas) y que te voy explicar a continuación
- Sin murciélagos en el mapa
Esta opción como lo dices para quitar la existencia total de murciélagos en el mapa, pero no recomiendo este comando debido a que muchos sistemas de comandos usan murciélagos en ellos, si no tienes la necesidad de usar algún sistema así, con un reloj de fill (o con un bloque de comandos de repetición en caso de estar haciendo el mapa en las snapshot de la 1.9), colocas el siguiente comando en el bloque:
/execute @a ~ ~ ~ /kill @e[type=Bat,r=20]
- Sin murciélagos en una zona del mapa
En este caso hay dos opciones, activación continua o activación al entrar, ambas depende del caso.
1. Activación continua: Es la que siempre esta activada, esta es recomendada en zonas pequeñas o de tamaño simétrico, ya que depende donde se coloque. Primero necesitamos un scoreboad de tipo dummy, el cual lo voy a llamar Bat, y quedaría así:
/scoreboard objectives add Bat dummy
Ya con el scoreboard activo ahora se necesita el siguiente comando:
/scoreboard players set @e[type=Bat,x=,y=,z=,r=] Bat 1
Recuerda definir las coordenadas y el radio que quieras que este afecte.
Ya con este, solo queda poner este siguiente comando.:
/kill @e[score_Bat_min=1,score_Bat=1]
2. Activación al entrar: En este caso en particular, este se activa cuando el jugador entra la zona, este en particular sirve bastante en zonas muy amplias o desiguales, donde sea difícil definir r. Pero, hay que estar muy pendiente de también colocar un sistema cuando el jugador sale de esta zona, o vuelve a entrar por otro método (a través de tp por ejemplo), en este caso usaremos el mismo scoreboard Bat ya que cumple con la función que necesita este, al entrar a una zona se debe colocar este comando:
/scoreboard players set @a[x=,y=,z=,r=] Bat 1
Este comando se coloca en las coordenadas de la entrada de la zona (o su salida, en caso que el jugador quiera regresar).
Con este comando ya activo, sólo necesitamos este otro:
/execute @a[score_Bat_min=1,score_Bat=1] ~ ~ ~ /kill @e[type=Bat,r=20]
Y al salir de la zona solo se específica el siguiente comando:
/scoreboard players set @a[x=,y=,z=,r=] Bat 0
Colocarlo tanto en la salida y en la entrada a la zona, a lado del activador (el primer comando, en términos de coordenada).
PD: Todos los comandos (excepto el de añadir el scoreboard y el gamerule) deben estar siempre activos a través de un reloj o de un bloque de comando de repetición (en caso de estar en la snapshor de la 1.9).
Eso es todo, quise explicarte todo para que puedas resolver tu problema de la forma que tu quieras, cualquier duda no dudes en decirla.