Zum Hauptinhalt springen

Craft Engine

CraftEngine-Blöcke, -Möbel und -Items in Quests, plus spielerbezogene Questzonen.

Kostenpflichtigv1.1Integrationen
BenötigtTypeWriter0.9CraftEngineQuest (TypeWriter extension)

Überblick​

Craft Engine verbindet CraftEngine mit TypeWriter. Deine Custom-Blöcke, -Möbel und -Items werden zu Dingen, auf die eine Quest reagieren kann: Events, wenn ein Spieler sie abbaut, platziert oder anklickt, Objectives, die sie zählen, Facts und Variablen, die lesen, was ein Spieler hält oder ansieht, und Actions, die sie platzieren, ersetzen oder entfernen.

Die zweite Hälfte der Erweiterung ist die Quest-Zone. Eine Quest-Zone gibt jedem Spieler seine eigene Version eines Bereichs. Was ein Spieler abbaut, platziert oder verändert, wird nur für diesen Spieler aufgezeichnet, ihm per Packets gesendet und ihm zurückgegeben, wenn er wiederkommt. Die echte Welt wird nie beschrieben, das Verlassen einer Zone kostet also nichts, und nichts bleibt halb erledigt zurück, wenn der Server mitten in einer Quest stoppt. Eine Zone kann auch von einer Gruppe geteilt werden, sodass eine Party einen Raum gemeinsam räumt.

Die Erweiterung ist für Paper und Folia geschrieben: Jede Änderung an Welt oder Inventar läuft in der Region, der sie gehört.

Funktionen​

  • Block- und Möbel-Events — reagiere darauf, dass Custom-Blöcke und -Möbel abgebaut, platziert, bedient oder geschlagen werden, einschließlich abgelehnter Platzierungen.
  • Platzierungsregeln — lehne eine Platzierung oder einen Schlag ab, sofern der Spieler keine Berechtigung hält oder keine Criteria erfüllt.
  • Zählende Objectives — Custom-Blöcke und -Möbel abbauen, platzieren oder ersetzen als Quest-Objective; jede Position zählt pro Spieler einmal.
  • Welt-Actions — platziere, entferne oder ersetze einen Block oder ein Möbelstück und speichere eigene Daten an platzierten Möbeln.
  • Quest-Zonen — eine Ansicht von Blöcken und Möbeln pro Spieler (oder pro Gruppe), die zwischen Besuchen gespeichert bleibt.
  • Inventartausch — nimm das gesamte Inventar eines Spielers oder nur ausgewählte Items beim Betreten einer Zone und gib es beim Verlassen zurück.
  • Fake-Block-Audience — zeige einer Audience einen festen Satz Blöcke und Möbel, ohne etwas aufzuzeichnen.
  • Item-Werkzeuge — gib CraftEngine-Items per ID oder entferne sie, und reagiere auf deren Aufheben, Fallenlassen oder Essen.
  • Facts, Variablen und Audiences — lies das gehaltene Item, den angesehenen Block oder das angesehene Möbel und Cooldowns und gruppiere Spieler danach, was sie halten oder worauf sie sitzen.

Installation​

  1. Installiere CraftEngine auf deinem Server. Die Erweiterung wird gegen CraftEngine 26.8 gebaut.
  2. Stelle sicher, dass die TypeWriter-Erweiterung Quest installiert ist. Sie stellt die Quest- und Objective-Entries bereit, die die Objectives verwenden.
  3. Lade die Erweiterung aus den Stores herunter (siehe die Buttons im Panel oben) und lege die JAR in plugins/Typewriter/extensions/ ab.
  4. Starte den Server neu. Im Log solltest du [CraftEngine] CraftEngineExtension initialized successfully. sehen.

Erste Schritte​

Diese Anleitung gibt jedem Spieler in einem Rätselraum sein eigenes zerbrechliches Siegel.

  1. Öffne im Web-Panel eine Manifest-Seite und füge ein Quest State Artifact hinzu. Lass artifactId wie generiert.
  2. Füge eine Quest Zone Audience hinzu und setze artifact auf das soeben erstellte Artifact. Lass zoneId leer, damit die Entry-ID verwendet wird, und lass trackBlocks aktiviert.
  3. Verschachtele die Zonen-Audience unter der Audience, die entscheidet, wer im Raum ist (zum Beispiel eine Bereichs-Audience oder eine Quest-Audience). Spieler, die sie betreten, erhalten ihre eigene Ansicht.
  4. Füge auf einer Sequence-Seite ein On Block Interact-Event für deinen Siegelblock hinzu. Es löst eine Set Quest Block-Action aus.
  5. Setze in der Action artifact und zoneId auf dieselben Werte wie bei der Zone (kopiere die Entry-ID der Zone), binde location an die Position des Events und setze blockId auf das zerbrochene Siegel (namespace:broken_seal). Lass es leer, um Luft anzuzeigen.
  6. Füge dort, wo die Quest endet, eine Clear Quest State-Action hinzu, damit der Raum erneut gelöst werden kann.
  7. Publish und prüfe dann mit zwei Spielern: Jeder öffnet sein eigenes Siegel, und der andere sieht es weiterhin intakt.
tipp

Für eine einfache Zählaufgabe brauchst du keine Zone: Füge ein Break Block-Objective hinzu, fülle item mit der Block-ID und setze amount.

So funktioniert es​

Eine in einer Zone vorgenommene Änderung ist eine Abweichung (deviation): ein Block, der einem Spieler zusätzlich zum echten gesendet wird, ein Möbelstück der Welt, das vor einem Spieler verborgen wird, oder ein Ghost, ein Möbelstück, das nur für diesen Spieler existiert. Ein Ghost kann von seinen Betrachtern per Rechtsklick bedient und zerstört werden, hat aber für niemanden eine Kollision.

Die Kollision folgt immer der Welt. Ein Block, den ein Spieler abgebaut hat, blockiert ihn weiterhin, ein Block, den er platziert hat, kann durchquert werden, und ein verborgenes Möbelstück der Welt hält den Spieler, der es nicht sieht, weiterhin auf. Baue Zonen so, dass die Änderung etwas zum Ansehen und Benutzen ist, nicht etwas zum Draufstehen.

Der Zustand wird einige Sekunden nach der letzten Änderung in das Artifact geschrieben und sofort, wenn ein Spieler eine Zone verlässt oder der Server stoppt. Ein Server, der beendet statt gestoppt wird, kann die letzten Sekunden verlieren.

Konfiguration​

Die Erweiterung hat keine Konfigurationsdatei. Der Text der Objective-Zeilen lässt sich mit TypeWriter-Snippets ändern:

SnippetStandard
craftengine.objective.display<display> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>)
craftengine.objective.completed<green>✔</green> <st><display></st> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>)

Entries​

49 Einträge, aus dem Quellcode der Erweiterung generiert.

Aktionen10
Ereignisse13
Ziele5
Fakten8
Zielgruppen5
Variablen6
Sounds1
Artefakte1

Fehlerbehebung​

Eine Quest-Zone zeigt nichts und es erscheint kein Fehler. Die Actions und die Audience müssen dasselbe artifact, dieselbe zoneId und dieselbe group nennen. Eine unter einem anderen Namen abgelegte Änderung wird korrekt geschrieben, aber niemand liest sie. Ist zoneId bei der Audience leer, musst du die Entry-ID der Audience selbst kopieren.

Set Quest Block bewirkt nichts und das Log meldet „has no zone configured“. zoneId ist bei der Action leer. Setze es. Für Set Quest Furniture gilt dasselbe.

Das Log meldet „cannot resolve“ bei einer ID. Die blockId ist weder ein CraftEngine-Block noch ein CraftEngine-Möbel noch ein Vanilla-Material. Prüfe die ID mit Registry IDs. Ist kind auf FURNITURE gesetzt, wird eine ID, die kein Möbel ist, abgelehnt, statt als Block angezeigt zu werden.

Alle in der Zone sehen dieselbe Änderung. Die Action hat die Welt beschrieben. Die Actions Place und Remove sowie Replace Block mit WORLD verändern den echten Block. Verwende innerhalb einer Zone Set Quest Block, Set Quest Furniture oder Replace Block mit audience auf AUTO oder QUEST_ZONE.

Replace Block bewirkt bei einem Spieler in zwei Zonen nichts. Bei mehreren überlappenden Zonen und ohne zoneId lehnt die Action ab und schreibt eine Zeile ins Log. Setze zoneId auf die gemeinte Zone.

Eine Änderung flackert nach einem langen Weg zurück. Einem Client, der einen Chunk neu lädt, wird wieder die echte Welt geliefert, und die Zone sendet ihre Ansicht alle refreshInterval Ticks innerhalb von refreshRadius Blöcken erneut. Verringere refreshInterval oder erhöhe refreshRadius.

Die Block-Events werden bei einem in einer Zone abgebauten Block nicht ausgelöst. Bei aktivem trackBlocks übernimmt die Zone die Aktion: Das Abbauen oder Platzieren wird abgebrochen und als Abweichung aufgezeichnet. Treibe die Quest stattdessen über die Interact-Events oder über Set Quest Block voran.

Verwandte Erweiterungen​

  • Nexo und ItemsAdder — dieselbe Art von Integration für die anderen Plugins für Custom-Inhalte.