Compartir vía


Cómo construir tu primer GameTest

¿Qué incluye un GameTest?

Un GameTest es un entorno en miniatura junto con un conjunto de condiciones iniciales, como un conjunto de criaturas o elementos. Después de utilizar ese entorno por un tiempo en el mundo de Minecraft, puedes ejecutar código condicional para evaluar si se cumplen tus expectativas.

Para crear conjuntos de GameTests, tienes que crear los GameTests mediante un pack de comportamiento y escribir un código JavaScript simple.

Importante

El Entorno de trabajo GameTest todavía es experimental. Tal como sucede con todos los experimentos, es posible que veas adiciones, eliminaciones y cambios en la funcionalidad en las versiones de Minecraft sin una advertencia avanzada significativa. Consulta el registro de cambios de Minecraft para obtener detalles sobre todo cambio que se introduzca en el Entorno de trabajo GameTest.

Para obtener más información sobre las características experimentales, consulta Características experimentales en Minecraft: Bedrock Edition.

Precaución

Debido a que el Entorno de trabajo GameTest agrega y actualiza funciones con frecuencia, te recomendamos usar las versiones beta más recientes de Minecraft. Consulta Versiones beta de Minecraft para obtener más información. En este ejemplo, se usa una sintaxis determinada con la intención de que sea compatible con las versiones beta más recientes.

Requisitos

Se recomienda que completes lo siguiente antes de comenzar este tutorial.

Elementos de GameTest

Dentro de un pack de comportamiento, cada GameTest consta de algunos elementos:

  • Una estructura que define el entorno físico para la prueba, así como cualquier entidad inicial. Dentro de Minecraft, puedes crear nuevas estructuras. Para ello, debes diseñarlas (generalmente mediante el Modo creativo) y luego debes colocar un bloque de estructura cerca. A continuación, puedes utilizar el bloque de estructura para guardar los resultados en el disco. Esto crea un archivo .mcstructure que puedes agregar a tu prueba.

Cuando se ejecutan GameTests en Minecraft, tu estructura se cargará y expandirá en Minecraft. Debes tener en cuenta que esta estructura se creará y se ejecutará en un mundo generalmente plano y más amplio, por lo que querrás asegurarte de que las criaturas estén contenidas en las estructuras que crees.

Luego, GameTests usa código JavaScript para definir la prueba, la cual incluye lo siguiente:

  • Registro de la prueba: un código breve para establecer una prueba en el entorno.

  • Configuración de la prueba: código adicional que establece condiciones dentro del entorno de estructura que se creó. Normalmente, se trata de la creación de criaturas adicionales.

  • Validación de la prueba: fragmentos de código adicionales escritos en JavaScript que evalúan si una prueba se completó correctamente o no.

Con esta base simple, se pueden crear GameTests con unas pocas líneas de código JavaScript más una estructura de Minecraft.

Empieza a construir tus propias pruebas

Para comenzar, te recomendamos usar tu propio pack de comportamiento. Para eso, crea una nueva carpeta en la carpeta development_behavior_packs llamada startertests.

Importante

Para crear y ejecutar tus propios GameTests, debes utilizar las versiones beta más recientes de Minecraft (versión 1.16.230 o posterior). Consulta Versiones beta de Minecraft para obtener más información.

Dentro de la carpeta startertests, también deberías incluir dos subcarpetas:

  • structures para guardar archivos de MCStructure
  • scripts para guardar archivos de JavaScript

Actualiza tu manifiesto

Puedes iniciar un manifiesto de pack de comportamiento con un archivo manifest.json dentro de la carpeta startertests, de la siguiente manera:

{
    "format_version": 2,
    "header": {
        "description": "Introductory tests for Minecraft GameTest Framework.",
        "name": "Starter Hello World Tests",
        "uuid": "1A2F42BD-98D4-4E0D-8E3F-934AB8A0C05E",
        "version": [0, 0, 1],
        "min_engine_version": [ 1, 14, 0 ]
    }
}

Un manifiesto de pack de comportamiento debe tener elementos adicionales para admitir GameTests. La sección modules necesita un módulo, que se agrega debajo de la sección del encabezado. Este módulo registra el punto de entrada del código JavaScript, de la siguiente manera:

    "modules": [
        {
            "description": "Script that implements basic starter tests.",
            "type": "javascript",
            "uuid": "1A1B53FC-5653-4A75-91B7-9CDF027674AE",
            "version": [0, 0, 1],
            "entry": "scripts/StarterTests.js"
        }
    ]

Ten en cuenta varias facetas de este module:

  • Este módulo es de tipo javascript.
  • El uuid debe ser único y generarse para tu proyecto. Consulta el tema Introducción a los Packs de comportamiento a fin de conocer herramientas que se usan para generar nuevos UUID.
  • El atributo entry apunta a un archivo de JavaScript que contiene el código de tu GameTest.

Además, deberás establecer dependencias en las API de Minecraft y el Entorno de trabajo GameTest. Puedes hacer esto con las siguientes dependencias adicionales agregadas debajo de la sección de módulos:

 "dependencies": [
      {
        "uuid": "b26a4d4c-afdf-4690-88f8-931846312678",
        "version": [ 0, 1, 0 ]
      },
      {
        "uuid": "6f4b6893-1bb6-42fd-b458-7fa3d0c89616",
        "version": [ 0, 1, 0 ]
      }
    ]

Advertencia

Ten en cuenta que aquí uuid se refiere a los componentes centrales de Minecraft. No deberías cambiar estos valores dentro de la sección de dependencias.

Importante

Como puedes ver, las pruebas del Entorno de trabajo GameTest se basan en las versiones "0.1.0" de las API de Minecraft y del Entorno de trabajo GameTest. La versión 0 indica que estas características aún son experimentales. Al igual que con todos los experimentos, mejoramos sus capacidades con el tiempo, y las firmas de las API pueden cambiar de una compilación a otra sin aviso previo. Consulta el registro de cambios de Minecraft para ver más cambios que se vayan produciendo.

Un archivo de manifiesto completo para un Pack de comportamiento con un GameTest se ve así:

{
    "format_version": 2,
    "header": {
        "description": "Introductory tests for Minecraft GameTest Framework.",
        "name": "Starter Hello World Tests",
        "uuid": "1A2F42BD-98D4-4E0D-8E3F-934AB8A0C05E",
        "version": [0, 0, 1],
        "min_engine_version": [ 1, 14, 0 ]
    },
    "modules": [
        {
            "description": "Script that implements basic starter tests.",
            "type": "javascript",
            "uuid": "1A1B53FC-5653-4A75-91B7-9CDF027674AE",
            "version": [0, 0, 1],
            "entry": "scripts/StarterTests.js"
        }
    ],
    "dependencies": [
      {
        "uuid": "b26a4d4c-afdf-4690-88f8-931846312678",
        "version": [ 0, 1, 0 ]
      },
      {
        "uuid": "6f4b6893-1bb6-42fd-b458-7fa3d0c89616",
        "version": [ 0, 1, 0 ]
      }
    ]
}

Registro de GameTest

Cada GameTest necesita un archivo de secuencia de comandos. Tal como vimos en la sección anterior, agregamos un módulo con un atributo entry que apunta a un archivo de JavaScript:

        "entry": "scripts/StarterTests.js"

Cuando se abre un mundo compatible con el Entorno de trabajo GameTest con este archivo registrado, se cargará y ejecutará tu archivo de JavaScript de GameTest. Aquí, la función principal de tu código es registrar GameTests posteriores.

Ten en cuenta que a medida que realices cambios en tus secuencias de comandos o estructuras, deberás salir del mundo y volver a cargarlo. Si hubiese algún error en la secuencia de comandos, lo verás en pantalla cuando se carga el mundo.

Para registrar tus secuencias de comandos de GameTest, te recomendamos usar la clase RegistrationBuilder. Puedes ver más información sobre la clase RegistrationBuilder en RegistrationBuilder.

Una línea de ejemplo de JavaScript que usa RegistrationBuilder se ve así:

// Registration Code for our test
GameTest.register("StarterTests", "simpleMobTest", simpleMobTest)
        .maxTicks(410)
        .structureName("startertests:mediumglass"); /* use the mediumglass.mcstructure file */

Esta línea de código establece una nueva prueba llamada simpleMobTest dentro del grupo de pruebas StarterTests. Agrega un parámetro adicional (maxTicks) que expresa que esta prueba puede tardar 410tics (20.5segundos) en ejecutarse. Finalmente, GameTest especifica una estructura MCStructure (startertests:mediumglass). Por convención, esto hace que Minecraft use un archivo MCStructure en /structures/startertests/mediumglass.mcstructure dentro de la carpeta del pack de comportamiento.

El resto del código de JavaScript usa la clase GameTestHelper para expresar realmente la prueba dentro de una función simpleMobTest.

Funciones de prueba

Dentro de las funciones de prueba es donde ocurre la ejecución real de una prueba. La función de prueba establece las condiciones iniciales para que se ejecute una prueba y devuelve una función de prueba adicional donde se evalúan los criterios.

Prueba de muestra:

import * as GameTest from "mojang-gametest";
import { BlockLocation } from "mojang-minecraft";

function simpleMobTest(test) {
  const attackerId = "fox";
  const victimId = "chicken";

  test.spawn(attackerId, new BlockLocation(5, 2, 5));
  test.spawn(victimId, new BlockLocation(2, 2, 2));

  test.assertEntityPresentInArea(victimId, true);

  // Succeed when the victim dies
  test.succeedWhen(() => {
    test.assertEntityPresentInArea(victimId, false);
  });
};

Algunas cosas a tener en cuenta en esta función de prueba:

  • Puedes usar el método spawn para crear nuevas criaturas en tu prueba.
  • Las coordenadas que se utilizan en las API como la del método spawn son relativas al bloque de estructura de tu .MCStructure.
  • assert : Las funciones de este tipo hacen que la ejecución del código se detenga si las condiciones descritas en el método no son verdaderas. Aquí, este código afirma que una entidad que es un pollo ya no está en la estructura (el booleano false en el método assertEntityPresentInArea le dice a la función que afirme que la entidad ya no está allí). Si se encuentra uno dentro de cualquiera de los bloques de la estructura, el código assert producirá un error. Sin embargo, si no se encuentra ningún pollo, pasamos a la línea de código test.succeed y la prueba pasa.

El archivo StarterTests.js de JavaScript completo se ve así:

import * as GameTest from "mojang-gametest";
import { BlockLocation } from "mojang-minecraft";

function simpleMobTest(test) {
  const attackerId = "fox";
  const victimId = "chicken";

  test.spawn(attackerId, new BlockLocation(5, 2, 5));
  test.spawn(victimId, new BlockLocation(2, 2, 2));

  test.assertEntityPresentInArea(victimId, true);

  // Succeed when the victim dies
  test.succeedWhen(() => {
    test.assertEntityPresentInArea(victimId, false);
  });
};

// Registration Code for our test
GameTest.register("StarterTests", "simpleMobTest", simpleMobTest)
        .maxTicks(410)
        .structureName("startertests:mediumglass"); /* use the mediumglass.mcstructure file */

Para terminar la muestra, te recomendamos usar un bloque de estructura para definir la prueba.

Para hacer esto, abre Minecraft y comienza un nuevo mundo en Modo creativo para construir tu entorno. Este es un corral de cristal simple construido para nuestro GameTest, hecho con bloques de cristal:

Estructura de cristal dentro de Minecraft

A continuación, te sugerimos exportar esto como una estructura. Ejecuta el siguiente comando en Minecraft:

/give @s structure_block

Esto te dará un bloque de estructura con el cual trabajar. Coloca un bloque de estructura junto a tu creación y usa la ventana emergente Bloque de estructura para enmarcar tu creación. Exporta esto como mediumglass.mcstructure.

Interfaz del Bloque de estructura en Minecraft

En tu pack de comportamiento, ve a la carpeta de estructuras y crea una subcarpeta llamada startertests.

Coloca este archivo mediumglass.mcstructure dentro de una subcarpeta llamada startertests. Debes seguir el mismo uso de mayúsculas y minúsculas que empleaste en tu código de JavaScript, por lo tanto, escribe todo en minúsculas. Copia el archivo mediumglass.mcstructure en esa carpeta. Tu carpeta debería verse así:

Diseño de carpeta de inicio predeterminado

Cómo ejecutar tus pruebas dentro del juego

Una vez que hayas completado el pack de comportamiento de tu GameTest, te sugerimos probarlo dentro de Minecraft. Para esto, crea un nuevo mundo de Minecraft. Para este nuevo mundo, comienza en Modo creativo y activa el experimento Entorno de trabajo GameTest. Te recomendamos agregar los Packs de comportamiento de GameTest en tu mundo. Si todo está correcto, deberías ver el pack de comportamiento Start Hello World GameTest cuando crees tu mundo:

Pack de comportamiento de Minecraft con GameTest

Haz clic en el mosaico de packs de comportamiento de Starter Hello World para activarlo.

Importante

También es probable que desees especificar algunos cambios adicionales en tu entorno:

  • Selecciona un mundo Plano.
  • Mantén la dificultad en Normal (las criaturas funcionan de manera diferente en mundos completamente Pacíficos).

Una vez que el mundo esté cargado, usa el comando /gametest para ejecutar pruebas.

Para ejecutar una prueba específica, usa /gametest run <classname>:<testName>, por ejemplo:

/gametest run startertests:simpleMobTest

¿Cuál es el siguiente paso?

Creaste tu primera prueba del Entorno de trabajo GameTest. GameTests te permite, como Creador, poner a prueba tu contenido, ejercitar tus entidades y validar tu mecánica de juego. Puedes ver la API de GameTest a continuación para obtener más información sobre lo que se incluye en el Entorno de trabajo GameTest.