Friend
概要
Friend は、すべてのプレイヤーにフレンドリストを提供します。プレイヤーが申請を送り、相手がそれを承認または拒否すると、承認されたフレンド同士は互いのオンライン状態を確認し、互いのもとへテレポートできます。すべて、/friend コマンド、TypeWriter のアクションとファクト、そして Web パネルで自分で設計するメニューから利用できます。
フレンド関係はプレイヤーの UUID で保存されるため、名前を変更しても維持されます。リストは 1 つの Friend Artifact に保存されます。MySQL ブリッジがインストールされ、Redis が有効になっている場合、申請、フレンド関係、オンライン状態は、ネットワーク内のすべてのサーバー間で共有され、/friend tp で、フレンドのいるサーバーにプレイヤーを移動させることができます。
メニューは GUI メニューです。そのレイアウトを Web パネルで作成し、一部のアイテムを Friend ボタンとして指定します。フレンドのヘッドは、エクステンションが配置します。
機能
- フレンド申請 — コマンド、アクションエントリー、メニューのクリックで、フレンドの申請、承認、拒否、削除ができます。
- 申請の切り替え — 各プレイヤーは
/friend toggleで、受信する申請をオフにできます。 - フレンドメニュー — 1 つのエントリーに、すべての画面(フレンド、申請、タブ)が含まれ、プレイヤーヘッド、ページ送り、空きスロットのフィラーを備えています。
- フレンドへのテレポート — 同じサーバー内、またはネットワーク上では、プロキシを経由してフレンドのいるサーバーへ。
- オンライン状態 — ローカルのプレイヤーと、Redis を使うと、同じグループの他のサーバーにいるプレイヤー。
- ストーリーへの連携 — 「このプレイヤーはフレンドか」を判定するファクトと、「オンラインのフレンドは何人か」を判定するファクト。
- プレースホルダー — 人数、リスト、インデックス付きの名前、フレンドのサーバー。任意の MiniMessage テキストで使用できます。
- 管理ツール —
/friend adminで、誰のフレンドでも、一覧表示、確認、強制的な関連付けや解除ができます。
インストール
- メニューを描画する GUI エクステンションをインストールします。
- 任意、複数サーバーで使う場合: MySQL エクステンションをインストールし、その設定で Redis(または Valkey)を有効にします。すべてのサーバーで同じ
redis.group-idを使用してください。サーバー間の動作を参照してください。 - Friend の JAR を
plugins/Typewriter/extensions/に配置し、サーバーを再起動します。 - スタティックページに Friend Artifact エントリーを作成して、Publish します。ないと、何も保存されません。
パーミッション friend.use と friend.tp はデフォルトで全員に、friend.admin はオペレーターに付与されています。
はじめに
/friend で開くフレンドメニューを作成します。
- TypeWriter の Web パネルでスタティックページを開き、Friend Artifact を追加します。
artifactIdはfriend_dataのままにします。 - ページを開き、Friend Menu エントリーを追加します。
/friendコマンドは、最初に見つかった Friend Menu を開くため、通常は 1 つだけ必要です。 inventoryTitle、inventoryRows、guiTypeを設定し、layoutPoolでレイアウトを構築して、mainLayoutIdをルートレイアウトに向けます。レイアウトとフレームについては、GUI ガイドを参照してください。- 装飾とボタンを配置します。アイテムの
buttonTypeで Friend の値を選択します。たとえば、カウンターにはFRIEND_STATUS、申請の切り替えにはFRIEND_SETTINGS_TOGGLE_REQUESTS、メニューを閉じるにはNAV_CLOSEを選びます。 - 画面を宣言します。画面ごとに
viewsにエントリーを 1 つ追加し、フレンドを表示する ID をfriendListViewIdsに、受信した申請を表示する ID をrequestListViewIdsに列挙します。 - プレイヤーヘッドの表示位置を、
contentX、contentY、contentColumns、contentRowsで設定します。 - 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
- Accept Friend RequestAccept a friend request
- Friend MenuFriend Menu
- Remove FriendRemove a friend
- Send Friend RequestSend a friend request
- Teleport to FriendTeleport to a friend
ファクト2
- Is FriendCheck if player is Friend
- Online Friends CountNumber of online friends
アーティファクト1
- Friend ArtifactFriend Data Artifact
トラブルシューティング
再起動後にフレンドが消える。 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 は、フレンドが同じサーバーにいる場合にのみ機能します。