Friend
Présentation
Friend donne à chaque joueur une liste d'amis. Les joueurs envoient une demande, l'autre joueur l'accepte ou la refuse, et les amis acceptés peuvent voir mutuellement leur statut en ligne et se téléporter l'un vers l'autre. Tout est disponible via les commandes /friend, via des actions et des facts TypeWriter, et via un menu que vous concevez vous-même dans le panneau web.
Une amitié est stockée par UUID de joueur, elle survit donc à un changement de pseudo. La liste vit dans un unique Friend Artifact. Lorsque le pont MySQL est installé avec Redis activé, les demandes, les amitiés et la présence en ligne sont partagées entre tous les serveurs d'un réseau, et /friend tp peut envoyer un joueur sur le serveur où se trouve son ami.
Le menu est un menu GUI : vous construisez sa disposition dans le panneau web et marquez certains objets comme boutons Friend. Les têtes des amis sont placées par l'extension elle-même.
Fonctionnalités
- Demandes d'amis — envoyez, acceptez, refusez et supprimez des amis par commande, entrée d'action ou clic dans le menu.
- Interrupteur de demandes — chaque joueur peut désactiver les demandes entrantes avec
/friend toggle. - Menu des amis — une seule entrée contient tous les écrans (amis, demandes, onglets) avec des têtes de joueurs, la pagination et un remplissage des emplacements vides.
- Téléportation vers un ami — sur le même serveur, ou via le proxy vers le serveur de l'ami sur un réseau.
- Statut en ligne — joueurs locaux et, avec Redis, joueurs d'autres serveurs du même groupe.
- Points d'accroche narratifs — un fact pour « ce joueur est-il un ami » et un autre pour « combien d'amis sont en ligne ».
- Placeholders — nombres, listes, noms indexés et serveur d'un ami, utilisables dans n'importe quel texte MiniMessage.
- Outils d'administration — listez, inspectez et liez ou déliez de force les amis de n'importe qui avec
/friend admin.
Installation
- Installez l'extension GUI, qui dessine le menu.
- Facultatif, pour plusieurs serveurs : installez l'extension MySQL et activez Redis (ou Valkey) dans sa configuration, avec le même
redis.group-idsur chaque serveur. Voir Comportement inter-serveurs. - Placez le JAR de Friend dans
plugins/Typewriter/extensions/et redémarrez le serveur. - Créez une entrée Friend Artifact sur une page statique et publiez-la. Sans elle, rien n'est sauvegardé.
Les permissions friend.use et friend.tp sont accordées à tout le monde par défaut, friend.admin aux opérateurs.
Premiers pas
Construisez un menu des amis ouvert par /friend :
- Dans le panneau web de TypeWriter, ouvrez une page statique et ajoutez un Friend Artifact. Gardez
artifactIdàfriend_data. - Ouvrez une page et ajoutez une entrée Friend Menu. La commande
/friendouvre le premier Friend Menu trouvé ; un seul suffit donc normalement. - Définissez
inventoryTitle,inventoryRowsetguiType, puis construisez la disposition danslayoutPoolet faites pointermainLayoutIdvers le layout racine. Voir les guides GUI pour les layouts et les frames. - Placez votre décoration et vos boutons. Sur un objet, choisissez une valeur Friend dans
buttonType, par exempleFRIEND_STATUSpour un compteur,FRIEND_SETTINGS_TOGGLE_REQUESTSpour l'interrupteur de demandes ouNAV_CLOSEpour fermer le menu. - Déclarez les écrans : ajoutez une entrée à
viewspar écran, puis listez les identifiants qui affichent des amis dansfriendListViewIdset ceux qui affichent les demandes entrantes dansrequestListViewIds. - Définissez l'endroit où apparaissent les têtes de joueurs avec
contentX,contentY,contentColumnsetcontentRows. - Publiez, puis exécutez
/frienden jeu.
Pour ouvrir le menu depuis une quête, un PNJ ou un objet, liez l'entrée Friend Menu dans les triggers d'une autre entrée, ou exécutez-la comme une action.
Utilisez le fact Is Friend avec targetName défini sur un pseudo, puis utilisez ce fact dans un critère (la valeur 1 signifie amis). Utilisez Online Friends Count pour des récompenses qui évoluent avec une liste d'amis active.
Fonctionnement
Les données de chaque joueur sont chargées lorsqu'il est en ligne sur le serveur et sauvegardées dans l'artifact en arrière-plan. Chaque modification est aussi publiée sur le bus de messages social, afin que le serveur qui héberge l'autre joueur l'applique aussi.
Menus
L'entrée Friend Menu est un menu GUI avec trois parties propres à Friend.
Têtes de joueurs. Sur un écran déclaré dans friendListViewIds, chaque ami est une tête de joueur, les amis en ligne en premier. Un clic gauche téléporte vers l'ami, un clic droit supprime l'ami. Sur un écran déclaré dans requestListViewIds, un clic gauche accepte la demande et un clic droit la refuse. Les têtes remplissent une grille commençant à contentX et contentY de contentColumns par contentRows emplacements. Les cases libres affichent emptySlotItem.
Boutons. Un objet dont le buttonType correspond à l'une des valeurs ci-dessous est remplacé au moment du rendu :
buttonType | Ce que le joueur voit ou fait |
|---|---|
FRIEND_STATUS | Nombres d'amis en ligne, hors ligne et au total. |
FRIEND_LIST | Nombre total d'amis, ou « aucun ami » lorsque la liste est vide. |
FRIEND_REQUESTS | Nombre de demandes en attente. Un clic ouvre la vue requests lorsqu'il y en a au moins une. |
FRIEND_SETTINGS_TOGGLE_REQUESTS | Cliquer pour activer ou désactiver les demandes entrantes. |
FRIEND_ONLINE_HEADER, FRIEND_OFFLINE_HEADER | En-têtes de section décoratifs. |
PAGE_NAV | Flèche de page. Un clic gauche avance, un clic droit recule, le nom affiche le compteur de pages. Masqué lorsqu'une seule page suffit. |
NAV_BACK, NAV_CLOSE | Retourner au menu précédent, fermer le menu. |
FRIEND_ADD, FRIEND_REMOVE, FRIEND_ACCEPT, FRIEND_DECLINE, FRIEND_TP, FRIEND_MSG, FRIEND_PLAYER_SLOT | Objets d'affichage avec un nom et un lore fixes, sans action propre. |
Les autres valeurs proposées par l'éditeur (NAV_PREV, NAV_NEXT, PENDING_REQUESTS, FRIEND_SLOT, REQUEST_ACCEPT, REQUEST_DECLINE) sont laissées telles que vous les avez configurées.
Commandes d'emplacement. Un objet peut exécuter des commandes commençant par 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>. Elles sont exécutées en tant que joueur qui a cliqué, sans avoir besoin de %player%.
Les textes intégrés du menu (titre par défaut « Amis », noms des boutons et lore des têtes) sont en français. Remplacez-les par les noms et lores d'objets que vous définissez dans le layout et par inventoryTitle. Les messages de chat envoyés par les commandes sont en anglais.
Comportement inter-serveurs
Friend fonctionne sur un seul serveur sans aucun autre plugin. Sur un réseau, installez MySQL et activez Redis ou Valkey, puis donnez à chaque serveur du réseau le même redis.group-id et un redis.server-name différent. Sans group-id, le bus de messages social reste muet et chaque serveur ne voit que ses propres modifications.
Avec le pont connecté :
- les demandes, les nouvelles amitiés, les suppressions et l'interrupteur de demandes sont envoyés aux autres serveurs ;
- un ami est considéré comme en ligne lorsque Redis sait sur quel serveur il se trouve ;
/friend tpvers un ami qui se trouve sur un autre serveur demande au proxy de vous connecter à ce serveur (le proxy doit comprendre le canalbtc:bridge). Vous arrivez sur le serveur, pas à la position de l'ami.
Les artifacts suivent le stockage actif : lorsque mysql.enabled vaut true dans la configuration MySQL, le Friend Artifact est stocké dans la base de données partagée, de sorte que chaque serveur lit la même liste d'amis.
Commandes
Toutes les commandes nécessitent friend.use. Alias : /friends, /f, /amis. La commande seule ouvre le premier Friend Menu et n'affiche rien s'il n'en existe aucun.
| Commande | Description |
|---|---|
/friend | Ouvre le menu des amis. |
/friend add <player> | Envoie une demande d'ami. |
/friend accept <player> | Accepte une demande en attente. |
/friend decline <player> | Refuse une demande en attente. |
/friend remove <player> | Supprime un ami. |
/friend list | Affiche vos amis dans le chat avec leur statut en ligne. |
/friend toggle | Active ou désactive les demandes d'amis entrantes. |
/friend tp <player> | Se téléporte vers un ami (nécessite aussi friend.tp). |
/friend admin list <player> | Liste les amis d'un joueur en ligne (nécessite friend.admin). |
/friend admin requests <player> | Liste les demandes en attente d'un joueur en ligne. |
/friend admin add <player> <player> | Rend amis deux joueurs en ligne, sans étape de demande. |
/friend admin remove <player> <friend> | Retire un ami de la liste d'un joueur en ligne. |
Permissions
| Permission | Par défaut | Autorise |
|---|---|---|
friend.use | Tout le monde | Toutes les commandes /friend. Les clics de menu exécutent les mêmes actions sans la vérifier. |
friend.tp | Tout le monde | /friend tp. Le clic sur une tête dans le menu exécute directement la téléportation et ne vérifie pas cette permission. |
friend.admin | Opérateurs | Les commandes /friend admin. |
Placeholders
Ce sont des balises MiniPlaceholders, écrites dans un texte MiniMessage sous la forme <friend_count>. Les booléens renvoient 1 ou 0.
| Placeholder | Renvoie |
|---|---|
<friend_count> | Nombre d'amis du joueur. |
<friend_online_count> | Nombre d'amis en ligne sur ce serveur. |
<friend_online_network_count> | Nombre d'amis connus comme étant en ligne sur n'importe quel serveur du groupe. |
<friend_requests_count> | Nombre de demandes en attente. |
<friend_requests_enabled> | 1 lorsque les demandes entrantes sont autorisées. |
<friend_list> | Noms des amis séparés par une virgule. |
<friend_online_list> | Noms des amis en ligne sur ce serveur. |
<friend_name:index> | Nom de l'ami à cette position, à partir de 0. |
<friend_online_name:index> | Nom de l'ami en ligne à cette position, à partir de 0. |
<friend_is_friend:name> | 1 lorsque le joueur nommé est un ami. |
<friend_server:name> | Serveur sur lequel le joueur nommé est en ligne, vide lorsqu'il est inconnu. |
Entrées
8 entrées, générées depuis la source de l'extension.
Actions5
- 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
Faits2
- Is FriendCheck if player is Friend
- Online Friends CountNumber of online friends
Artefacts1
- Friend ArtifactFriend Data Artifact
Dépannage
Les amis disparaissent après un redémarrage. Aucun Friend Artifact n'est publié ; les données ne vivent donc qu'en mémoire. Ajoutez l'artifact sur une page statique et publiez.
/friend ne fait rien. La commande ouvre la première entrée Friend Menu et reste silencieuse s'il n'y en a pas. Créez et publiez un Friend Menu. Les sous-commandes comme /friend list fonctionnent sans menu.
La demande a été envoyée mais l'autre joueur ne la reçoit jamais. Le destinataire doit être en ligne sur un serveur du réseau au moment de l'envoi de la demande. Les demandes à destination de joueurs hors ligne ne sont pas conservées, et l'expéditeur est quand même informé que la demande a été envoyée. Avec plusieurs serveurs, vérifiez que redis.group-id a la même valeur partout, sinon les demandes ne traversent pas les serveurs.
La liste d'amis est vide sur un second serveur. Chaque serveur a besoin du même redis.group-id, d'un redis.server-name unique, et mysql.enabled doit valoir true pour que l'artifact soit partagé via la base de données. Consultez les logs de l'extension MySQL à la recherche d'erreurs de connexion Redis.
La grille de têtes est vide ou n'affiche que des objets de remplissage. L'écran actuel n'est pas listé dans friendListViewIds ou requestListViewIds. Lorsque le menu déclare des views, seuls les identifiants listés affichent des têtes. Sans views, définissez view sur friends ou requests.
Se téléporter vers un ami ne fait rien sur un autre serveur. Le proxy doit gérer le canal btc:bridge et la présence Redis doit fonctionner. Sans connexion au réseau, /friend tp ne fonctionne que si l'ami est sur le même serveur.
Extensions associées
- MySQL — messagerie Redis, présence et stockage partagé pour les amis inter-serveurs.
- GUI — layouts, vues et boutons utilisés par le menu des amis.
- Party et Guild — les autres systèmes sociaux construits sur le même bus de messages.
- BTC Sky — lie automatiquement les membres d'une île coopérative comme amis.