Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Con este tutorial, aprenderás lo siguiente:
- Cómo crear y usar archivos de comportamiento para cambiar el comportamiento de una entidad.
- Cómo utilizar componentes para expandir el comportamiento de una entidad.
- Cómo utilizar eventos para modificar componentes activos en función de alguna condición.
Requisitos
Se recomienda que completes lo siguiente antes de comenzar este tutorial.
Introducción
Los archivos de comportamiento en Minecraft: Bedrock Edition nos permiten personalizar cómo una entidad se comporta e interactúa con el mundo. Son parte de los packs de comportamiento, pero estos packs también pueden contener otros tipos de archivos, como funciones y mesas de botín.
Los archivos de comportamiento se introdujeron por primera vez junto con los complementos como una forma de personalizar el comportamiento de las entidades originales. Los componentes se crearon para dividir la mecánica de criaturas individuales, que antes estaba preestablecida, en pequeñas piezas que los creadores podrían usar para personalizar las entidades. Por ejemplo, la mecánica de domesticación que utilizan los perros y los gatos se transfirió al componente tameable
para que los creadores también pudieran hacer otras entidades domesticables.
El objetivo era hacer que todos los mecanismos de las entidades fueran personalizables a lo largo de los años.
Cuando se introdujo Agregar entidad, los archivos de comportamiento se convirtieron en una forma de crear nuevas entidades desde cero utilizando todos los componentes de las entidades originales.
Hay dos formas de utilizar los archivos de comportamiento:
- Permiten modificar las entidades originales. Desde que se introdujo Agregar entidad, esto solo debe usarse para pequeños ajustes en el juego original, no para contenido adicional.
- Permite crear entidades personalizadas. Los archivos de comportamiento sirven como base para las entidades personalizadas.
Descripción general del formato
Los archivos de comportamiento de la entidad se guardan en la carpeta entities
de tu pack de comportamiento. El juego carga todos los archivos en esa carpeta para que puedas usar subcarpetas a fin de administrar tus entidades. Los archivos usan la extensión .json
. A esta extensión la usan muchos archivos dentro de los complementos; por eso, si deseas evitar confusiones, puedes usar el formato extendido de la extensión .behavior.json
para los archivos de comportamiento específicamente. Para ver otros formatos extendidos de las extensiones, consulta esta tabla.
Los archivos están escritos en JSON y la estructura básica se ve de la siguiente manera:
{
"format_version": "1.13.0",
"minecraft:entity": {
"description": {
"identifier":"compass:example",
"is_spawnable":true,
"is_summonable":true
},
"components": {},
"component_groups": {},
"events": {}
}
}
Dentro de la etiqueta description
, algunas propiedades básicas definen la forma en que el juego registra la entidad:
Nombre del parámetro | Tipo | Descripción |
---|---|---|
identifier |
Cadena | Identificador de la entidad. Si se trata de una entidad personalizada en un complemento, debes usar un espacio de nombres único personalizado como se ve en el ejemplo. |
runtime_identifier |
Cadena | Identificador que el juego usa internamente. Se puede usar para heredar mecánicas personalizadas de entidades originales que aún no están disponibles como componente. Solo se puede especificar un identificador de tiempo de ejecución por entidad. Úsalo solo si es realmente necesario. En el caso de que la mecánica de una entidad original se convierta en componentes, se pueden perder funcionalidades si la mecánica dependía de un identificador de tiempo de ejecución. |
is_spawnable |
Booleano | Si es true , se agrega un huevo de generación para la entidad al inventario creativo. |
is_summonable |
Booleano | Si es true , es posible convocar a la entidad mediante el comando /summon . |
is_experimental |
Booleano | Si es true , la entidad puede utilizar funciones experimentales. La entidad solo funcionará en mundos experimentales. No se puede enviar contenido de Mercado si esta opción está habilitada. |
animations |
Objeto | Una lista de animaciones de comportamiento o controles de animación. Se pueden usar para ejecutar comandos o eventos en la entidad. |
scripts |
Objeto | Las secuencias de comandos funcionan de manera similar a cómo funcionan en los archivos de las entidades cliente y se pueden usar para reproducir animaciones de comportamiento. |
Componentes y grupos de componentes
Los componentes son propiedades o mecánica que puedes agregar a tu entidad. Hay dos formas de agregar componentes: directamente con la etiqueta de componente o mediante un grupo de componentes.
- Los componentes que se agregan a la etiqueta de componente base siempre están activos a menos que se eliminen a través de un grupo de componentes en un evento.
- Los grupos de componentes son conjuntos formados por uno o más componentes, los cuales no están activos de forma predeterminada, pero se los puede habilitar o deshabilitar a través de eventos. Por ejemplo, esto se puede usar para crear una variante de la entidad, como un bebé.
En este ejemplo, se utiliza un grupo de componentes para crear una variante bebé de la entidad. Los componentes definidos en la sección de componentes principales siempre están activos, mientras que los componentes del grupo de componentes baby
solo están activos cuando se agrega ese grupo.
{
"format_version": "1.13.0",
"minecraft:entity": {
"description": {
"identifier":"compass:example",
"is_spawnable":true,
"is_summonable":true
},
"components": {
"minecraft:physics":{}
},
"component_groups": {
"baby": {
"minecraft:behavior.follow_parent": {},
"minecraft:is_baby": {}
}
},
"events": {}
}
}
Todos los componentes de Minecraft utilizan el espacio de nombres minecraft:
.
Casi todos los componentes se definen como un objeto JSON. La mayoría de los componentes tienen opciones que se pueden especificar dentro de este objeto, pero algunos funcionan sin opciones, tal como puede verse en el ejemplo anterior.
Cómo aprender sobre los componentes
Puedes encontrar una lista completa de los componentes disponibles aquí.
Una buena forma de aprender sobre un componente y ver cómo se usa en la práctica es mirar los archivos de comportamiento de las entidades predeterminadas de Minecraft. Siempre puedes encontrar el pack de comportamiento predeterminado más reciente en esta URL: https://aka.ms/behaviorpacktemplate.
Nota
La forma en que funciona un componente a veces puede cambiar de una versión a otra. Entonces, si un componente de una entidad original no funciona en tu entidad, verifica si ambos archivos están usando la misma versión de formato. Te recomendamos que utilices siempre la última versión del componente, ya que siempre incluye mejoras y puede incluir correcciones.
Componentes esenciales
Nombre del componente | Opciones | Descripción |
---|---|---|
minecraft:physics |
has_collision has_gravity |
Necesitarás este componente en el 99% de las entidades personalizadas. Permite que la entidad permanezca en el suelo y reaccione a la interacción y los puñetazos de la manera en que podría esperarse. |
minecraft:scale |
value |
Establece la escala de la entidad. |
minecraft:collision_box |
width height |
Establece el cuadro de colisión de la entidad. Solo se pueden cambiar los valores de width y height . La caja de colisión siempre tiene una base cuadrada que se alinea con los ejes del mundo. |
minecraft:type_family |
family |
Establece una lista de familias de tipos en las que se encuentra la entidad. Otras entidades pueden probar las familias de tipos. Por ejemplo, para probar a qué criaturas les son hostiles. |
minecraft:movement |
value |
Establece la velocidad de movimiento de la entidad. 0.25es la velocidad normal de la mayoría de los animales en Minecraft. |
minecraft:movement.basic |
Consultar la documentación | Permite que la entidad se mueva por el suelo. |
minecraft:navigation.walk |
Consultar la documentación | Permite que la entidad recorra el mundo caminando. También hay otros tipos de navegación, como flotar. |
minecraft:is_baby minecraft:is_ignited minecraft:is_saddled minecraft:is_sheared minecraft:is_tamed minecraft:is_illager_captain |
:--- | Estos componentes no hacen nada por sí mismos, pero se pueden consultar en animaciones, controles de animación o de renderizado, lo que te permite controlar animaciones y otros elementos visuales desde el comportamiento de la entidad. |
minecraft:variant minecraft:mark_variant minecraft:skin_id |
value |
Estos componentes funcionan como los anteriores, pero en lugar de almacenar solo un estado de activado/desactivado, pueden almacenar un valor entero. |
Prioridades
La opción priority
se puede utilizar en todos los componentes de comportamiento (objetivos de IA). 0
es la prioridad más alta y la opción predeterminada de todos los componentes de comportamiento. Cuanto mayor sea el número, menor será la prioridad. Si la entidad está ocupada realizando un comportamiento de baja prioridad y aparece un comportamiento de alta prioridad, la entidad cambiará inmediatamente al comportamiento de mayor prioridad.
En el siguiente ejemplo, el componente hurt_by_target
tiene una prioridad más alta. Si se ataca a la entidad mientras pasea, apuntará inmediatamente al atacante.
"minecraft:behavior.random_stroll": {
"priority": 4
},
"minecraft:behavior.hurt_by_target": {
"priority": 1
}
Eliminación de componentes
Cuando un grupo de componentes se elimina de una entidad, el efecto de los componentes también se eliminará. En la mayoría de los casos, no causará ningún problema. Pero puede ocurrir que los componentes se sobrescriban entre sí. Por lo tanto, eliminar un componente no hará que vuelva al estado anterior de ese componente y no usará el mismo componente de otro grupo de componentes ni los componentes base. En cambio, el componente se eliminará por completo y se restablecerá a sus valores predeterminados.
Ejemplo: Supongamos que tienes una entidad con una escala de 2
definida en la etiqueta components
base. Agrega un grupo de componentes bebé con un componente de escala que establece la escala en 1.5
. Esto actualizará correctamente la escala a 1.5
. Ahora, vuelve a eliminar ese grupo de componentes. En lugar de volver a 2
, la escala ahora se restablecerá a 1
. Esto sucede porque, al eliminar el grupo de componentes, también se elimina el componente de escala por completo. La escala se restablecerá al valor predeterminado de 1
.
Hay algunos componentes para los cuales es importante tener esto en cuenta:
- Los componentes que cambian un valor de la entidad como
minecraft:scale
,minecraft:collision_box
ominecraft:variant
. - Los componentes de lista, como
minecraft:interact
,minecraft:environment_sensor
ominecraft:damage_sensor
- Cualquier otro componente que desees que tenga estados diferentes, como
minecraft:rideable
(diferentes recuentos o posiciones de asientos).
Para evitar este comportamiento, debes agregar un nuevo grupo de componentes con el estado actualizado del componente. En el caso del ejemplo de la escala, esto puede ser tan fácil como tener dos grupos de componentes diferentes para los distintos estados entre los que se puede cambiar:
"components": {
"minecraft:scale":{
"value": 2
}
},
"component_groups": {
"baby": {
"minecraft:scale": {
"value": 1.5
}
},
"adult": {
"minecraft:scale": {
"value": 2
}
}
},
"events": {
"set_baby":{
"remove": {"component_groups": ["adult"]},
"add": {"component_groups": ["baby"]}
},
"set_adult":{
"remove": {"component_groups": ["baby"]},
"add": {"component_groups": ["adult"]}
}
}
Eventos
Los eventos se utilizan para agregar y eliminar grupos de componentes de la entidad. En este ejemplo, se elimina un grupo de componentes antiguo mientras se agregan dos nuevos:
"events": {
"compass:example_event": {
"remove": {
"component_groups": ["compass:group_a"]
},
"add": {
"component_groups": ["compass:group_b","compass:group_c"]
}
}
}
Son muchos los componentes que pueden activar eventos, como minecraft:interact
o minecraft:environment_sensor
. También pueden activarlos las animaciones o el comando de invocación. El siguiente comando generará la entidad mientras se ejecuta el evento anterior.
/summon compass:example_entity ~ ~ ~ compass:example_event
Eventos integrados
Algunos eventos están integrados en Minecraft y se ejecutan si la entidad se genera en ciertas condiciones.
Nombre del evento | Descripción |
---|---|
minecraft:entity_born |
El evento se ejecuta cuando la entidad se genera por reproducción. |
minecraft:entity_spawned |
El evento se ejecuta siempre que se genera la entidad. Ten en cuenta que no se ejecutará si lo invocas (/summon ) de forma manual. |
minecraft:entity_transformed |
El evento se ejecuta cuando otra entidad se transforma en esta entidad. |
minecraft:on_prime |
El evento se ejecuta cuando la entidad está preparada y lista para explotar. |
Aleatorizadores
Si deseas aleatorizar qué grupo de componentes se agrega a la entidad, puede usar la función de aleatorización. Debes especificar una matriz de objetos, cada uno de los cuales puede agregar y eliminar grupos de componentes. El juego seleccionará y ejecutará aleatoriamente uno de estos objetos.
Opcionalmente, puede agregar un valor de ponderación a las opciones para cambiar la probabilidad de cada opción. Todos los pesos combinados cuentan como 100%. En el siguiente ejemplo, la entidad se generará como un bebé con una probabilidad del 20% (1 a 4), mientras que en los otros casos, no se agrega ningún grupo de componentes:
"events": {
"minecraft:entity_spawned": {
"randomize": [
{
"weight": 40
},
{
"weight": 10,
"add": {
"component_groups": ["baby"]
}
}
]
}
}
Secuencias
A veces es necesario ejecutar varias instancias de eventos una tras otra en el mismo evento. Por ejemplo, es posible que desees aleatorizar dos aspectos de la entidad, como el color y el patrón de marca. En este caso, puedes utilizar una secuencia. Las secuencias están estructuradas de manera similar a los aleatorizadores, pero cada elemento de la lista se ejecuta en orden. Esto también es muy útil en combinación con los filtros, que se explicarán en la siguiente sección.
Las secuencias y los aleatorizadores se pueden anidar de forma indefinida.
En este ejemplo, el grupo initial
se agregará cuando se genere la entidad. Después de eso, el componente bebé se asignará al azar como en la sección anterior.
"events": {
"minecraft:entity_spawned":{
"sequence": [
{
"add": {
"component_groups": ["initial"]
}
},
{
"randomize": [
{
"weight": 40
},
{
"weight": 10,
"add": {
"component_groups": ["baby"]
}
}
]
}
]
}
}
Filtros
Los filtros condicionan un evento o una parte de un evento probando una propiedad específica en la entidad actual: la entidad que interactúa o el mundo. Los filtros se pueden utilizar en cualquier evento, pero también se pueden utilizar directamente en algunos componentes.
Un evento puede tener hasta cinco parámetros. Los parámetros test
y value
son obligatorios, los demás son opcionales:
Tipo de prueba | La propiedad para hacer la prueba |
---|---|
value |
El valor para hacer la prueba. Puede ser una cadena cuando se prueban cadenas, un número cuando se prueban valores numéricos o un booleano. |
subject |
La entidad en la que se ejecuta la prueba. De manera predeterminada, es self , pero también puede apuntar a la otra entidad involucrada en una interacción. |
operator |
La forma en que se compara el valor. De manera predeterminada, es equals , pero también puede probar valores mayores o menores (en valores numéricos) o ver si hay desigualdad. |
domain |
Solo se usa en algunas pruebas para proporcionar un contexto adicional, como el espacio de inventario que se utiliza en la prueba has_equipment . |
Nota
Se puede encontrar una lista completa de los filtros y cómo estos parámetros interactúan con ellos en el documento técnico Entidades.
Un ejemplo mínimo de un filtro dentro de un evento podría verse de la siguiente manera: El grupo de componentes solo se puede agregar si la entidad tiene la etiqueta event_allowed
.
"events": {
"compass:example_event": {
"filters": {
"test": "has_tag",
"value":"event_allowed"
},
"add": {
"component_groups": ["baby"]
}
}
}
Si deseas utilizar varios filtros, puedes agruparlos utilizando las listas all_of
, any_of
o none_of
y los resultados obtenidos serán correctos si todos los filtros incluidos, cualquiera de los filtros incluidos o ninguno de los filtros incluidos funcionaron bien. Estas listas se pueden anidar indefinidamente.
En el siguiente ejemplo, agregamos una segunda condición al filtro. El evento solo se ejecutará si la entidad tiene la etiqueta del ejemplo anterior y está a menos de 10bloques del jugador más cercano.
"events": {
"compass:example_event": {
"filters": {
"all_of":[
{"test": "has_tag", "value": "event_allowed"},
{"test": "distance_to_nearest_player", "operator": "<", "value": 10}
]
},
"add": {
"component_groups": ["baby"]
}
}
}
¿Cuál es el siguiente paso?
Si alguna vez te quedas atascado o deseas comprender mejor cómo funciona un componente, verificar los archivos de comportamiento original te permitirá ver ejemplos prácticos. Desarmar una entidad original y aplicarle esos componentes a una entidad diferente es una excelente manera de comenzar. Toma el componente minecraft:teleport
de un Endermen y aplícaselo a un creeper. Haz que el jugador pueda montar un zombi. Haz creepers bebé.
El sistema de componentes te permite personalizar lo que hace tu entidad y cómo interactúa con el mundo. Si deseas obtener más información sobre cómo diseñar el aspecto y la forma de moverse de tu entidad, consulta el tutorial de animación y modelado de las entidades.