Contenido generado con IA — puede contener errores.

Módulo de chat

Formatos

Un archivo por formato en chat/formats/: componentes, hovers, clics, la lista de tokens y cómo se elige un formato.

Un formato es una línea de chat entera, descrita por un archivo de chat/formats/. El nombre del archivo es el nombre del formato: vip.yml es el formato vip. Vienen dos — default.yml y msg.yml — y ambos se vuelven a escribir en el primer arranque si faltan.

Un archivo es un formato, o varios

Un archivo con components: en la raíz es un formato, con el nombre del archivo.

Un archivo sin eso se lee bloque a bloque: cada bloque de primer nivel que tenga una sección components: se convierte en un formato llamado archivo.bloque. Así es como msg.yml produce msg.sender y msg.receiver. Un formato de bloque nunca entra en la competencia por peso de más abajo: se pide por su nombre, desde la función que lo necesita.

plugins/ExyliaChatCosmetics/chat/formats/vip.yml
permission: exyliachatcosmetics.chat.format.vip   # vacío = todo el mundo
weight: 10                                        # gana el más pesado de los que califican
per-viewer: false                                 # true dibuja la línea una vez por lector
components:
  '1':
    text: '{tag}{nick} {letters_black}» '
    hover:
      - '{secondary}Player'
      - ' {letters_black}▎ {letters}Name {letters_black}» {info}{name}'
    click: 'SUGGEST_COMMAND:/msg {name} '
  '2':
    text: '{message}'
ClavePor defectoSignificado
permissionvacíoQuién puede recibir este formato. Vacío significa todo el mundo
weight0Cuando un jugador califica para varios, gana el más pesado
per-viewerfalseDibujar la línea una vez por lector aunque nada en ella lo pida
components—Las piezas de la línea, en el orden en que están escritas

Las claves de los componentes son nombres, no índices; '1', '2' es una convención, no un requisito. Un componente sin text se salta y se reporta. Un formato que se queda sin componentes utilizables se descarta, y si el que falló fue default la consola lo dice y los mensajes salen desnudos.

Dentro de un componente

ClaveContiene
textLo que se dibuja. Admite tokens de paleta, códigos & y MiniMessage
hoverUna línea o una lista, mostrada mientras el ratón está sobre esta pieza
clickRUN_COMMAND:/x, SUGGEST_COMMAND:/x, OPEN_URL:https://x o COPY:texto

Un click que no sea uno de esos cuatro se reporta al leer el archivo, en vez de descartarse en silencio en cada mensaje.

Los tokens funcionan en los tres. Un clic lleva sus tokens como texto plano, así que SUGGEST_COMMAND:/msg {name} pone el nombre real del jugador en la caja de chat y no el literal {name}.

Qué formato lleva un mensaje

El del canal

Si el canal nombra un format y ese archivo cargó, se usa, hable quien hable.

El más pesado para el que califica el emisor

Todos los formatos de primer nivel cuyo permission tenga el emisor, o que no tengan ninguno. Gana el weight más alto. Los formatos de bloque como msg.sender nunca entran en esta competencia.

`default`

Cuando no calificó ninguno.

Tokens

Los tokens son componentes, colocados en la línea directamente — sin pasar por un placeholder, y una etiqueta o un nombre coloreado conserva sus propios colores en vez de aplanarse a texto.

TokenEs
{message}El cuerpo del mensaje, ya pintado
{name}El nombre plano
{nick}El nombre en el color de nick del jugador
{tag}La etiqueta equipada, con su formato
{prefix}El prefijo del rango, en el color de rango del jugador
{suffix}El sufijo del rango, en ese mismo color
{channel}El name del canal, interpretado, para que su color sobreviva

Los formatos de mensaje privado tienen su propio juego: {message}, {sender}, {sender_nick}, {sender_tag}, {receiver}, {receiver_nick}, {receiver_tag}.

Llaves en lugar de porcentajes, para que un token nunca choque con un placeholder. Un par de llaves que nadie reclama — {primary}, {letters_black} — se deja para el motor de texto, que lo lee como un color de paleta.

El color con el que se escribió una línea cruza un token: la pieza anterior a {nick} abre un color, el token se dibuja bajo él como respaldo, y la pieza siguiente continúa la misma frase. Cualquier cosa que nombre su propio color, el nombre de un ítem por ejemplo, sigue ganando.

Placeholders y per-viewer

Cualquier %placeholder% que conozca ExyliaLib o PlaceholderAPI funciona en text, hover y click. Por defecto se resuelve para el emisor, porque la línea habla de él.

Enciende per-viewer: true y la línea se dibuja una vez por lector: %player_…% pasa a ser el lector y %target_…% sigue siendo el emisor. Ese es el interruptor para una línea que dice algo sobre quien la está mirando.

Un placeholder %rel_…% hace que un formato dependa del lector por sí solo, esté en text, en hover o en click, sin que per-viewer esté puesto: un placeholder relacional no significa nada sin un lector.

Per-viewer cuesta un dibujado por lector

Un formato que no depende del lector se dibuja una vez por mensaje y se le entrega a todos. Uno que sí depende se dibuja una vez por lector. En un servidor lleno eso es la diferencia entre un dibujado y cien, así que enciéndelo solo para un formato que lo necesite.

El relleno queda fuera del hover y del clic

Los espacios con los que se rellena un componente se quitan de sus dos extremos antes de poner el hover y el clic, y se vuelven a poner después. Un hueco no pertenece a ninguna de las dos piezas que separa.

Sin eso, el espacio de '{nick} ➞ ' quedaba dentro del hover, y pasar el ratón por la flecha respondía "Player" justo donde empezaba el mensaje. El pelado ocurre sobre la pieza ya dibujada y no sobre el texto escrito, así que un espacio que dejó un placeholder — un prefijo de rango vacío en '{prefix} {nick}' — también queda fuera del hover.

Por eso msg.yml tiene un componente que no es más que un espacio entre el encabezado y el mensaje: un hueco deliberado que no responde a ninguno de los dos.

Para comprobar dónde termina un hover de verdad, usa /cca chat line [mensaje]. Dibuja tu propia línea, te la envía y escribe en la consola esa misma línea partida en los tramos que comparten un hover y un clic.

Qué viene incluido

default.yml

Tres componentes, y es un ejemplo trabajado de todo lo anterior.

ComponenteDibujaHoverClic
'1'{prefix} {nick}{suffix}Un recuadro INFORMATION: ping con %player_ping%, el rango con {prefix} y una línea que invita a un mensaje privadoSUGGEST_COMMAND:/msg {name}
'2'➠——
'3'{message}Un recuadro WARNING que ofrece reportar el mensajeRUN_COMMAND:/report {name} offensive_language

El separador es un componente propio precisamente para que ni el hover del nombre ni el clic de reporte del mensaje lleguen a la flecha que hay entre ellos. weight: 0, sin permission: lo recibe todo el mundo salvo que aplique un formato más pesado.

El clic de reporte da por hecho un comando de reportes

/report no viene con este plugin. Si tu servidor no tiene un comando así, cambia o quita el clic del tercer componente.

msg.yml

Dos bloques, sender y receiver, que dan los formatos msg.sender y msg.receiver. Cada uno tiene tres componentes: un encabezado — [Tú ➜ él] en una pantalla, [él ➜ Tú] en la otra — que hace hover con quién es la conversación y clic a SUGGEST_COMMAND:/reply , después un espacio a secas, y después {message} con hover "Click to copy it" y COPY:{message}.

Cada pantalla se dibuja con su propio lector como viewer y con la otra persona como objetivo de los placeholders, para que un hover que habla de "él" hable de la persona correcta en las dos.

Relacionado

El nodo de permiso de formato está en Permisos, y /cca chat line en Comandos.

¿Falta algo en esta página? Dínoslo en Discord