Primeros pasos
Los primeros diez minutos: el menú, qué posee ya un jugador, conceder una etiqueta y meter la identidad en tu formato de chat.
El plugin está instalado y el servidor está arriba. Tu chat sigue igual, ningún jugador ha recibido nada, y el catálogo está ahí con 180 etiquetas y unos 350 colores dentro. Este es el camino más corto de ahí a un jugador con algo puesto y todo el mundo viéndolo.
Abre el menú
/cc en el juego. El permiso que pide, exyliachatcosmetics.command.cosmetics, está declarado
como default: true en el plugin.yml, así que todos los jugadores ya lo tienen — un nodo sin
declarar es solo de operadores en Bukkit, que es justo por lo que los que un jugador necesita para
usar el plugin están declarados y los que deciden qué posee no lo están.
La pantalla principal tiene siete cosas: YOUR CHAT, una previsualización en vivo de la línea que el jugador enviaría ahora mismo; IDENTITY para etiquetas, colores de nick y colores de rango; MESSAGE para colores de chat, colores de sombra, fuentes y modificadores; FAVORITES; LOADOUTS; YOUR COLLECTION, que cuenta lo que posee; y TAKE IT ALL OFF, que solo se dibuja cuando hay algo que quitarse. No hay botón de cerrar en ninguna pantalla — un jugador cierra una ventana igual que cierra cualquier otra.
Cuatro atajos de primer nivel abren un explorador directamente, con el mismo permiso: /tags,
/nickcolors, /rankcolors y /chatcolors.
Mira qué posee ya un jugador
Abre /cc con alguien sin ningún permiso y casi todas las filas dicen Not yours yet. Ese es el
valor por defecto deliberado: una entrada del catálogo se posee por el nodo
exyliachatcosmetics.<type>.<id> o por una concesión, y por nada más.
Los colores de rango son la excepción, y conviene entenderla antes de escribir un solo nodo. Vienen
con permission: false — el valor por defecto del propio tipo, al revés que en cualquier otro
archivo — lo que significa que el nodo de permiso no decide quién posee uno. Lo que decide es la
lista groups de la entrada, leída de LuckPerms.
| Pestaña | Entradas | Quién las posee |
|---|---|---|
solid | 15 | Todo el mundo. No nombran grupos ni ponen nodo, así que cualquier rango puede llevarlas. |
metal, gems, gradient, animated | 54 | Quien tenga exyliachatcosmetics.rank_color.<id>. Estas entradas vuelven a poner permission: true, una por una. |
staff | 8 | Quien esté en alguno de los grupos que nombra la entrada — owner, admin, mod y demás. |
Así que en un servidor con LuckPerms y nada más configurado, un jugador recién llegado ya puede
abrir /rankcolors y repintar el prefijo de su rango en cualquiera de quince colores planos. Todo
lo demás te espera a ti.
Las ocho entradas de staff listan grupos como owner, admin, mod y helper. Si LuckPerms
en tu servidor los llama de otra forma, la pestaña estará vacía para todos hasta que edites las
listas groups en cosmetics/rank-colors.yml.
Una etiqueta del catálogo, event, también viene con permission: false. No hay ningún nodo que
la conceda — existe para repartirse, y no se puede comprar.
Dale una etiqueta a alguien
/cca give Notch tag:heart
/cca give Notch tag:heart 14d --source PURCHASE --note "Oferta de octubre"Un cosmético se nombra siempre type:id, y se autocompleta. Sin duración es permanente; 14d son
catorce días, en el formato de duraciones de ExyliaLib (30m, 2h, 14d, 1w, con decimales).
Sin --source la concesión se registra como ADMIN; --source acepta PURCHASE, REWARD,
EVENT, ACHIEVEMENT o EXTERNAL, y --ref y --note son tuyos para meter un id de pedido o un
motivo.
El destinatario puede estar desconectado mientras haya jugado antes. Comprueba qué quedó con
/cca list Notch, que lista cada concesión con su id de fila, su origen y el tiempo que le queda, o
con /cca check Notch tag:heart para una sola respuesta.
Un jugador puede tener varias concesiones del mismo cosmético a la vez — una permanente de un rango, una de admin de 14 días, una compra de 30 — y quitar una nunca toca las demás.
Abre una pestaña entera de golpe
Conceder 180 etiquetas de una en una no es la idea. Cuatro formas de nodo, de la más estrecha a la más ancha:
| Nodo | Posee |
|---|---|
exyliachatcosmetics.tag.heart | ese cosmético |
exyliachatcosmetics.tag.category.symbols | todas las etiquetas de la pestaña symbols |
exyliachatcosmetics.tag.* | todas las etiquetas |
exyliachatcosmetics.* | todo el catálogo |
Los ids de tipo son tag, nick_color, rank_color, chat_color, shadow_color, font y
modifier, y la categoría es el id de la pestaña tal como está escrito en el archivo — así que un
rango VIP que debería llevarse los colores premium y todas las fuentes es:
/lp group vip permission set exyliachatcosmetics.chat_color.category.premium
/lp group vip permission set exyliachatcosmetics.nick_color.category.premium
/lp group vip permission set exyliachatcosmetics.font.*La propiedad por nodo no se guarda nunca. Se pregunta en vivo y se memoriza por sesión, así que quitar el nodo quita el cosmético sin que haya que limpiar nada — y lo que el jugador tenía puesto se queda en su fila, listo para dibujarse otra vez el día que el nodo vuelva.
Mete la identidad en tu formato de chat
El plugin nunca cancela un evento de chat y nunca es dueño de tu formato. La etiqueta y el nombre coloreado los colocas tú, como placeholders, en el plugin de chat que ya lleves:
%exyliachatcosmetics_tag%%exyliachatcosmetics_nick%<gray>: <white>%message%%exyliachatcosmetics_tag% es la etiqueta puesta, ya con su espacio final incluido, y una
etiqueta personalizada del jugador gana a una del catálogo. %exyliachatcosmetics_nick% es su
nombre en su color de nick. %exyliachatcosmetics_identity% son las dos juntas.
Tres notaciones, porque los plugins de chat no se ponen de acuerdo en una — elige el sufijo que entienda el tuyo:
| Placeholder | Salida |
|---|---|
%exyliachatcosmetics_tag% | MiniMessage, <#ffd700>[MVP]</#ffd700> — el que va por defecto |
%exyliachatcosmetics_tag_legacy% | códigos &, con &#rrggbb para el hex |
%exyliachatcosmetics_tag_section% | códigos §, con §x§r§r… para el hex |
El nombre lleva las mismas tres: %exyliachatcosmetics_nick%,
%exyliachatcosmetics_nick_legacy% y %exyliachatcosmetics_nick_section%. Así que el mismo
formato para un plugin de chat de cadenas antiguas queda:
%exyliachatcosmetics_tag_section%%exyliachatcosmetics_nick_section%§7: §f%message%Equivocarse aquí es el error más común de todos, y se ve como un <#ffd700> en crudo dentro del
chat. Fuera del texto propio de ExyliaLib, estos necesitan PlaceholderAPI instalado para
resolverse.
Un jugador que no lleva nada devuelve una cadena vacía, así que un formato con
%exyliachatcosmetics_tag% dentro es seguro para todo el mundo desde el primer día.
Elige el hook adecuado para tu plugin de chat
Con eso queda la identidad. El cuerpo del mensaje — el color de chat, la sombra, la fuente, los
modificadores — lo estiliza el hook, y el modo correcto depende de cómo lea un mensaje tu plugin de
chat. chat.hook en config.yml:
| Lo que llevas | hook | Por qué |
|---|---|---|
El chat propio de Paper, o cualquier plugin que dibuje por AsyncChatEvent / un ChatRenderer | decorate | El cuerpo estilizado reemplaza el mensaje decorado antes de que ningún plugin de chat lo vea, y no se cancela nada. El que va por defecto, y la respuesta correcta para la mayoría de servidores. |
Un plugin que lee AsyncChatEvent.message() pero ignora la decoración | chat_event, con chat.priority por debajo de la suya (LOW) | La reescritura llega antes de que él lea. |
Un plugin que sigue en AsyncPlayerChatEvent | legacy_event, a una prioridad por debajo de la suya | La cadena que lee ya lleva los colores en §. |
| Spigot, sin eventos de Paper | cualquiera | decorate y chat_event caen a legacy_event con un aviso al arrancar. |
| Tu propio código, componiendo la línea tú | off | No se toca nada; usa ChatCosmeticsAPI.styleMessage para que nada se estilice dos veces. |
Cualquier cambio en el cuerpo de un mensaje — un color incluido — lo marca como "modificado" para
un cliente vanilla. Se sigue viendo, pero un cliente con Only Show Secure Chat activado lo
esconde. Todos los plugins de color de chat tienen esta propiedad; los servidores a los que les
importa ponen enforce-secure-profile=false.
Míralo antes que nadie
/cc preview
/cc preview lo que te apetezcaDibuja la línea que produciría el chat del jugador ahora mismo, en su propio chat y en el de nadie
más. Su forma es preview.format en config.yml,
%tag%%prefix% %name%%suffix%{letters_black}: %message% por defecto, así que enseña el prefijo del
rango en el color de rango que se esté mirando, además de la etiqueta y el nombre.
Desde la consola o como admin, /cca preview <jugador> [mensaje] le manda al destinatario su
propia línea, y /cca render <jugador> manda las piezas de una en una — la etiqueta, el nombre
coloreado, un mensaje de muestra estilizado — que es lo que te dice cuál de las tres está mal
cuando algo no cuadra.
Después de los primeros diez minutos
Todo lo anterior es la mitad de cosméticos funcionando a través del chat que ya llevas. Desde aquí hay dos direcciones: poner más catálogo en manos de los jugadores, o entregarle también el chat al plugin.
Disponible, poseído, puesto — tres preguntas distintas, concesiones que caducan, y por qué nunca se borra nada por un "no".
PermisosTodos los nodos, y cuáles concede ya una instalación recién hecha.
PlaceholdersTodos ellos, las tres notaciones y la sintaxis de reserva.
El módulo de chatCanales, formatos, filtro, menciones, susurros y anunciador, si quieres que este plugin lleve también el chat.
¿Falta algo en esta página? Dínoslo en Discord