Craft Engine
概要
Craft Engine は、CraftEngine を TypeWriter に接続します。カスタムブロック、家具、アイテムが、クエストが反応できる対象になります。プレイヤーがそれらを壊す、置く、クリックしたときのイベント、それらを数える目標、プレイヤーが持っているものや見ているものを読み取るファクトと変数、そしてそれらを配置、置換、削除するアクションです。
この拡張機能の後半はクエストゾーンです。クエストゾーンは、すべてのプレイヤーに、エリアのそれぞれ専用のバージョンを与えます。プレイヤーが壊した、置いた、変更したものは、そのプレイヤー専用に記録され、パケットとして送られ、戻ってきたときに復元されます。実際のワールドには決して書き込まれないため、ゾーンを離れてもコストがかからず、クエストの途中でサーバーが停止しても、中途半端な状態は残りません。ゾーンはグループで共有することもでき、パーティが一緒に部屋を攻略できます。
この拡張機能は Paper と Folia 向けに書かれています。ワールドやインベントリの変更は、すべて、それを所有するリージョンで実行されます。
機能
- ブロックと家具のイベント — カスタムブロックや家具が、壊された、置かれた、操作された、叩かれたときに反応します。拒否された設置も含みます。
- 設置ルール — プレイヤーが権限を持っているか、criteria に一致していない限り、設置や打撃を拒否します。
- カウントする目標 — カスタムブロックや家具の破壊、設置、置換をクエストの目標にできます。各位置は、プレイヤーごとに 1 回だけカウントされます。
- ワールドのアクション — ブロックや家具の配置、削除、置換を行い、配置した家具に独自のデータを保存します。
- クエストゾーン — プレイヤーごと(またはグループごと)のブロックと家具のビュー。訪問の間も記憶されます。
- インベントリの入れ替え — ゾーンに入ったときにプレイヤーのインベントリ全体、または選んだアイテムだけを預かり、離れるときに返します。
- Fake block オーディエンス — 何も記録せずに、固定されたブロックと家具のセットをオーディエンスに表示します。
- アイテムツール — ID で CraftEngine のアイテムを与えたり削除したりし、拾う、捨てる、食べるに反応します。
- ファクト、変数、オーディエンス — 手に持っているアイテム、見ているブロックや家具、クールダウンを読み取り、持っているものや座っているものでプレイヤーをグループ化します。
インストール
- サーバーに CraftEngine をインストールします。拡張機能は CraftEngine 26.8 に対してビルドされています。
- TypeWriter の Quest 拡張機能がインストールされていることを確認します。目標が使う、クエストと目標のエントリを提供します。
- ストアから拡張機能をダウンロードし(上のパネルのボタンを参照)、JAR を
plugins/Typewriter/extensions/に置きます。 - サーバーを再起動します。ログに
[CraftEngine] CraftEngineExtension initialized successfully.と表示されるはずです。
はじめに
この手順では、謎解きの部屋で、各プレイヤーに、それぞれ専用の壊せる封印を与えます。
- Web パネルで manifest ページを開き、Quest State Artifact を追加します。
artifactIdは生成されたままにしておきます。 - Quest Zone Audience を追加し、
artifactに、今作成したアーティファクトを設定します。zoneIdは空のままにして、エントリ ID を使うようにし、trackBlocksはオンのままにします。 - ゾーンのオーディエンスを、誰が部屋にいるかを決めるオーディエンス(たとえばエリアのオーディエンスやクエストのオーディエンス)の下にネストします。そこに入ったプレイヤーには、専用のビューが与えられます。
- sequence ページで、封印のブロックに対する On Block Interact イベントを追加します。これが Set Quest Block アクションをトリガーします。
- アクションで、
artifactとzoneIdを、ゾーンと同じ値に設定し(ゾーンのエントリ ID をコピーします)、locationをイベントの位置にバインドし、blockIdを壊れた封印(namespace:broken_seal)に設定します。空にすると、空気が表示されます。 - クエストが終わる場所に Clear Quest State アクションを追加します。これで、部屋を再び解けるようになります。
- 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
- 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
イベント13
- 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
目標5
- 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
ファクト8
- 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
オーディエンス5
- 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
変数6
- 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
サウンド1
- Craftengine SoundCraftEngine Sound
アーティファクト1
- Craftengine Quest State ArtifactArtifact storing per-player quest block and item state
トラブルシューティング
クエストゾーンに何も表示されず、エラーも出ない。 アクションとオーディエンスは、同じ 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 — 他のカスタムコンテンツプラグイン向けの、同種の連携。