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.
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}'| Clave | Por defecto | Significado |
|---|---|---|
permission | vacío | Quién puede recibir este formato. Vacío significa todo el mundo |
weight | 0 | Cuando un jugador califica para varios, gana el más pesado |
per-viewer | false | Dibujar 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
| Clave | Contiene |
|---|---|
text | Lo que se dibuja. Admite tokens de paleta, códigos & y MiniMessage |
hover | Una línea o una lista, mostrada mientras el ratón está sobre esta pieza |
click | RUN_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.
| Token | Es |
|---|---|
{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.
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.
| Componente | Dibuja | Hover | Clic |
|---|---|---|---|
'1' | {prefix} {nick}{suffix} | Un recuadro INFORMATION: ping con %player_ping%, el rango con {prefix} y una línea que invita a un mensaje privado | SUGGEST_COMMAND:/msg {name} |
'2' | ➠ | — | — |
'3' | {message} | Un recuadro WARNING que ofrece reportar el mensaje | RUN_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.
/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
La clave format que fija un canal a uno de estos archivos.
Los mensajes privados, que son lo que dibuja msg.yml.
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