Costruire il tuo primo GameTest

Cosa c''è in un GameTest?

Un GameTest è un ambiente in miniatura e una serie di condizioni iniziali, come un set di creature o di oggetti. Una volta che quell'ambiente si è sviluppato nel mondo di Minecraft per un po', puoi eseguire codice condizionale che valuta se le tue aspettative sono state soddisfatte o meno.

La creazione di set di GameTest richiede la creazione di Gametest tramite un pacchetto di comportamenti e la scrittura di semplici codici JavaScript.

Importante

Il framework GameTest è ancora sperimentale. Come accade per tutti gli strumenti in fase di sperimentazione, potresti trovare aggiunte, rimozioni e modifiche alle funzionalità nelle versioni di Minecraft senza alcun preavviso significativo. Controlla il registro delle modifiche di Minecraft per i dettagli su eventuali modifiche al framework GameTest.

Per ulteriori informazioni sulle funzionalità sperimentali, visita Funzionalità sperimentali in Minecraft: Bedrock Edition

Attenzione

Dato che il framework GameTest aggiunge e aggiorna frequentemente le funzionalità, ti consigliamo di utilizzare le ultime versioni Beta di Minecraft. Consulta le Beta di Minecraft per maggiori informazioni. La sintassi di questo esempio deve essere compatibile con le ultime versioni beta.

Requisiti

Prima di iniziare questo tutorial, ti consigliamo di completare i seguenti passaggi:

Elementi di GameTest

All'interno di un pacchetto comportamenti, ogni GameTest è costituito da pochi elementi:

  • Una struttura che definisce l'ambiente fisico per il test e le eventuali entità di partenza. All'interno di Minecraft, puoi creare nuove strutture progettandole (in genere in modalità Creativa) e poi posizionando un blocco struttura nelle vicinanze. Quindi puoi utilizzare il blocco struttura per salvare i risultati su disco. In questo modo si crea un file .mcstructure che puoi aggiungere al tuo test.

Quando i GameTest vengono eseguiti in Minecraft, la tua struttura verrà caricata ed espansa in Minecraft. Dovresti notare che questa struttura verrà creata e gestita in un mondo generalmente piatto e più ampio, quindi ti consigliamo di assicurarti che tutte le creature siano inserite nelle strutture che crei.

I GameTest utilizzano quindi il codice JavaScript per definire il test, tra cui:

  • Registrazione test: una piccola quantità di codice che stabilisce un test nell'ambiente.

  • Configurazione test: codice aggiuntivo che imposta le condizioni all'interno dell'ambiente Struttura che è stato creato. In genere prevede la creazione di creature aggiuntive.

  • Convalida test: sono frammenti di codice aggiuntivi scritti in JavaScript che valutano se un test è stato superato o meno.

Con questa semplice base, i GameTest possono essere creati con poche righe di codice JavaScript più una struttura di Minecraft.

Inizia a creare i tuoi test

Per iniziare, ti consigliamo di iniziare con il tuo pacchetto di comportamenti. Per avviare il tuo pacchetto di comportamenti, crea una nuova cartella nella cartella development_behavior_packs denominata startertests.

Importante

Per creare ed eseguire i tuoi GameTest, devi utilizzare le ultime versioni Beta di Minecraft (versione 1.16.230 e successive). Consulta le Beta di Minecraft per maggiori informazioni.

All'interno della cartella startertests, dovrai anche includere due sottocartelle:

  • structures per contenere i file MCStructure
  • scripts per contenere i file JavaScript

Aggiornare il tuo manifest

Puoi avviare un manifest del pacchetto di comportamenti con un file manifest.json all'interno della cartella startertests, in questo modo:

{
    "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 manifest del pacchetto di comportamenti deve contenere altri elementi per supportare i GameTest. La sezione modules richiede un modulo, aggiunto sotto la sezione dell'intestazione, che registri il punto di ingresso del codice JavaScript, in questo modo:

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

Nota le diverse sfaccettature di questo module:

  • Questo modulo è di tipo javascript.
  • L'uuid deve essere univoco e generato per il tuo progetto. Consulta l'argomento Introduzione ai pacchetti di comportamenti per gli strumenti di generazione dei nuovi UUID.
  • L'attributo entry punta a un file JavaScript che contiene il tuo codice GameTest.

Inoltre, dovrai stabilire le dipendenze dalle API di Minecraft e dal framework GameTest. Puoi farlo con ulteriori dipendenze aggiunte sotto la sezione dei moduli di seguito:

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

Avviso

Nota che qui uuid si riferisce ai componenti principali di Minecraft. Non devi modificare questi valori all'interno della sezione delle dipendenze.

Importante

Come puoi vedere, il framework GameTest Framework testa in base alle versioni "0.1.0" delle API di Minecraft e del framework GameTest. La versione 0 indica che queste funzionalità sono ancora sperimentali. Come per tutti gli esperimenti, stiamo migliorando le loro capacità nel tempo e le firme API possono cambiare da una build all'altra senza preavviso. Controlla il registro delle modifiche di Minecraft per ulteriori modifiche nel tempo.

Un file manifest completo per un pacchetto di comportamenti con un GameTest presenta il seguente aspetto:

{
    "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 ]
      }
    ]
}

Registrazione del GameTest

Ogni GameTest ha bisogno di un file di script. Come hai visto nella sezione precedente, abbiamo aggiunto un modulo con un attributo entry che punta a un file JavaScript:

        "entry": "scripts/StarterTests.js"

Quando un mondo abilitato per il framework GameTest si apre con questo file registrato, il tuo file JavaScript GameTest verrà caricato ed eseguito. Qui il ruolo principale del tuo codice è registrare i GameTest a valle.

Nota che quando apporti modifiche agli script o alle strutture, dovrai uscire dal tuo mondo e ricaricarlo. Se ci sono errori di script, li vedrai visualizzati durante il caricamento del mondo.

Per registrare i tuoi script GameTest, ti consigliamo di utilizzare la classe RegistrationBuilder. Puoi vedere maggiori informazioni sulla classe Registration Builder su Registration Builder .

Una riga di esempio di JavaScript che utilizza RegistrationBuilder è simile a:

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

Questa riga di codice stabilisce un nuovo test chiamato simpleMobTest all'interno del gruppo di test StarterTests. Aggiunge un parametro aggiuntivo (maxTicks) che esprime che l'esecuzione di questo test può richiedere 410 tick (20,5 secondi). Infine, il GameTest specifica una MCStructure (startertests:mediumglass). Per convenzione, questo fa sì che Minecraft utilizzi un file MCStructure in /structures/startertests/mediumglass.mcstructure all'interno della cartella del pacchetto di comportamenti.

Il resto del JavaScript utilizza la classe GameTest Helper per esprimere effettivamente il test all'interno di una funzione simpleMobTest.

Funzioni del test

Le funzioni di test sono il luogo in cui avviene l'esecuzione effettiva di un test. La funzione di test imposta le condizioni iniziali per l'esecuzione di un test e restituisce una funzione di test aggiuntiva in cui vengono valutati i criteri.

Test di esempio:

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);
  });
};

Alcune cose da osservare in questa funzione di test:

  • Puoi usare il metodo spawn per creare nuove creature nel test.
  • Le coordinate utilizzate nelle API come spawn sono relative al blocco struttura della .MCStructure.
  • assert Le funzioni causano l'arresto dell'esecuzione del codice se le condizioni descritte nel metodo non sono true. Qui, questo codice afferma che un'entità pollo non è più nella struttura (il false nel metodo assertEntityPresentInArea dice alla funzione di affermare che l'entità non c'è più). Se ne viene trovato uno all'interno di uno qualsiasi dei blocchi della struttura, il codice assert genererà un errore. Tuttavia, se non viene trovato alcun pollo, ci dirigiamo verso la riga di codice test.succeed e il test viene superato.

Il file JavaScript StarterTests.js completo ha il seguente aspetto:

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 */

Per finire l'esempio, si consiglia di usare un blocco struttura per definire il test.

Per far ciò, apri Minecraft e inizia un nuovo mondo in modalità Creativa per costruire il tuo ambiente. Questa è una semplice penna di vetro che è stata costruita per il nostro GameTest, realizzata con blocchi di vetro:

Struttura in vetro all'interno di Minecraft

Successivamente, vorrai esportarla come una struttura. Esegui il seguente comando in Minecraft:

/give @s structure_block

In questo modo avrai un blocco struttura con cui lavorare. Posiziona un blocco struttura accanto alla tua creazione e usa il popup Blocco struttura per inquadrare la tua creazione. Esportala come mediumglass.mcstructure.

Interfaccia del blocco struttura in Minecraft

Nel pacchetto di comportamenti, vai alla cartella delle strutture e crea una sottocartella chiamata startertests.

Inserisci il file mediumglass.mcstructure in una sottocartella chiamata startertests. Ricordati di usare maiuscole e minuscole proprio come nel codice JavaScript, quindi tutto minuscolo. Copia il file mediumglass.mcstructure in quella cartella. La cartella dovrebbe avere un aspetto simile a questo:

Layout predefinito di partenza della cartella

Esecuzione dei test all'interno del gioco

Dopo aver completato il pacchetto di comportamenti di GameTest, ti consigliamo di provarlo all'interno di Minecraft. Per farlo, crea un nuovo mondo di Minecraft. Per questo nuovo mondo, ti consigliamo di iniziare in modalità Creativa e di attivare l'esperimento framework GameTest. Ti consigliamo di aggiungere i pacchetti di comportamenti di GameTest al tuo mondo. Se tutto è corretto, dovresti vedere il pacchetto di comportamenti di GameTest Start Hello World quando crei il tuo mondo:

Pacchetto di comportamenti di Minecraft con GameTest

Fai clic sul riquadro dei pacchetti di comportamenti Starter Hello World per attivarlo.

Importante

Probabilmente vorrai anche specificare alcune modifiche aggiuntive nel tuo ambiente:

  • Selezione di un mondo piatto
  • Mantieni la difficoltà Normale (le creature funzionano in modo diverso nei mondi in difficoltà completamente Pacifica)

Una volta caricato il mondo, usa il comando /gametest per eseguire i test.

Per eseguire un test specifico, usa /gametest run <classname>:<testName>, come:

/gametest run startertests:simpleMobTest

E adesso

Hai creato il tuo primo test con il framework GameTest. I GameTest consentono al creatore di ampliare i contenuti, esercitare le entità e convalidare le meccaniche di gioco. Puoi visualizzare l'API di GameTest di seguito per saperne di più su ciò che è incluso nel framework GameTest.