Friend
Descripción general
Friend da a cada jugador una lista de amigos. Los jugadores envían una solicitud, el otro jugador la acepta o la rechaza, y los amigos aceptados pueden ver el estado de conexión del otro y teletransportarse el uno al otro. Todo está disponible mediante los comandos /friend, mediante acciones y hechos de TypeWriter y mediante un menú que diseñas tú mismo en el panel web.
Una amistad se almacena por UUID de jugador, por lo que sobrevive a un cambio de nombre. La lista está en un único Friend Artifact. Cuando el puente MySQL está instalado con Redis activado, las solicitudes, las amistades y la presencia en línea se comparten entre todos los servidores de una red, y /friend tp puede llevar a un jugador al servidor donde está su amigo.
El menú es un menú de GUI: construyes su layout en el panel web y marcas algunos objetos como botones de Friend. Las cabezas de los amigos las coloca la propia extensión.
Características
- Solicitudes de amistad: envía, acepta, rechaza y elimina amigos mediante comando, entrada de acción o clic en el menú.
- Interruptor de solicitudes: cada jugador puede desactivar las solicitudes entrantes con
/friend toggle. - Menú de amigos: una entrada contiene todas las pantallas (amigos, solicitudes, pestañas) con cabezas de jugador, paginación y un relleno para las ranuras vacías.
- Teletransporte a un amigo: en el mismo servidor o, a través del proxy, al servidor del amigo en una red.
- Estado de conexión: jugadores locales y, con Redis, jugadores de otros servidores del mismo grupo.
- Enlaces con la historia: un hecho para "este jugador es amigo" y otro para "cuántos amigos están conectados".
- Placeholders: recuentos, listas, nombres indexados y el servidor de un amigo, utilizables en cualquier texto MiniMessage.
- Herramientas de administración: lista, inspecciona y enlaza o desenlaza por la fuerza los amigos de cualquiera con
/friend admin.
Instalación
- Instala la extensión GUI, que dibuja el menú.
- Opcional, para varios servidores: instala la extensión MySQL y activa Redis (o Valkey) en su configuración, con el mismo
redis.group-iden cada servidor. Consulta Comportamiento entre servidores. - Coloca el JAR de Friend en
plugins/Typewriter/extensions/y reinicia el servidor. - Crea una entrada Friend Artifact en una página estática y publícala. Sin ella no se guarda nada.
Los permisos friend.use y friend.tp se conceden a todos por defecto, y friend.admin a los operadores.
Primeros pasos
Construye un menú de amigos que se abra con /friend:
- En el panel web de TypeWriter, abre una página estática y añade un Friend Artifact. Deja
artifactIdcomofriend_data. - Abre una página y añade una entrada Friend Menu. El comando
/friendabre el primer Friend Menu que encuentre, así que normalmente solo necesitas uno. - Establece
inventoryTitle,inventoryRowsyguiType, construye después el layout enlayoutPooly apuntamainLayoutIdal layout raíz. Consulta las guías de GUI para los layouts y los marcos. - Coloca tu decoración y tus botones. En un objeto, elige un valor de Friend en
buttonType, por ejemploFRIEND_STATUSpara un contador,FRIEND_SETTINGS_TOGGLE_REQUESTSpara el interruptor de solicitudes oNAV_CLOSEpara cerrar el menú. - Declara las pantallas: añade un elemento a
viewspor cada pantalla y enumera después los ids que muestran amigos enfriendListViewIdsy los ids que muestran solicitudes entrantes enrequestListViewIds. - Define dónde aparecen las cabezas de los jugadores con
contentX,contentY,contentColumnsycontentRows. - Publica y ejecuta
/frienden el juego.
Para abrir el menú desde una misión, un NPC o un objeto, enlaza la entrada Friend Menu en los triggers de otra entrada, o ejecútala como una acción.
Usa el hecho Is Friend con targetName establecido en el nombre de un jugador y luego usa el hecho en un criterio (el valor 1 significa que son amigos). Usa Online Friends Count para recompensas que escalen con una lista de amigos activa.
Cómo funciona
Los datos de cada jugador se cargan cuando ese jugador está conectado al servidor y se guardan en el artefacto en segundo plano. Cada cambio se publica también en el bus de mensajes social, de modo que el servidor que contiene al otro jugador también lo aplica.
Menús
La entrada Friend Menu es un menú de GUI con tres partes específicas de Friend.
Cabezas de jugador. En una pantalla declarada en friendListViewIds, cada amigo es una cabeza de jugador, con los amigos conectados primero. El clic izquierdo teletransporta al amigo y el clic derecho lo elimina. En una pantalla declarada en requestListViewIds, el clic izquierdo acepta la solicitud y el clic derecho la rechaza. Las cabezas rellenan una cuadrícula que empieza en contentX y contentY de contentColumns por contentRows ranuras. Las celdas libres muestran emptySlotItem.
Botones. Un objeto cuyo buttonType es uno de los valores siguientes se sustituye al renderizar:
buttonType | Qué ve o hace el jugador |
|---|---|
FRIEND_STATUS | Recuentos de amigos conectados, desconectados y totales. |
FRIEND_LIST | Número total de amigos, o "sin amigos" cuando la lista está vacía. |
FRIEND_REQUESTS | Número de solicitudes pendientes. Un clic abre la vista requests cuando hay al menos una. |
FRIEND_SETTINGS_TOGGLE_REQUESTS | Clic para activar o desactivar las solicitudes entrantes. |
FRIEND_ONLINE_HEADER, FRIEND_OFFLINE_HEADER | Encabezados de sección decorativos. |
PAGE_NAV | Flecha de página. El clic izquierdo avanza, el clic derecho retrocede y el nombre muestra el contador de página. Se oculta cuando basta con una página. |
NAV_BACK, NAV_CLOSE | Vuelven al menú anterior, cierran el menú. |
FRIEND_ADD, FRIEND_REMOVE, FRIEND_ACCEPT, FRIEND_DECLINE, FRIEND_TP, FRIEND_MSG, FRIEND_PLAYER_SLOT | Objetos de visualización con un nombre y un lore fijos, sin acción propia. |
Los demás valores que ofrece el editor (NAV_PREV, NAV_NEXT, PENDING_REQUESTS, FRIEND_SLOT, REQUEST_ACCEPT, REQUEST_DECLINE) se dejan tal como los hayas configurado.
Comandos de ranura. Un objeto puede ejecutar comandos que empiecen por 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>. Se ejecutan como el jugador que hizo clic, sin necesidad de %player%.
Los textos integrados del menú (el título por defecto "Amis", los nombres de los botones y el lore de las cabezas) están en francés. Sustitúyelos con los nombres y el lore de los objetos que definas en el layout y con inventoryTitle. Los mensajes de chat que envían los comandos están en inglés.
Comportamiento entre servidores
Friend funciona en un solo servidor sin ningún otro plugin. En una red, instala MySQL y activa Redis o Valkey, y da después a cada servidor de la red el mismo redis.group-id y un redis.server-name distinto. Sin un group-id, el bus de mensajes social permanece en silencio y cada servidor solo ve sus propios cambios.
Con el puente conectado:
- las solicitudes, las nuevas amistades, las eliminaciones y el interruptor de solicitudes se envían a los demás servidores;
- un amigo cuenta como conectado cuando Redis sabe en qué servidor está;
/friend tpcon un amigo que está en otro servidor pide al proxy que te conecte a ese servidor (el proxy debe entender el canalbtc:bridge). Llegas al servidor, no a la posición del amigo.
Los artefactos siguen el almacenamiento activo: cuando mysql.enabled es true en la configuración de MySQL, el Friend Artifact se almacena en la base de datos compartida, por lo que todos los servidores leen la misma lista de amigos.
Comandos
Todos los comandos necesitan friend.use. Alias: /friends, /f, /amis. El comando sin argumentos abre el primer Friend Menu y no imprime nada cuando no existe ninguno.
| Comando | Descripción |
|---|---|
/friend | Abre el menú de amigos. |
/friend add <player> | Envía una solicitud de amistad. |
/friend accept <player> | Acepta una solicitud pendiente. |
/friend decline <player> | Rechaza una solicitud pendiente. |
/friend remove <player> | Elimina a un amigo. |
/friend list | Imprime tus amigos en el chat con su estado de conexión. |
/friend toggle | Activa o desactiva las solicitudes de amistad entrantes. |
/friend tp <player> | Te teletransporta a un amigo (requiere también friend.tp). |
/friend admin list <player> | Lista los amigos de un jugador conectado (requiere friend.admin). |
/friend admin requests <player> | Lista las solicitudes pendientes de un jugador conectado. |
/friend admin add <player> <player> | Hace amigos a dos jugadores conectados, sin paso de solicitud. |
/friend admin remove <player> <friend> | Elimina a un amigo de la lista de un jugador conectado. |
Permisos
| Permiso | Por defecto | Concede |
|---|---|---|
friend.use | Todos | Todos los comandos /friend. Los clics del menú ejecutan las mismas acciones sin comprobarlo. |
friend.tp | Todos | /friend tp. El clic en la cabeza en el menú ejecuta directamente el teletransporte y no comprueba este permiso. |
friend.admin | Operadores | Los comandos /friend admin. |
Placeholders
Son etiquetas de MiniPlaceholders, escritas en texto MiniMessage como <friend_count>. Los booleanos devuelven 1 o 0.
| Placeholder | Devuelve |
|---|---|
<friend_count> | Número de amigos del jugador. |
<friend_online_count> | Número de amigos conectados en este servidor. |
<friend_online_network_count> | Número de amigos que se sabe que están conectados en cualquier servidor del grupo. |
<friend_requests_count> | Número de solicitudes pendientes. |
<friend_requests_enabled> | 1 cuando se permiten solicitudes entrantes. |
<friend_list> | Nombres de los amigos separados por una coma. |
<friend_online_list> | Nombres de los amigos conectados en este servidor. |
<friend_name:index> | Nombre del amigo en esa posición, empezando en 0. |
<friend_online_name:index> | Nombre del amigo conectado en esa posición, empezando en 0. |
<friend_is_friend:name> | 1 cuando el jugador indicado es un amigo. |
<friend_server:name> | Servidor en el que está conectado el jugador indicado, vacío cuando se desconoce. |
Entradas
8 entradas, generadas a partir del código fuente de la extensión.
Acciones5
- 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
Hechos2
- Is FriendCheck if player is Friend
- Online Friends CountNumber of online friends
Artefactos1
- Friend ArtifactFriend Data Artifact
Resolución de problemas
Los amigos desaparecen tras un reinicio. No hay ningún Friend Artifact publicado, por lo que los datos solo viven en memoria. Añade el artefacto en una página estática y publica.
/friend no hace nada. El comando abre la primera entrada Friend Menu y se queda en silencio cuando no hay ninguna. Crea y publica un Friend Menu. Los subcomandos como /friend list funcionan sin menú.
La solicitud se envió pero el otro jugador nunca la recibe. El destinatario debe estar conectado a un servidor de la red cuando se envía la solicitud. Las solicitudes a jugadores desconectados no se conservan, y al remitente se le sigue diciendo que la solicitud se envió. Con varios servidores, comprueba que redis.group-id tiene el mismo valor en todas partes; de lo contrario las solicitudes no cruzan entre servidores.
La lista de amigos está vacía en un segundo servidor. Cada servidor necesita el mismo redis.group-id y un redis.server-name único, y mysql.enabled debe ser true para que el artefacto se comparta a través de la base de datos. Revisa los registros de la extensión MySQL por si hay errores de conexión con Redis.
La cuadrícula de cabezas está vacía o solo muestra objetos de relleno. La pantalla actual no figura en friendListViewIds ni en requestListViewIds. Cuando el menú declara views, solo muestran cabezas los ids enumerados allí. Sin views, establece view en friends o requests.
Teletransportarse a un amigo no hace nada en otro servidor. El proxy debe gestionar el canal btc:bridge y la presencia en Redis debe funcionar. Sin conexión de red, /friend tp solo funciona si el amigo está en el mismo servidor.
Extensiones relacionadas
- MySQL: mensajería Redis, presencia y almacenamiento compartido para amigos entre servidores.
- GUI: layouts, vistas y botones que usa el menú de amigos.
- Party y Guild: los otros sistemas sociales construidos sobre el mismo bus de mensajes.
- BTC Sky: enlaza automáticamente como amigos a los miembros cooperativos de una isla.