Craft Engine
Ü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
- Installiere CraftEngine auf deinem Server. Die Erweiterung wird gegen CraftEngine 26.8 gebaut.
- Stelle sicher, dass die TypeWriter-Erweiterung Quest installiert ist. Sie stellt die Quest- und Objective-Entries bereit, die die Objectives verwenden.
- Lade die Erweiterung aus den Stores herunter (siehe die Buttons im Panel oben) und lege die JAR in
plugins/Typewriter/extensions/ab. - 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.
- Öffne im Web-Panel eine Manifest-Seite und füge ein Quest State Artifact hinzu. Lass
artifactIdwie generiert. - Füge eine Quest Zone Audience hinzu und setze
artifactauf das soeben erstellte Artifact. LasszoneIdleer, damit die Entry-ID verwendet wird, und lasstrackBlocksaktiviert. - 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.
- 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.
- Setze in der Action
artifactundzoneIdauf dieselben Werte wie bei der Zone (kopiere die Entry-ID der Zone), bindelocationan die Position des Events und setzeblockIdauf das zerbrochene Siegel (namespace:broken_seal). Lass es leer, um Luft anzuzeigen. - Füge dort, wo die Quest endet, eine Clear Quest State-Action hinzu, damit der Raum erneut gelöst werden kann.
- Publish und prüfe dann mit zwei Spielern: Jeder öffnet sein eigenes Siegel, und der andere sieht es weiterhin intakt.
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:
| Snippet | Standard |
|---|---|
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
- Craftengine Clear Quest StateDrop a player's own state for a quest zone
- Craftengine Give Item ActionGive a CraftEngine item to the player
- Craftengine Remove Item ActionRemove a CraftEngine item from the player
- Craftengine Set Quest BlockChange what one player sees at a spot, inside a quest zone — a block or a piece of furniture
- Craftengine Set Quest FurnitureHide or show one piece of the world's furniture, for one player, inside a quest zone
- Place Craftengine BlockPlace a CraftEngine block at a location
- Place Craftengine FurniturePlace a CraftEngine furniture at a location
- Remove Craftengine BlockRemove the CraftEngine block at a location
- Remove Craftengine FurnitureRemove the CraftEngine furniture at a location
- Replace Craftengine BlockReplace the block or furniture at a location with another one
Ereignisse13
- Craftengine on Item Consume EventTriggers when the player consumes a CraftEngine item
- Craftengine on Item Drop EventTriggers when the player drops a CraftEngine item
- Craftengine on Item Pickup EventTriggers when the player picks up a CraftEngine item
- On Craftengine Block Attempt Place EventTriggers when a player attempts to place a CraftEngine block
- On Craftengine Block Break EventTriggers when a CraftEngine custom block is broken
- On Craftengine Block Interact EventTriggers when a CraftEngine custom block is interacted with
- On Craftengine Block Place EventTriggers when a CraftEngine custom block is placed
- On Craftengine Dispense Projectile EventTriggers when a dispenser shoots a CraftEngine projectile
- On Craftengine Furniture Attempt Place EventTriggers when a player attempts to place CraftEngine furniture
- On Craftengine Furniture Break EventTriggers when a CraftEngine furniture is broken
- On Craftengine Furniture Hit EventTriggers when a player hits CraftEngine furniture
- On Craftengine Furniture Interact EventTriggers when a CraftEngine furniture is interacted with
- On Craftengine Furniture Place EventTriggers when a CraftEngine furniture is placed
Ziele5
- Break Craftengine Block ObjectiveAn objective to break CraftEngine custom blocks
- Break Craftengine Furniture ObjectiveAn objective to break CraftEngine furniture
- Place Craftengine Block ObjectiveAn objective to place CraftEngine custom blocks
- Place Craftengine Furniture ObjectiveAn objective to place CraftEngine furniture
- Replace Craftengine Block ObjectiveAn objective to replace a block with another one
Fakten8
- Craftengine Cooldown Active FactWhether a CraftEngine cooldown is currently running
- Craftengine Cooldown Remaining FactSeconds left on a CraftEngine cooldown
- Craftengine Holding Item FactWhether the player is holding a CraftEngine item
- Craftengine Item Cooldown FactTicks left on the vanilla use cooldown of an item
- Craftengine Item Count FactHow many of a CraftEngine item the player carries
- Craftengine Looking at Block FactWhether the player is looking at a CraftEngine block
- Craftengine Looking at Furniture FactWhether the player is looking at CraftEngine furniture
- Craftengine Standing on Block FactWhether the player is standing on a CraftEngine block
Zielgruppen5
- Craftengine Fake Block AudienceShow blocks and furniture to this audience alone
- Craftengine Furniture Proximity AudienceIn audience while near a CraftEngine furniture
- Craftengine Holding Item AudienceIn audience while holding a CraftEngine item
- Craftengine Quest Zone AudienceKeep a player's own block, furniture and item state for a quest zone
- Craftengine Sitting on Furniture AudienceIn audience while sitting on a CraftEngine furniture
Variablen6
- Craftengine Item in Hand ID VariableThe CraftEngine ID of the item the player holds
- Craftengine Item Property VariableA property of the CraftEngine item the player holds
- Craftengine Looking at Block ID VariableThe CraftEngine ID of the block the player is looking at
- Craftengine Looking at Furniture ID VariableThe CraftEngine ID of the furniture the player is looking at
- Craftengine Registry Ids VariableThe list of IDs CraftEngine has loaded
- Craftengine Standing on Block ID VariableThe CraftEngine ID of the block the player stands on
Sounds1
- Craftengine SoundCraftEngine Sound
Artefakte1
- Craftengine Quest State ArtifactArtifact storing per-player quest block and item state
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.