メインコンテンツまでスキップ

Craft Engine

クエストで CraftEngine のブロック、家具、アイテムを利用でき、プレイヤーごとのクエストゾーンも使えます。

有料v1.1連携
必要TypeWriter0.9CraftEngineQuest (TypeWriter extension)

概要​

Craft Engine は、CraftEngine を TypeWriter に接続します。カスタムブロック、家具、アイテムが、クエストが反応できる対象になります。プレイヤーがそれらを壊す、置く、クリックしたときのイベント、それらを数える目標、プレイヤーが持っているものや見ているものを読み取るファクトと変数、そしてそれらを配置、置換、削除するアクションです。

この拡張機能の後半はクエストゾーンです。クエストゾーンは、すべてのプレイヤーに、エリアのそれぞれ専用のバージョンを与えます。プレイヤーが壊した、置いた、変更したものは、そのプレイヤー専用に記録され、パケットとして送られ、戻ってきたときに復元されます。実際のワールドには決して書き込まれないため、ゾーンを離れてもコストがかからず、クエストの途中でサーバーが停止しても、中途半端な状態は残りません。ゾーンはグループで共有することもでき、パーティが一緒に部屋を攻略できます。

この拡張機能は Paper と Folia 向けに書かれています。ワールドやインベントリの変更は、すべて、それを所有するリージョンで実行されます。

機能​

  • ブロックと家具のイベント — カスタムブロックや家具が、壊された、置かれた、操作された、叩かれたときに反応します。拒否された設置も含みます。
  • 設置ルール — プレイヤーが権限を持っているか、criteria に一致していない限り、設置や打撃を拒否します。
  • カウントする目標 — カスタムブロックや家具の破壊、設置、置換をクエストの目標にできます。各位置は、プレイヤーごとに 1 回だけカウントされます。
  • ワールドのアクション — ブロックや家具の配置、削除、置換を行い、配置した家具に独自のデータを保存します。
  • クエストゾーン — プレイヤーごと(またはグループごと)のブロックと家具のビュー。訪問の間も記憶されます。
  • インベントリの入れ替え — ゾーンに入ったときにプレイヤーのインベントリ全体、または選んだアイテムだけを預かり、離れるときに返します。
  • Fake block オーディエンス — 何も記録せずに、固定されたブロックと家具のセットをオーディエンスに表示します。
  • アイテムツール — ID で CraftEngine のアイテムを与えたり削除したりし、拾う、捨てる、食べるに反応します。
  • ファクト、変数、オーディエンス — 手に持っているアイテム、見ているブロックや家具、クールダウンを読み取り、持っているものや座っているものでプレイヤーをグループ化します。

インストール​

  1. サーバーに CraftEngine をインストールします。拡張機能は CraftEngine 26.8 に対してビルドされています。
  2. TypeWriter の Quest 拡張機能がインストールされていることを確認します。目標が使う、クエストと目標のエントリを提供します。
  3. ストアから拡張機能をダウンロードし(上のパネルのボタンを参照)、JAR を plugins/Typewriter/extensions/ に置きます。
  4. サーバーを再起動します。ログに [CraftEngine] CraftEngineExtension initialized successfully. と表示されるはずです。

はじめに​

この手順では、謎解きの部屋で、各プレイヤーに、それぞれ専用の壊せる封印を与えます。

  1. Web パネルで manifest ページを開き、Quest State Artifact を追加します。artifactId は生成されたままにしておきます。
  2. Quest Zone Audience を追加し、artifact に、今作成したアーティファクトを設定します。zoneId は空のままにして、エントリ ID を使うようにし、trackBlocks はオンのままにします。
  3. ゾーンのオーディエンスを、誰が部屋にいるかを決めるオーディエンス(たとえばエリアのオーディエンスやクエストのオーディエンス)の下にネストします。そこに入ったプレイヤーには、専用のビューが与えられます。
  4. sequence ページで、封印のブロックに対する On Block Interact イベントを追加します。これが Set Quest Block アクションをトリガーします。
  5. アクションで、artifact と zoneId を、ゾーンと同じ値に設定し(ゾーンのエントリ ID をコピーします)、location をイベントの位置にバインドし、blockId を壊れた封印(namespace:broken_seal)に設定します。空にすると、空気が表示されます。
  6. クエストが終わる場所に Clear Quest State アクションを追加します。これで、部屋を再び解けるようになります。
  7. Publish し、2 人のプレイヤーで確認します。それぞれが自分専用の封印を開き、もう一方のプレイヤーには、まだ無傷のまま見えます。
ヒント

単純にカウントするだけのタスクには、ゾーンは必要ありません。Break Block 目標を追加し、item にブロック ID を入力して、amount を設定してください。

仕組み​

ゾーン内で行われた変更は偏差(deviation)です。1 人のプレイヤーにだけ、本物の上に重ねて送られるブロック、1 人のプレイヤーから隠されるワールドの家具、または、そのプレイヤーにだけ存在する家具であるゴーストのいずれかです。ゴーストは、それを見ているプレイヤーが右クリックしたり壊したりできますが、誰に対しても当たり判定はありません。

当たり判定は、常にワールドに従います。プレイヤーが壊したブロックは、そのプレイヤーにとって依然として通行を妨げ、プレイヤーが置いたブロックは通り抜けられ、隠されたワールドの家具は、それが見えないプレイヤーを依然として止めます。ゾーンは、変更が見て使うためのものであり、その上に立つためのものではない場所に作ってください。

状態は、最後の変更の数秒後に、アーティファクトに書き込まれます。プレイヤーがゾーンを離れたときと、サーバーが停止したときは、すぐに書き込まれます。停止ではなく強制終了されたサーバーでは、最後の数秒が失われることがあります。

設定​

この拡張機能には設定ファイルがありません。目標の行のテキストは、TypeWriter のスニペットで変更できます。

スニペットデフォルト
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>)

エントリ​

49 件のエントリー(拡張機能のソースから生成)。

アクション10
イベント13
目標5
ファクト8
オーディエンス5
変数6
サウンド1
アーティファクト1

トラブルシューティング​

クエストゾーンに何も表示されず、エラーも出ない。 アクションとオーディエンスは、同じ artifact、zoneId、group を指定する必要があります。別の名前で記録された変更は、正しく書き込まれても、誰にも読み取られません。オーディエンスの zoneId が空の場合は、コピーする必要があるのはオーディエンス自身のエントリ ID です。

Set Quest Block が何もせず、ログに「has no zone configured」と出る。 アクションの zoneId が空です。設定してください。Set Quest Furniture にも同じことが当てはまります。

ログに、ID を「cannot resolve」と出る。 blockId が、CraftEngine のブロックでも、CraftEngine の家具でも、バニラの素材でもありません。Registry IDs で ID を確認してください。kind が FURNITURE の場合、家具ではない ID は、ブロックとして表示されるのではなく、拒否されます。

ゾーン内の全員に同じ変更が見える。 アクションがワールドに書き込みました。Place と Remove のアクション、および WORLD に設定された Replace Block は、実際のブロックを変更します。ゾーン内では、Set Quest Block、Set Quest Furniture、または audience が AUTO か QUEST_ZONE の Replace Block を使ってください。

2 つのゾーンにいるプレイヤーに対して、Replace Block が何もしない。 複数のゾーンが重なっていて zoneId がない場合、アクションは拒否し、ログに 1 行書き込みます。意図するゾーンに zoneId を設定してください。

長く歩いた後で、変更がちらついて元に戻る。 チャンクを再読み込みしたクライアントには、本物のワールドが再び送られ、ゾーンは、refreshRadius ブロック以内で、refreshInterval ティックごとにビューを再送します。refreshInterval を小さくするか、refreshRadius を大きくしてください。

ゾーン内で壊されたブロックの、ブロックイベントが発火しない。 trackBlocks がオンの場合、ゾーンがアクションを引き継ぎます。破壊や設置はキャンセルされ、偏差として記録されます。代わりに、インタラクトイベントや Set Quest Block から、クエストを進めてください。

関連する拡張機能​

  • Nexo と ItemsAdder — 他のカスタムコンテンツプラグイン向けの、同種の連携。