Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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-Dateienscripts
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 Angabefalse
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 derassert
-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:
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
.
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:
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:
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.