Contenido generado con IA — puede contener errores.

Juego

Sidebars, hologramas y nametags

Todo lo que se dibuja en la pantalla de un jugador, enviado como paquetes y declarado en configuración.

Cuatro módulos con algo en común: ninguno crea estado real en el servidor. Ningún equipo de scoreboard, ningún armor stand, ninguna entidad que se quede colgada.

Scoreboards.show(this, player, config.ffa());

SidebarConfig se anida en tu propio record de config, así que el sidebar vive en el archivo del dueño:

scoreboard:
  enabled: true
  title:
    - "{primary}&lFFA"
  lines:
    - " {muted}❙ {letters}Bajas: {success}%kills%"
    - " {muted}❙ {letters}KDR: {highlight}%kdr%"
  update:
    interval: 15
    smart: true
ClaveQué hace
enabledMostrarlo o no — una sección puede quedarse escrita pero apagada.
titleUna lista. Varias entradas se animan: cada refresco muestra la siguiente.
linesDe arriba abajo. Máximo 15; las de más se descartan.
update.intervalTicks entre refrescos. 20 ticks es un segundo.
update.smartEnviar solo las líneas que cambiaron en vez del tablero entero.

Scoreboards.show devuelve un Board: refresh(), updateData(map), hide(). Los tableros se apilan por jugador — mostrar uno pausa el anterior, y cerrarlo devuelve el anterior. Eso es lo que permite que el sidebar de un evento tape el de un hub sin que ninguno de los dos plugins sepa del otro.

Una línea que se expande

Un placeholder que devuelve texto con saltos de línea se convierte en varias líneas. Es cómo un solo valor %objectives% dibuja tres filas sin que el archivo sepa cuántas habrá.

Hologramas

Holograms.show(this, "trophy", location, config.trophy());
ClaveQué hace
enabledMostrarlo o no.
kindTEXT, ITEM o BLOCK.
linesEl texto, para TEXT.
item / blockQué flota, para los otros dos.
offset-x/y/zDónde se sitúa respecto a la ubicación dada.
view-distanceMás allá, no se envía nada.
refreshCada cuánto se vuelve a dibujar el texto.

Son paquetes de display entity: por jugador cuando el texto difiere según quién mira, compartidos cuando no. No existe nada en el servidor, así que un holograma no puede ser empujado por un pistón, matado por un mob, ni quedarse ahí si el plugin se cae.

Holograms.get(plugin, id), all(plugin), remove(plugin, id) y removeAll(plugin) los gestionan por id. isSupported() responde con honestidad cuando falta PacketEvents.

Nametags

PluginNametags tags = Nametags.of(this);
 
tags.paint(viewer, target, style);                 // cómo un jugador ve a otro
tags.paintEachOther(team, style);                  // un equipo entero, mutuamente
tags.reset(viewer, target);
tags.resetEverywhere(target);

La gracia entera es que es por espectador, no por jugador: el mismo jugador puede ser rojo para uno y azul para otro, que es lo que necesita un juego por equipos y lo que un equipo de scoreboard no puede hacer sin pelearse con el resto de plugins por el mismo nombre de equipo.

El color del nombre, el del brillo y la colisión viajan juntos como un estilo. Los clientes vanilla están incluidos — esto no es una funcionalidad de mod de cliente.

Sin PacketEvents, Nametags.isSupported() es false y cada llamada no hace nada en vez de lanzar.

Waypoints y cooldowns de cliente

Para jugadores en Lunar (por Apollo) o Feather:

Clients.of(this).waypoints().show(player,
        Waypoint.at("koth", location).colour("#ff5555"));
 
Clients.of(this).waypoints().remove(player, "koth");
Clients.of(this).waypoints().clear(player);

El waypoint se indexa por nombre, y el nombre es la clave — dos waypoints llamados spawn son uno. Que estén separados por plugin es lo que evita que el marcador de un plugin de lobby y el de un evento se borren mutuamente.

Los cooldowns de cliente y los marcadores de compañero funcionan igual. Un jugador cuyo cliente no soporta nada de esto simplemente no recibe nada; quien llama nunca ramifica según qué cliente use cada uno.

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