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

Friend

フレンドリスト、リクエスト、フレンドへのテレポート。GUI メニューとオプションのサーバー間同期付き。

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

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

概要​

Friend は、すべてのプレイヤーにフレンドリストを提供します。プレイヤーが申請を送り、相手がそれを承認または拒否すると、承認されたフレンド同士は互いのオンライン状態を確認し、互いのもとへテレポートできます。すべて、/friend コマンド、TypeWriter のアクションとファクト、そして Web パネルで自分で設計するメニューから利用できます。

フレンド関係はプレイヤーの UUID で保存されるため、名前を変更しても維持されます。リストは 1 つの Friend Artifact に保存されます。MySQL ブリッジがインストールされ、Redis が有効になっている場合、申請、フレンド関係、オンライン状態は、ネットワーク内のすべてのサーバー間で共有され、/friend tp で、フレンドのいるサーバーにプレイヤーを移動させることができます。

メニューは GUI メニューです。そのレイアウトを Web パネルで作成し、一部のアイテムを Friend ボタンとして指定します。フレンドのヘッドは、エクステンションが配置します。

機能​

  • フレンド申請 — コマンド、アクションエントリー、メニューのクリックで、フレンドの申請、承認、拒否、削除ができます。
  • 申請の切り替え — 各プレイヤーは /friend toggle で、受信する申請をオフにできます。
  • フレンドメニュー — 1 つのエントリーに、すべての画面(フレンド、申請、タブ)が含まれ、プレイヤーヘッド、ページ送り、空きスロットのフィラーを備えています。
  • フレンドへのテレポート — 同じサーバー内、またはネットワーク上では、プロキシを経由してフレンドのいるサーバーへ。
  • オンライン状態 — ローカルのプレイヤーと、Redis を使うと、同じグループの他のサーバーにいるプレイヤー。
  • ストーリーへの連携 — 「このプレイヤーはフレンドか」を判定するファクトと、「オンラインのフレンドは何人か」を判定するファクト。
  • プレースホルダー — 人数、リスト、インデックス付きの名前、フレンドのサーバー。任意の MiniMessage テキストで使用できます。
  • 管理ツール — /friend admin で、誰のフレンドでも、一覧表示、確認、強制的な関連付けや解除ができます。

インストール​

  1. メニューを描画する GUI エクステンションをインストールします。
  2. 任意、複数サーバーで使う場合: MySQL エクステンションをインストールし、その設定で Redis(または Valkey)を有効にします。すべてのサーバーで同じ redis.group-id を使用してください。サーバー間の動作を参照してください。
  3. Friend の JAR を plugins/Typewriter/extensions/ に配置し、サーバーを再起動します。
  4. スタティックページに Friend Artifact エントリーを作成して、Publish します。ないと、何も保存されません。

パーミッション friend.use と friend.tp はデフォルトで全員に、friend.admin はオペレーターに付与されています。

はじめに​

/friend で開くフレンドメニューを作成します。

  1. TypeWriter の Web パネルでスタティックページを開き、Friend Artifact を追加します。artifactId は friend_data のままにします。
  2. ページを開き、Friend Menu エントリーを追加します。/friend コマンドは、最初に見つかった Friend Menu を開くため、通常は 1 つだけ必要です。
  3. inventoryTitle、inventoryRows、guiType を設定し、layoutPool でレイアウトを構築して、mainLayoutId をルートレイアウトに向けます。レイアウトとフレームについては、GUI ガイドを参照してください。
  4. 装飾とボタンを配置します。アイテムの buttonType で Friend の値を選択します。たとえば、カウンターには FRIEND_STATUS、申請の切り替えには FRIEND_SETTINGS_TOGGLE_REQUESTS、メニューを閉じるには NAV_CLOSE を選びます。
  5. 画面を宣言します。画面ごとに views にエントリーを 1 つ追加し、フレンドを表示する ID を friendListViewIds に、受信した申請を表示する ID を requestListViewIds に列挙します。
  6. プレイヤーヘッドの表示位置を、contentX、contentY、contentColumns、contentRows で設定します。
  7. Publish してから、ゲーム内で /friend を実行します。

クエスト、NPC、アイテムからメニューを開くには、別のエントリーの triggers に Friend Menu エントリーをリンクするか、アクションとして実行します。

フレンド関係でダイアログを制限する

targetName にプレイヤー名を設定した Is Friend ファクトを使い、そのファクトをクライテリアで使用します(値 1 はフレンドを意味します)。アクティブなフレンドリストに応じて変わる報酬には、Online Friends Count を使用します。

仕組み​

各プレイヤーのデータは、そのプレイヤーがサーバーでオンラインのときに読み込まれ、バックグラウンドでアーティファクトに保存されます。すべての変更は、ソーシャルメッセージバスにも発行されるため、相手のプレイヤーを保持するサーバーでも適用されます。

メニュー​

Friend Menu エントリーは、Friend 固有の 3 つの部分を持つ GUI メニューです。

プレイヤーヘッド。 friendListViewIds で宣言した画面では、すべてのフレンドがプレイヤーヘッドとして表示され、オンラインのフレンドが先頭に並びます。左クリックでフレンドのもとへテレポートし、右クリックでフレンドを削除します。requestListViewIds で宣言した画面では、左クリックで申請を承認し、右クリックで拒否します。ヘッドは、contentX と contentY を起点とする、contentColumns × contentRows スロットのグリッドを埋めます。空いたセルには emptySlotItem が表示されます。

ボタン。 buttonType が以下のいずれかの値であるアイテムは、描画時に置き換えられます。

buttonTypeプレイヤーに見える内容、または実行される操作
FRIEND_STATUSオンライン、オフライン、合計のフレンド数。
FRIEND_LISTフレンドの合計数。リストが空の場合は「フレンドなし」。
FRIEND_REQUESTS保留中の申請数。1 件以上ある場合、クリックすると requests ビューが開きます。
FRIEND_SETTINGS_TOGGLE_REQUESTSクリックして、受信する申請のオンとオフを切り替えます。
FRIEND_ONLINE_HEADER, FRIEND_OFFLINE_HEADER装飾用のセクションヘッダー。
PAGE_NAVページ矢印。左クリックで進み、右クリックで戻り、名前にはページカウンターが表示されます。1 ページで足りる場合は非表示になります。
NAV_BACK, NAV_CLOSE前のメニューに戻る、メニューを閉じる。
FRIEND_ADD, FRIEND_REMOVE, FRIEND_ACCEPT, FRIEND_DECLINE, FRIEND_TP, FRIEND_MSG, FRIEND_PLAYER_SLOT固定の名前とロアを持つ表示用アイテム。独自のアクションはありません。

エディターが提示するその他の値(NAV_PREV、NAV_NEXT、PENDING_REQUESTS、FRIEND_SLOT、REQUEST_ACCEPT、REQUEST_DECLINE)は、設定したままの状態で残ります。

スロットコマンド。 アイテムは、friend で始まるコマンドを実行できます。friend open [view]、friend page next|prev|<number>、friend tp <name>、friend remove <name>、friend accept <name>、friend decline <name>、friend toggle、friend add <name> です。これらは、クリックしたプレイヤーとして実行され、%player% は不要です。

言語

組み込みのメニューテキスト(デフォルトのタイトル "Amis"、ボタン名、ヘッドのロア)はフランス語です。レイアウトで設定するアイテム名とロア、そして inventoryTitle で上書きしてください。コマンドが送信するチャットメッセージは英語です。

サーバー間の動作​

Friend は、他のプラグインなしで、単一のサーバー上でも動作します。ネットワーク上では、MySQL をインストールして Redis または Valkey を有効にし、ネットワーク内のすべてのサーバーに、同じ redis.group-id と、異なる redis.server-name を設定してください。group-id がないと、ソーシャルメッセージバスは沈黙したままで、各サーバーは自分の変更しか見えません。

ブリッジが接続されている場合:

  • 申請、新しいフレンド関係、削除、申請の切り替えは、他のサーバーに送信されます。
  • Redis がフレンドのいるサーバーを把握しているとき、そのフレンドはオンラインとして扱われます。
  • 別のサーバーにいるフレンドに対する /friend tp は、プロキシにそのサーバーへの接続を要求します(プロキシが btc:bridge チャンネルを理解している必要があります)。到着するのはサーバーであり、フレンドの位置ではありません。

アーティファクトは、有効なストレージに従います。MySQL の設定で mysql.enabled が true の場合、Friend Artifact は共有データベースに保存されるため、すべてのサーバーが同じフレンドリストを読み取ります。

コマンド​

すべてのコマンドに friend.use が必要です。エイリアス: /friends、/f、/amis。引数なしのコマンドは、最初の Friend Menu を開き、存在しない場合は何も出力しません。

コマンド説明
/friendフレンドメニューを開きます。
/friend add <player>フレンド申請を送信します。
/friend accept <player>保留中の申請を承認します。
/friend decline <player>保留中の申請を拒否します。
/friend remove <player>フレンドを削除します。
/friend listフレンドを、オンライン状態とともにチャットに表示します。
/friend toggle受信するフレンド申請をオンまたはオフにします。
/friend tp <player>フレンドにテレポートします(friend.tp も必要)。
/friend admin list <player>オンラインのプレイヤーのフレンドを一覧表示します(friend.admin が必要)。
/friend admin requests <player>オンラインのプレイヤーの保留中の申請を一覧表示します。
/friend admin add <player> <player>申請の手順なしで、2 人のオンラインのプレイヤーをフレンドにします。
/friend admin remove <player> <friend>オンラインのプレイヤーのリストからフレンドを削除します。

パーミッション​

パーミッションデフォルト許可される内容
friend.use全員すべての /friend コマンド。メニューのクリックは、これを確認せずに同じアクションを実行します。
friend.tp全員/friend tp。メニューでのヘッドのクリックは、このパーミッションを確認せずに、直接テレポートを実行します。
friend.adminオペレーター/friend admin コマンド。

プレースホルダー​

これらは MiniPlaceholders のタグで、MiniMessage テキストに <friend_count> のように記述します。真偽値は 1 または 0 を返します。

プレースホルダー戻り値
<friend_count>プレイヤーのフレンド数。
<friend_online_count>このサーバーでオンラインのフレンド数。
<friend_online_network_count>グループのいずれかのサーバーでオンラインであることがわかっているフレンド数。
<friend_requests_count>保留中の申請数。
<friend_requests_enabled>受信する申請が許可されている場合は 1。
<friend_list>カンマで区切られたフレンド名。
<friend_online_list>このサーバーでオンラインのフレンドの名前。
<friend_name:index>その位置のフレンド名。0 から始まります。
<friend_online_name:index>その位置のオンラインのフレンド名。0 から始まります。
<friend_is_friend:name>指定した名前のプレイヤーがフレンドの場合は 1。
<friend_server:name>指定した名前のプレイヤーがオンラインのサーバー。不明な場合は空。

エントリー​

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

アクション5
ファクト2
アーティファクト1

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

再起動後にフレンドが消える。 Friend Artifact が Publish されていないため、データはメモリ上にしかありません。スタティックページにアーティファクトを追加して、Publish してください。

/friend が何も起こさない。 このコマンドは、最初の Friend Menu エントリーを開き、存在しない場合は何も表示しません。Friend Menu を作成して Publish してください。/friend list などのサブコマンドは、メニューがなくても動作します。

申請を送信したが、相手が受信しない。 申請が送信されるとき、受信者がネットワークのいずれかのサーバーでオンラインである必要があります。オフラインのプレイヤーへの申請は保持されず、送信者には、申請が送信されたと通知されます。複数のサーバーでは、redis.group-id がすべてで同じ値に設定されていることを確認してください。そうでないと、申請はサーバーをまたぎません。

2 つ目のサーバーでフレンドリストが空になる。 各サーバーには、同じ redis.group-id と、一意の redis.server-name が必要で、アーティファクトがデータベースを通じて共有されるよう、mysql.enabled が true である必要があります。MySQL エクステンションのログで、Redis の接続エラーを確認してください。

ヘッドのグリッドが空、またはフィラーアイテムしか表示されない。 現在の画面が、friendListViewIds または requestListViewIds に列挙されていません。メニューが views を宣言している場合、そこに列挙された ID だけがヘッドを表示します。views がない場合は、view を friends または requests に設定してください。

別のサーバーにいるフレンドへのテレポートが何も起こさない。 プロキシが btc:bridge チャンネルを処理でき、Redis のプレゼンスが機能している必要があります。ネットワーク接続がない場合、/friend tp は、フレンドが同じサーバーにいる場合にのみ機能します。

関連エクステンション​

  • MySQL — サーバー間のフレンドのための、Redis のメッセージング、プレゼンス、共有ストレージ。
  • GUI — フレンドメニューが使用する、レイアウト、ビュー、ボタン。
  • Party と Guild — 同じメッセージバス上に構築された、他のソーシャルシステム。
  • BTC Sky — 協力アイランドのメンバーを、自動的にフレンドとして関連付けます。