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

Ghost

ネットワーク内の他サーバーのプレイヤーをクライアント側のゴーストとして描画。プレイヤーごとのスイッチ付き。

プライベートv0.1ソーシャル
必要TypeWriter0.9.0-beta-177 (BTC build)MySQL (TypeWriter extension)Redis or ValkeyPacketEventsMiniPlaceholdersUiCore (TypeWriter extension)任意

BornToCraft ネットワーク向けに作られた拡張機能です。参照用にドキュメント化されており、配布されていません。

概要​

複数のバックエンドサーバーで構成されるネットワークでは、別々のサーバーにいる 2 人のプレイヤーが、同じマップ上に立っていても、互いを見ることができません。Ghost は、これを見た目の上で解決します。各サーバーは、自分のプレイヤーの位置、向き、スキンを Redis を通じて公開し、他のサーバーは、それらをパケットを使ってプレイヤーの形をしたゴーストとして描画します。ワールドには何も追加されず、ゴーストにはサーバー側のエンティティがないため、攻撃したり、押したり、ターゲットにしたりすることはできません。

ゴーストを見るかどうかは、プレイヤーが決めます。この選択は TypeWriter のファクトに保存されるため、再起動後も維持され、サーバーを移動してもプレイヤーに付いて回ります。ゴーストが表示されるのは、MySQL の設定で同じ redis.group-id を共有するサーバー間のみで、サーバーが自分のプレイヤーをゴーストとして描画することはありません。

機能​

  • サーバー間のゴースト — 他のバックエンドサーバーのプレイヤーが、スキン、位置、向きとともに表示されます。
  • パケットのみの描画 — PacketEvents 上に構築されており、サーバー側のエンティティは作成されません。
  • Folia 対応 — 各キャプチャと各描画は、対象のプレイヤーのスケジューラー上で実行されます。
  • 表示の切り替え — /ghost toggle、TypeWriter のアクション、メニューのボタンで、プレイヤーごとにゴーストのオンとオフを切り替えます。
  • 選択の永続化 — 設定は、サーバー間で共有される永続化可能なファクトです。
  • サーバータグ — [survival-2] のような設定可能な接尾辞で、ゴーストがどこから来たかを示します。
  • 制限 — 表示距離、閲覧者ごとの最大ゴースト数、更新レート、ワールドのフィルタリングによって、負荷を抑えます。
  • ネームプレート — UiCore がインストールされている場合、ゴーストの頭上にネームプレートが表示されます。
  • プレースホルダー — MiniMessage テキスト用の、表示状態とゴースト数。

インストール​

  1. すべてのサーバーに PacketEvents をインストールします。
  2. すべてのサーバーに MySQL エクステンションをインストールし、Redis(または Valkey)を有効にします。各サーバーに一意の redis.server-name と、同じ redis.group-id を設定します。Ghost には独自の Redis 設定はありません。
  3. Ghost の JAR を plugins/Typewriter/extensions/ に配置して、再起動します。ファイル plugins/Typewriter/ghost_player/config.yml が、最初の起動時に作成されます。
  4. /ghost を使用できるプレイヤーに、パーミッション typewriter.ghost.use を付与します。パーミッションプラグインがない場合、使用できるのはオペレーターのみです。
  5. 任意: ゴーストの頭上にネームプレートを描画するには、UiCore をインストールします。

はじめに​

メニューやクエスト NPC から、プレイヤーがゴーストを切り替えられるようにします。

  1. TypeWriter の Web パネルでページを開き、Ghost Visibility Fact ファクトエントリーを追加します。デフォルトの id である ghost_visibility_fact は保持してください。エクステンションは、この ID でファクトの読み書きを行います。
  2. シーケンスまたはメニューアイテムに、Ghost Toggle Visibility アクションを追加します。showMessage と hideMessage に MiniMessage テキストを入力するか、空のままにしてデフォルトのメッセージを使用します。
  3. 任意で、Ghost Visibility ファクトにクライテリアを追加(値 1 は表示、0 は非表示)して、メニューに異なるアイコンを表示します。
  4. Publish して、同じグループの 2 つのサーバーに参加します。各プレイヤーには、相手が、サーバーの接尾辞付きのゴーストとして見えます。
単一のサーバーではゴーストは見えない

サーバーは、自分自身のブロードキャストを無視します。テストするには、同じ redis.group-id と異なる redis.server-name で 2 つのサーバーを起動し、一致が許可されたワールド(下記を参照)に立ってください。

仕組み​

各サーバーは、すべてのローカルプレイヤーのスナップショットを、設定されたレートで公開し、さらに、動かないプレイヤーが消えないようにハートビートも送ります。ゴーストは、所有者が退出したとき、または timeout-millis 以内に更新が届かなかったときに消えます。各メッセージにはセッション ID とシーケンス番号が含まれるため、遅れて届いたメッセージや重複したメッセージは無視されます。

ゴーストは、閲覧者がゴーストを有効にしていて、ワールドに互換性があり、ゴーストが view-distance 以内にあり、閲覧者のゴースト数が max-ghosts-per-viewer 未満であるときに、近いものから順に、その閲覧者に対して描画されます。

設定​

ファイルは plugins/Typewriter/ghost_player/config.yml です。その schema-version は 1 または 2 でなければなりません。

schema-version: 2

settings:
update-rate: 4
server-suffix: " <gray>[%server%]</gray>"
team-prefix: "Ghosts"
view-distance: 64.0
max-ghosts-per-viewer: 128
timeout-millis: 10000
allowed-worlds:
- "world"
- "dungeon_"
- "hub"

messages:
no-permission: "<red>You do not have permission to use ghost visibility."
players-only: "<red>This command can only be used by a player."
enabled: "<green>Ghost visibility enabled."
disabled: "<yellow>Ghost visibility disabled."
usage: "<gray>Usage: <white>/ghost toggle"

command:
permission: "typewriter.ghost.use"
キー意味
settings.update-rate位置のキャプチャ間隔(tick)。1 から 20 の範囲に制限されます。
settings.server-suffixゴーストの名前の後ろに追加される MiniMessage テキスト。%server% は、送信元のサーバー名になります。
settings.team-prefix送信元サーバーごとに表示されるスコアボードチームのプレフィックス。
settings.view-distance最大距離(ブロック)。0 から 256。0 で距離の制限が無効になります。
settings.max-ghosts-per-viewer閲覧者ごとに描画されるゴースト数。0 から 2000。0 は何も表示しません。
settings.timeout-millis更新がないままゴーストが削除されるまでの遅延。2000 から 120000。
settings.allowed-worldsサーバー間で同じマップとみなされる、ワールド名のパターン。最大 64 件。
messages.*/ghost が使用する MiniMessage テキスト。
command.permission/ghost に必要なパーミッション。

ワールド。 ゴーストが見えるのは、閲覧者とゴーストが同じ名前のワールドにいるとき、または両方のワールド名が allowed-worlds の同じパターンを含むときです(たとえば、dungeon_ は dungeon_1 と dungeon_2 に一致します)。距離は 1 つのワールド内でしか測定できないため、view-distance が 0 より大きい場合、名前の異なるワールドからのゴーストは非表示になります。パターンマッチに頼る場合は、view-distance を 0 に設定してください。

Redis の接続、サーバー名、グループ ID は、MySQL の設定から読み取られます。ファイルは起動時に 1 回だけ読み込まれるため、編集した後はサーバーを再起動してください。

コマンド​

コマンド説明
/ghost toggle自分のゴースト表示をオンまたはオフにします。

エイリアス: /ghosts、/ghostplayer。プレイヤー専用です。パーミッションは command.permission で、デフォルトは typewriter.ghost.use です。

パーミッション​

パーミッション許可される内容
typewriter.ghost.use/ghost toggle。名前は command.permission で変更できます。このパーミッションにはデフォルト値が登録されていないため、付与する必要があります。

Ghost Toggle Visibility アクションは、このパーミッションを確認しません。

プレースホルダー​

MiniMessage テキスト用の MiniPlaceholders のタグです。PlaceholderAPI はサポートされていません。

プレースホルダー戻り値
<ghost_visibility>プレイヤーにゴーストが見える場合は true、そうでなければ false。
<ghost_visible>プレイヤーにゴーストが見える場合は 1、そうでなければ 0。
<ghost_count>このサーバーが現在把握している、リモートのゴーストの数。

エントリー​

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

アクション1
ファクト1

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

ゴーストが表示されない。 次の順に確認してください。両方のサーバーが、同じ空でない redis.group-id と、異なる redis.server-name を使用していること、Redis が接続されていること(そうでない場合、ログに "BTC RedisService is not connected; Ghost updates will remain inactive" と出力されます)、閲覧者がゴーストを有効にしていること、2 人のプレイヤーが互換性のあるワールドにいること(同じワールド名、または、view-distance: 0 で共有された allowed-worlds のパターン)。

同じサーバーのプレイヤーが、ゴーストとして表示されない。 これは想定どおりです。サーバーは、自分が発行したメッセージを無視します。

エクステンションが "Unsupported Ghost custom config schema" で起動に失敗する。 ghost_player/config.yml の schema-version が 1..2 の範囲外です。2 に設定してください。

エクステンションが、サーバー名のエラーで失敗する。 MySQL の設定の redis.server-name には、英字、数字、.、_、- のみを含め、最大 64 文字までにする必要があります。

/ghost でパーミッションがないと表示される。 このパーミッションにはデフォルトがありません。パーミッションプラグインで、typewriter.ghost.use(または command.permission に設定したパーミッション)を付与してください。

ゴーストが数秒後に消える。 timeout-millis 以内に更新が届きませんでした。Redis のレイテンシと、送信元のサーバーが、同じ redis.group-id で Ghost を実行していることを確認してください。

ゴーストにネームプレートがない。 ネームプレートは UiCore によるものです。閲覧するサーバーにインストールしてください。ない場合は、名前のサーバー接尾辞のみが表示されます。

関連エクステンション​

  • MySQL — Ghost が使用する、Redis の接続、サーバー名、グループ ID を管理します。
  • UiCore — インストールされている場合、ゴーストの頭上にネームプレートを描画します。