Aparición e IA de mobs 5.46.0
VanillaMine hace aparecer los mobs como Bedrock. Los plugins pueden saber por qué existe un mob, impedir apariciones antes de que ocurran y decidir a quién atacan los mobs. La API usa los mismos nombres que Paper para que resulte familiar.
API: SpawnReason, Living::getSpawnReason(), MobPreSpawnEvent, EntityNaturalSpawnEvent, EntityTargetEvent.
Por qué existe un mob
use pocketmine\entity\SpawnReason;
$reason = $entity->getSpawnReason(); // p. ej. SpawnReason::NATURAL, SPAWN_EGG, SPAWNER, BREEDING, RAID…Valores: default, natural, structure, wandering_trader, village_cat, patrol, raid, spawn_egg, spawner, breeding, custom. SpawnReason::NATURAL_REASONS contiene los naturales. Los mobs de clases de plugins son custom; los plugins pueden poner cualquier texto con setSpawnReason(). El motivo se guarda con el mob.
Impedir apariciones
MobPreSpawnEvent se lanza antes de que el sistema de aparición natural cree un mob o una manada. Todavía no existe nada, así que cancelar no cuesta nada: úsalo para controlar las apariciones (regiones, mundos, límites por tipo).
use pocketmine\event\entity\MobPreSpawnEvent;
public function onPreSpawn(MobPreSpawnEvent $event) : void{
if($event->getEntityIdentifier() === "minecraft:phantom"){
$event->cancel();
}
// $event->getPosition(), $event->getReason()
}EntityNaturalSpawnEvent se lanza después de crear el mob y antes de que lo vean los jugadores (aparición natural, estructuras, comerciantes errantes, gatos de aldea). Cancelarlo elimina el mob. Úsalo cuando necesites la entidad.
Elegir objetivos
EntityTargetEvent se lanza cuando un mob elige un nuevo objetivo al que atacar. Cancélalo para dejar al mob sin objetivo, o cambia el objetivo.
use pocketmine\event\entity\EntityTargetEvent;
public function onTarget(EntityTargetEvent $event) : void{
if($event->getTarget() instanceof MyNpc){
$event->cancel();
}
}Plugins que hacen aparecer sus propios mobs
| Ajuste | Por defecto | Efecto |
|---|---|---|
mobs.spawning.count-all-mobs-for-spawning | true | Todos los mobs no persistentes cuentan para los límites de población, también los de huevos, generadores, reproducción y plugins. false = solo los naturales (como Paper con false). |
mobs.spawning.spawn-limits.<tipo> | -1 | Límites por cada 9×9 chunks para animal, monster, ambient, water_animal, pillager. -1 = vanilla (4, 8 en superficie / 16 bajo tierra, 2 bajo tierra, 36, 8). Un valor sustituye a la vez el límite de superficie y el subterráneo. |
mobs.ignore-plugin-npcs | true | Los mobs nunca atacan a los NPC de plugins: entidades vivas de clases de plugins que tienen nombre, están quietas para los clientes o no se guardan con el mundo. |
mobs.spawning.enabled | true | false desactiva la aparición natural y deja la aparición en manos de tu plugin. |
Los mobs persistentes y los NPC de plugins nunca cuentan para los límites.
