Freigeben über


Dein erster GameTest

Was ist ein GameTest?

Ein GameTest ist eine Miniaturumgebung mit einer Reihe von Startbedingungen, z.B. verschiedenen Kreaturen oder Gegenständen. Nachdem diese Umgebung für eine Weile in der Minecraft-Welt aktiv war, kannst du bedingten Code ausführen, um zu bewerten, ob deine Erwartungen erfüllt wurden.

Der Aufbau von GameTest-Sets setzt voraus, dass du deine GameTests über ein Verhaltenspaket erstellst und einfachen JavaScript-Code schreibst.

Wichtig

Das GameTest-Framework ist noch experimentell. Wie bei allen Experimenten kann es zu Ergänzungen, Entfernungen und Änderungen der Funktionalität von Minecraft-Versionen ohne größere Vorwarnung kommen. Im Minecraft Changelog findest du Details zu Änderungen am GameTest-Framework.

Unter Experimentelle Funktionen in Minecraft: Bedrock Edition findest du weitere Informationen zu experimentellen Funktionen.

Achtung

Da dem GameTest-Framework häufig Funktionen und Aktualisierungen hinzugefügt werden, empfehlen wir die Verwendung der neuesten Beta-Versionen von Minecraft. Weitere Informationen findest du unter Minecraft Betas. Die Syntax dieses Beispiels wurde so gestaltet, dass sie mit den neuesten Beta-Versionen kompatibel ist.

Voraussetzungen

Es wird empfohlen, vor Beginn dieses Tutorials Folgendes abzuschließen:

GameTest-Elemente

Innerhalb eines Verhaltenspakets gehören zu jedem GameTest einige Elemente:

  • Eine Konstruktion, die die physische Umgebung für den Test sowie alle Start-Objekte festlegt. Du kannst in Minecraft neue Konstruktionen erstellen, indem du sie entwirfst (normalerweise im Kreativmodus) und dann einen Konstruktionsblock in der Nähe platzierst. Anschließend kannst du mit dem Konstruktionsblock die Ergebnisse auf einem Datenträger abspeichern. Dadurch wird eine .mcstructure-Datei erstellt, die du dem Test hinzufügen kannst.

Wenn GameTests in Minecraft ausgeführt werden, wird deine Konstruktion geladen und in Minecraft erweitert. Beachte, dass diese Konstruktion in einer generell flachen und breiteren Welt erstellt und ausgeführt wird. Denke daher daran, dass alle Kreaturen in die von dir erstellten Konstruktionen eingeschrieben werden.

GameTests verwenden anschließend JavaScript-Code zur Definition des Test, einschließlich:

  • Testregistrierung: eine kleine Menge Code zur Einrichtung eines Tests in der Umgebung.

  • Testeinrichtung: zusätzlicher Code, der Bedingungen innerhalb der erstellten Konstruktionsumgebung einrichtet. In der Regel ist dies die Erstellung zusätzlicher Kreaturen.

  • Testvalidierung: zusätzliche Codeausschnitte in JavaScript, die auswerten, ob ein Test erfolgreich oder nicht erfolgreich abgeschlossen wurde.

Auf dieser einfachen Grundlage können GameTests mit wenigen Zeilen JavaScript-Code und einer Minecraft-Konstruktion erstellt werden.

Erstellen deiner eigenen Tests

Du solltest mit deinem eigenen Verhaltenspaket beginnen. Erstelle dazu zunächst einen neuen Ordner im Ordner development_behavior_packs und nenne diesen startertests.

Wichtig

Zum Erstellen und Ausführen deiner eigenen GameTests musst du die neuesten Beta-Versionen von Minecraft (ab Version 1.16.230) verwenden. Weitere Informationen findest du unter Minecraft Betas.

Innerhalb des Ordners startertests sollten sich auch zwei Unterordner befinden:

  • structures für MCStructure-Dateien
  • scripts für JavaScript-Dateien

Aktualisieren der Paketliste

Du kannst eine Verhaltenspaketliste mit einer manifest.json-Datei im Ordner „startertests“ wie folgt beginnen:

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

Eine Verhaltenspaketliste muss über zusätzliche Elemente verfügen, um GameTests zu unterstützen. Der Abschnitt modules benötigt ein Modul, das unter dem Kopfzeilenabschnitt hinzugefügt wird und deinen JavaScript-Codeeingabepunkt wie folgt registriert:

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

Beachte einige Aspekte zu diesem module:

  • Dieses Modul hat den Typ javascript.
  • Die uuid muss eindeutig sein und für dein Projekt generiert werden. Tools zum Generieren neuer UUIDs findest du unter Einführung in das Thema Verhaltenspakete.
  • Das Attribut entry verweist auf eine JavaScript-Datei, die den GameTest-Code enthält.

Darüber hinaus musst du Abhängigkeiten zu Minecraft-APIs und zum GameTest-Framework einrichten. Dazu kannst du zusätzliche Abhängigkeiten unter dem Modul-Abschnitt hinzufügen:

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

Warnung

Beachte, dass sich uuid hier auf die Kernkomponenten von Minecraft bezieht. Du solltest diese Werte im Abschnitt zu den Abhängigkeiten nicht ändern.

Wichtig

Wie du siehst, hängen GameTest-Framework-Tests von den Versionen „0.1.0“ der Minecraft-APIs und dem GameTest-Framework ab. Version0 gibt an, dass diese Funktionen noch experimentell sind. Wie bei allen Experimenten verbessern wir die Funktionen im Laufe der Zeit, und API-Signaturen können sich von Build zu Build ohne vorherige Ankündigung ändern. Im Minecraft Changelog kannst du dich über Änderungen im Laufe der Zeit informieren.

Eine vollständige Paketlistendatei für ein Verhaltenspaket mit einem GameTest sieht wie folgt aus:

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

GameTest-Registrierung

Jeder GameTest benötigt eine Skriptdatei. Wie im vorherigen Abschnitt gesehen, haben wir ein Modul mit einem entry-Attribut hinzugefügt, das auf eine JavaScript-Datei verweist:

        "entry": "scripts/StarterTests.js"

Wenn eine für das GameTest-Framework geeignete Welt mit dieser registrierten Datei geöffnet wird, wird deine GameTest-JavaScript-Datei geladen und ausgeführt. Hier besteht die wichtigste Funktion deines Codes darin, nachgelagerte GameTests zu registrieren.

Beachte dabei: Wenn du Änderungen an deinen Skripten oder Konstruktionen vornimmst, musst du deine Welt verlassen und sie neu laden. Eventuell vorhandene Skriptfehler werden angezeigt, wenn die Welt geladen wird.

Zur Registrierung deiner GameTest-Skripte kannst du die RegistrationBuilder-Klasse verwenden. Weitere Informationen zur Registration Builder-Klasse findest du unter Registration Builder.

Eine JavaScript-Beispielzeile, die RegistrationBuilder verwendet, sieht wie folgt aus:

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

Diese Codezeile richtet einen neuen Test mit dem Namen simpleMobTest innerhalb der Testgruppe StarterTests ein. Sie fügt einen zusätzlichen Parameter (maxTicks) hinzu, der angibt, dass dieser Test 410Ticks (20,5Sekunden) dauern kann. Schließlich gibt der GameTest eine MCStructure (startertests:mediumglass) an. Konventionell führt dies dazu, dass Minecraft eine MCStructure-Datei unter /structures/startertests/mediumglass.mcstructure in deinem Verhaltenspaketordner verwendet.

Der Rest des JavaScript-Codes verwendet die GameTest Helper-Klasse, um den Test innerhalb einer simpleMobTest-Funktion auszudrücken.

Testfunktionen

In den Testfunktionen erfolgt die eigentliche Ausführung eines Tests. Die Testfunktion richtet die Anfangsbedingungen für die Ausführung eines Tests ein und gibt eine zusätzliche Testfunktion aus, in der Kriterien ausgewertet werden.

Beispieltest:

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

Einige Punkte, die bei dieser Testfunktion zu beachten sind:

  • Du kannst die spawn-Methode verwenden, um neue Kreaturen in deinem Test zu erstellen.
  • Koordinaten, die in APIs wie Spawn verwendet werden, sind relativ zum Konstruktionsblock deiner MCStructure.
  • assert Funktionen führen dazu, dass die Codeausführung angehalten wird, wenn die in der Methode beschriebenen Bedingungen nicht erfüllt sind. Hier bestätigt dieser Code, dass sich ein Huhn-Objekt nicht mehr in der Konstruktion befindet (die Angabe false in der Methode assertEntityPresentInArea weist die Funktion an, zu bestätigen, dass das Objekt nicht mehr vorhanden ist). Wenn ein solches Objekt in einem der Blöcke in der Konstruktion gefunden wird, löst der assert-Code einen Fehler aus. Wenn jedoch kein Huhn gefunden wird, wird zur Codezeile test.succeed weitergegangen und der Test ist erfolgreich.

Die vollständige Datei JavaScript StarterTests.js sieht wie folgt aus:

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

Zum Abschluss des Beispiels solltest du einen Konstruktionsblock verwenden, um den Test zu definieren.

Öffne dazu Minecraft und starte eine neue Welt im Kreativmodus, um deine Umgebung aufzubauen. Dies ist ein einfacher Glaspferch, der für unseren GameTest aus Glasblöcken gebaut wurde:

Glaskonstruktion in Minecraft

Anschließend solltest du dies als Konstruktion exportieren. Führe den folgenden Befehl in Minecraft aus:

/give @s structure_block

Dadurch erhältst du einen Konstruktionsblock, mit dem du arbeiten kannst. Platziere einen Konstruktionsblock neben deiner Kreation und verwende das „Konstruktionsblock“-Pop-up, um sie zu rahmen. Exportiere dies als mediumglass.mcstructure.

Konstruktionsblock-Benutzeroberfläche in Minecraft

Wechsle in deinem Verhaltenspaket zu deinem Konstruktionen-Ordner und erstelle einen Unterordner mit dem Namen „startertests“.

Lege diese Datei mediumglass.mcstructure in den Unterordner mit dem Namen „startertests“. Achte darauf, dass die Groß-/Kleinschreibung mit der in deinem JavaScript-Code übereinstimmt. Verwende also nur Kleinbuchstaben. Kopiere die Datei mediumglass.mcstructure in diesen Ordner. Dein Ordner sollte jetzt wie folgt aussehen:

Standardmäßiges Layout des Starterordners

Ausführen der Tests im Spiel

Sobald du dein GameTest-Verhaltenspaket fertiggestellt hast, solltest du es in Minecraft ausprobieren. Erstelle dazu eine neue Minecraft-Welt. Für diese neue Welt solltest du im Kreativmodus beginnen und das GameTest-Framework-Experiment aktivieren. Füge dann die GameTest-Verhaltenspakete in deiner Welt hinzu. Wenn alles korrekt ist, sollte das Verhaltenspaket „Hello World GameTest“ gestartet werden, wenn du deine Welt erstellst:

Minecraft-Verhaltenspaket mit GameTest

Klicke auf die Kachel „Starter Hello World“, um diese Verhaltenspakete zu aktivieren.

Wichtig

Wahrscheinlich möchtest du auch einige zusätzliche Änderungen in deiner Umgebung angeben:

  • Auswählen einer flachen Welt
  • Behalte den normalen Schwierigkeitsgrad bei (Kreaturen funktionieren in völlig friedlichen Welten anders).

Verwende den Befehl /gametest, um Tests auszuführen, sobald die Welt geladen ist.

Verwende /gametest run <classname>:<testName>, um einen bestimmten Test auszuführen. Beispiel:

/gametest run startertests:simpleMobTest

Wie geht es weiter?

Du hast jetzt deinen ersten GameTest-Framework-Test erstellt. GameTests ermöglichen es dir als Ersteller, deine Inhalte zu erweitern, deine Objekte zu trainieren und deine Gameplay-Mechaniken zu validieren. Sieh dir die GameTest-API unten an, um mehr darüber zu erfahren, was im GameTest-Framework enthalten ist.