UiCore
Descripción general
UiCore dibuja menús, tarjetas, un HUD, diálogos, un minimapa y un mapa del mundo en el espacio de GUI del cliente vanilla, sin ningún mod en el cliente. Lo consigue con un shader de núcleo (text.vsh) incluido en el resource pack: todo lo que se dibuja es un glifo de fuente, y el shader lee el ascent y el color del glifo para saber dónde colocarlo en una cuadrícula fija de 15 por 15. El resultado es idéntico para todos los jugadores, sea cual sea su escala de GUI, su campo de visión o el tamaño de su ventana, y puede aparecer en cualquier lugar de la pantalla en lugar de solo donde se abre un inventario.
UiCore sustituye a dos herramientas más antiguas: AdvancedMenus (menús de cofre) y BetterHud. Un menú ya no es un inventario de cofre: es una vista, una pila de capas de componentes que creas en el panel web y a la que el jugador apunta con la cabeza. La misma cuadrícula dibuja los módulos del HUD, las líneas de diálogo y las opciones.
La carpeta de código fuente de esta extensión lleva el nombre de la antigua extensión de HUD; el nombre de la extensión es UiCore. Se ejecuta en la versión BTC de TypeWriter, necesita CraftEngine para alojar el resource pack y está marcada como alfa (0.1.0-alpha).
Características
- Vistas: pantallas completas con paneles, botones, listas, pestañas, subpantallas, tooltips, indicadores y entrada de texto.
- Estados y animaciones: los componentes cambian con hechos o permisos, y una vista puede aparecer con un barrido, un florecimiento o un fundido.
- Módulos de HUD: elementos permanentes anclados a una esquina o al centro, ocultos mientras el jugador lee otra pantalla.
- Diálogos: líneas habladas y opciones que se responden con la rueda del ratón o con el cursor, con una única entrada de estilo compartida.
- Diálogo cinemático: la misma línea hablada en una línea de tiempo de cinemática.
- Minimapa y mapa del mundo: mapa del terreno con puntos de interés, waypoints y un modo de exploración.
- Placas de nombre: placas de nombre 3D para mobs y jugadores, con banners, insignias de nivel e indicadores de estado de NPC.
- Banners y control del chat: un anuncio de una línea en la parte superior de la pantalla y una acción para silenciar el chat en un lugar.
- Disparadores por objeto: abre una vista al hacer clic derecho con un material.
- Integraciones: muestra datos de misiones, codex, pase de batalla, cosméticos, mascotas, funciones sociales, wiki y RPG Core cuando esas extensiones están presentes.
Instalación
- Instala CraftEngine: aloja el resource pack que contiene el shader, las fuentes y las imágenes. Instala PacketEvents si tu compilación no lo proporciona ya; se usa para suprimir el chat y para la rueda del ratón y las teclas de movimiento.
- Instala las extensiones Entity y Quest de TypeWriter y la extensión BTCMobs: son dependencias declaradas.
- Opcionalmente, instala las extensiones de las que UiCore puede leer: Ghost, Codex, BattlePass, TinyEssentials, Cosmetics, NumericalStorage, Permissions, Pets, Friend, Party y Guild. La extensión GUI también es opcional: cuando está presente, UiCore lee los estados de menú que publica.
- Coloca el JAR de UiCore en
plugins/Typewriter/extensions/y reinicia el servidor. - Despliega el fragmento de resource pack de UiCore en el pack de CraftEngine. El pack lo genera la propia herramienta de la extensión (
generate-gui-packy despuésvalidate-gui-pack) y debe desplegarse antes del JAR que le corresponde; de lo contrario, todos los iconos de objetos se desplazan una posición sin ningún error.
Un identificador de recurso de Minecraft solo admite [a-z0-9._-/]. Un proveedor de fuente con cualquier otro carácter lo rechaza el cliente en silencio, y el glifo aparece como un rectángulo negro en la parte superior de la pantalla. El generador del pack se niega a escribir una ruta así.
Primeros pasos
Abre un pequeño menú desde una brújula.
- En el panel web de TypeWriter, abre una página estática y añade una entrada UI View. Establece
viewIdenhello_menu. - Añade una capa (
layerIdmain) y un primer componente:placement.kindCELL,column4,row6,width7,height3,paletteSURFACE,hoverPaletteBLUE_LIGHT,textHello,tooltipClick me. - En
onLeftClick, enlaza una acción como un comando o un mensaje. Añade un segundo componente connavigateToo Close UI View para salir. - Añade una acción Open UI View con
viewIdhello_menu, o asocia un objeto: añade un UI Item Trigger conmaterialCOMPASSyviewIdhello_menu. - Publica. Haz clic derecho en una brújula: aparece la pantalla; apunta al botón con la cabeza y haz clic.
Cómo funciona
Una vista es una lista de capas (de atrás hacia delante); una capa contiene componentes; un componente indica dónde se sitúa, cómo se pinta, qué muestra y qué activa un clic. Tres límites proceden de la codificación, no del código:
- Un tinte es un índice. El color de una celda lleva su columna, su fila y el índice de paleta, por lo que los tintes proceden de una paleta con nombre fija (
SURFACE,BLUE_LIGHT,GOLD...), no de valores hexadecimales libres. - Las imágenes son baratas, las fuentes son escasas. Un componente se puede pintar con una imagen de panel; cualquier número de imágenes comparte una fuente. El tinte del texto procede de la fuente, y el pack incluye 16 tintes de texto, por lo que un 17.º vuelve al blanco.
- Nada se desliza y el texto no se desvanece. Una animación revela las celdas en un orden. El texto llega con su panel.
Las vistas abiertas se niegan a iniciarse mientras el jugador está cayendo (el jugador recibe un mensaje). Una cadena de renderizadores (rendererOrder de UI Configuration) decide qué renderizador sirve una vista: GUI (este shader), DIALOG, SPATIAL o CHEST.
Menús
Apertura
Una vista se puede abrir mediante:
- la acción Open UI View (
viewId); - el comando
/ui open <viewId>de una entrada UI View Commands; - un UI Item Trigger, que abre una vista cuando el jugador hace clic derecho con un material determinado (si dos vistas reclaman el mismo material se registra una advertencia y solo se abre la última);
- el
openMaterialdel minimapa, que abre el mapa del mundo.
Close UI View o /ui close la cierran.
Layout y componentes
La cuadrícula es de 15 columnas por 15 filas para los menús. placement.kind es CELL (una celda de la cuadrícula: column, row, width, height), MARKER (una posición de 0 a 1 a lo largo del viewport, x e y, limitada) o SCRIM (un velo a pantalla completa). Un botón necesita varias celdas para que sea fácil apuntarle.
| Campo del componente | Efecto |
|---|---|
palette, hoverPalette, disabledPalette | Tinte en reposo, bajo el cursor y mientras los criteria no se cumplen. |
background | Una imagen de panel del pack (nueve porciones) en lugar de un tinte plano; backgroundBinding elige la imagen a partir de un placeholder. |
text, textPalette, textAlign, textEffect | Texto dibujado a lo ancho del componente. |
icon, lineIcon | La imagen de un material dibujada delante del texto o cerrando la línea. |
image, imageBinding | Una imagen del pack ajustada dentro del componente conservando su relación de aspecto. |
label, tooltip | Texto que se muestra junto a la pantalla, o en el ancla del tooltip, mientras el cursor reposa sobre el componente. |
gauge | Dibuja una barra a partir de un placeholder que contiene de 0 a 100 (por ejemplo btcui_health_percent). |
binding | Un placeholder del que el componente toma su valor. |
criteria, onLeftClick, onRightClick | Condiciones para hacer clic y las entradas que se activan. |
navigateTo | Abre otra pantalla de la misma vista. |
input | Pide al jugador que escriba un valor; onInputCommands se ejecuta desde la consola con {input} y %player% sustituidos. |
Pantallas, listas y estados
- Nodos (
nodes,rootNodeId) declaran pestañas y subpantallas, cada una eligiendo qué capa rellena qué región con nombre. Los títulos alimentan la ruta de navegación. - Repeticiones (
repeatsen una capa) dibujan una ventana sobre fuentes numeradas: el elementonlee el binding<source>.<n>.stepModePAGEgira una ventana completa por gesto,ITEMavanza de uno en uno. - Estados (
states) cambian componentes mientras se cumple una condición: un tinte, un texto, un tooltip, un icono, un panel o la visibilidad. El estado de mayor prioridad cuyas condiciones se cumplen es el activo, un estado puede refinar unparentId, y un componente se direcciona por id o porcolumn:row. Los estados se reevalúan en cada repintado. - Llegada (
opening,openingMillis,openingFade):WIPE_DOWN,WIPE_UP,WIPE_RIGHT,WIPE_LEFT,BLOOMoFADE. Solo se reproduce al entrar en la interfaz, no entre dos pantallas.
Paleta
FRAME, SURFACE, SURFACE_LIGHT, MUTED, BLUE, BLUE_LIGHT, CYAN, TEAL, GREEN, GREEN_LIGHT, YELLOW, ORANGE, RED_DARK, RED, PURPLE, WHITE, BLACK, INK, SLATE, STEEL, STEEL_LIGHT, MIST, PAPER, FOREST, MINT, GOLD, AMBER, WINE, CORAL, VIOLET. NONE no dibuja nada.
Interacción
El cursor sigue la cabeza del jugador: el yaw y el pitch se proyectan sobre la cuadrícula y se ajustan a una celda. Los jugadores cambian su velocidad con /ui sensitivity <degrees>: un ángulo mayor significa un cursor más lento.
- El clic izquierdo y el derecho activan
onLeftClickyonRightClick; la rueda del ratón desplaza listas y pestañas; agacharse es un atajo que cierra la vista (salvo mientras una lista de árbol de investigación tiene el foco). - La vista cede ante el mundo: alejarse, un teletransporte, recibir daño o abrir un inventario la cierran.
- Mientras una vista está abierta, el chat de los demás jugadores se mantiene fuera de la pantalla, y los mensajes del servidor se vuelven a dibujar con el chat de la UI en lugar del chat vanilla.
Módulos de HUD
Las entradas UI HUD usan las mismas capas y componentes que una vista, ancladas a una corner (TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, CENTRE); los desfases se cuentan hacia dentro desde ella. priority decide cuál de dos grupos superpuestos se dibuja encima y visibility condiciona el grupo. Los módulos de HUD se suspenden automáticamente mientras una vista, un diálogo, una cinemática o el mapa del mundo ocupan la pantalla.
Diálogos
UI Spoken Dialogue muestra una línea con el nombre del hablante, un portrait opcional, una duration de escritura (cero la muestra de golpe) y un sound. UI Option Dialogue añade opciones (options): navigation es KEYS (rueda del ratón y tecla de confirmación), CURSOR o ambas (el valor por defecto); un timer cancela el diálogo y dispara cancelTriggers; cada opción tiene criteria (se dibuja bloqueada, u oculta con hideWhenLocked), un lockedReason que se muestra en lugar de su tooltip mientras está bloqueada, modifiers y triggers. Ambas admiten una entrada style; déjala vacía para usar la del propio servidor.
UI Dialogue Style define el aspecto en celdas de la cuadrícula: speech (marco, área de texto, banner del hablante, retrato), options (ventana, panel, tintes para las opciones seleccionadas y bloqueadas, cursor y flechas de desplazamiento, segunda columna opcional) y chrome (imagen de la tecla de confirmación, fila de cuenta atrás, filas de letterbox). UI Spoken Cinematic coloca líneas en una página de cinemática con segmentos startFrame y endFrame.
Mapas y placas de nombre
El minimapa permanente se configura con Minimap Settings (worlds y excludeListedWorlds, size, blocksPerCell, borderThickness, openMaterial, maxWaypoints, worldMapAreas) y sus puntos con Minimap Points of Interest. Su posición en la pantalla se define en el resource pack, no aquí, porque el servidor no conoce ni la resolución ni la escala de GUI. El mapa del mundo se abre haciendo clic derecho con openMaterial o con /worldmap; el juego normal lo rellena con lo que lee el minimapa, y el modo de exploración cartografía un radio mayor de forma deliberada.
Las placas de nombre son tridimensionales y por espectador. Global Nameplate dibuja líneas sobre los mobs (entityTypes, btcMobsOnly, lines, viewDistance, requireLineOfSight...). Player Nameplate Banner define fondos de banner seleccionables (un prefijo de imagen de CraftEngine con las porciones _left, _middle y _right), y la elección del jugador se almacena en un artefacto de selección. Nameplate Settings establece las distancias, los presupuestos y la unidad de salud; Level Badge Settings establece la palabra que se escribe antes de un nivel (prefijo por defecto, puede ser un placeholder de traducción). NPC Status Override coloca un modelo indicador (disponible, activo, interacción...) sobre un NPC.
Comandos
| Comando | Descripción |
|---|---|
/ui open <viewId> | Abre una vista. |
/ui close | Cierra la vista abierta. |
/ui sensitivity [degrees] | Muestra o establece el barrido de tu cursor en grados. |
/ui icons [materials] | Imprime iconos de objetos en el chat para comprobar la fuente de sprites. |
/ui chat vanilla | Solo operadores: te devuelve el chat vanilla hasta que te desconectes o lo vuelvas a ejecutar. |
/worldmap | Abre o cierra el mapa del mundo. |
/worldmap survey, forget, stats, minimap, waypoint <name>, waypoint clear, save, debug | Modo de exploración, olvidar tu mapa, mostrar su tamaño, alternar el minimapa, renombrar o borrar waypoints, guardar e imprimir un diagnóstico. |
/nameplates (alias /nameplate, /btcnameplates) | equip <id>, unequip, preview [id], list, toggle [on|off] y las formas de administración force-equip, force-unequip, force-preview, admin-toggle. |
Los nombres de /ui y /worldmap proceden de los campos commandName de sus entradas. Su campo permission es un nodo de permiso que eliges tú: vacío significa todos. /worldmap survey, forget, save y el interruptor de exploración usan surveyPermission.
Permisos
| Permiso | Concede |
|---|---|
permission de UI View Commands | Los subcomandos de /ui (vacío: todos). |
permission y surveyPermission de World Map Command | /worldmap, y exploración y olvido (vacío: todos). |
btcnameplates.command.equip, .unequip, .preview, .list, .toggle | Los subcomandos de /nameplates correspondientes para los jugadores. |
btcnameplates.command.admin.force_equip, .force_unequip, .force_preview, .toggle | Los subcomandos de administración de /nameplates. |
visibility.permission en componentes y grupos | Muestra u oculta un elemento a los jugadores que no tienen el nodo. |
Placeholders
Expansión de MiniPlaceholders btcui, para componentes, indicadores y texto.
| Placeholder | Devuelve |
|---|---|
<btcui_level_glyph:37> | Cualquier número escrito con los dígitos de nivel de colores del pack. |
<btcui_global_level_glyph>, <btcui_global_level>, <btcui_global_level_badge> | El nivel global como glifos, como dígitos o con el prefijo configurado. |
<btcui_global_percent>, <btcui_global_detail>, <btcui_xp_detail> | El progreso hacia el siguiente nivel global y sus números. |
<btcui_health>, <btcui_health_max>, <btcui_health_percent>, <btcui_absorption> | Salud y absorción. |
<btcui_food>, <btcui_food_max>, <btcui_food_percent>, <btcui_saturation> | Hambre. |
<btcui_air>, <btcui_air_max>, <btcui_air_percent>, <btcui_air_gauge> | Reserva de aire; el indicador está vacío mientras al jugador no le falta aire. |
<btcui_xp_level>, <btcui_xp_progress>, <btcui_xp_percent> | La barra de experiencia vanilla (usada para encantar). |
<btcui_riding>, <btcui_mount_name>, <btcui_mount_health>, <btcui_mount_health_max>, <btcui_mount_health_percent>, <btcui_mount_gauge> | La montura. |
<btcui_underwater>, <btcui_swimming>, <btcui_burning>, <btcui_freezing> | Estados del jugador. |
<btcui_x>, <btcui_y>, <btcui_z>, <btcui_world_time>, <btcui_world_day> | Posición y hora. |
<btcui_banner>, <btcui_actionbar>, <btcui_chat:...> | Banner actual, barra de acción y líneas de chat dibujadas por la UI. |
Entradas
26 entradas, generadas a partir del código fuente de la extensión.
Acciones5
- Close UI ViewClose UI View
- Mute UI ChatMute UI Chat
- Open UI ViewOpen UI View
- UI BannerUI Banner
- Unmute UI ChatUnmute UI Chat
Audiencias2
- NPC Status OverrideNPC Status Override
- UI Look AudienceLooking At A Position
Cinemáticas1
- UI Spoken CinematicUI Spoken Cinematic
Datos de entidad1
- BTC Nameplate DataConfigure native text lines and an optional 3D attachment
Comandos2
- UI View CommandUI View Commands
- World Map CommandWorld Map Command
Artefactos1
- BTC Player Nameplate Selection ArtifactStores each player's selected nameplate banner
Manifiestos12
- BTC Global NameplateGlobal mob nameplate
- BTC Player Nameplate BannerPlayer nameplate banner
- Minimap PoiMinimap Points of Interest
- Minimap SettingsMinimap Settings
- UI ConfigurationUI Configuration
- UI Dialogue StyleUI Dialogue Style
- UI HUDUI HUD
- UI Item TriggerUI Item Trigger
- UI Level Badge SettingsPrefix written before every level badge
- UI Nameplate SettingsShared nameplate visibility and health units
- UI Token ShopToken Shop Catalogue
- UI ViewUI View
Resolución de problemas
Rectángulos negros o cuadrados vacíos (tofu) donde deberían estar el texto y las celdas. Falta el fragmento de resource pack, está desactualizado o se desplegó después del JAR, o una ruta de fuente contiene un carácter fuera de [a-z0-9._-/]. Vuelve a desplegar primero el pack y después el JAR que le corresponde, y comprueba que CraftEngine lo ha recargado.
Los iconos de objetos muestran un objeto equivocado. El pack y el JAR no coinciden: el carácter de un icono es su posición en la tabla, por lo que un pack generado después del JAR desplaza todos los iconos. Regenera y valida el pack y vuelve a desplegar ambos.
Un objeto abre un menú vacío. Dos asociaciones UI Item Trigger reclaman el mismo material; el registro dice est reclame par ... con el número de componentes de cada una. Elimina la asociación sobrante.
names view '<id>', which no page defines. El viewId dado a la acción, al comando o al objeto no coincide con ninguna UI View publicada. Una vista que está declared but incomplete no tiene ninguna capa ni componente que se pueda resolver.
El menú no se abre en el aire. UiCore se niega a abrir una pantalla mientras el jugador está cayendo. Inténtalo de nuevo en el suelo.
El chat ha desaparecido. UiCore dibuja el chat por sí mismo: hay una vista abierta, un Mute UI Chat está activo o el jugador lo desactivó. Usa Unmute UI Chat al salir del lugar donde lo silenciaste; los operadores pueden usar /ui chat vanilla para comprobar el chat vanilla.
Los gestos dejan de funcionar. Gesture decoding unavailable en el registro significa que PacketEvents no pudo arrancar: se pierden la rueda del ratón y las teclas de movimiento, pero los clics siguen funcionando.
Extensiones relacionadas
- TinyEssentials: datos de wiki, de casa y de tab que muestran las vistas.
- RPG Core: los paneles de progresión, armario y almacenamiento usan UiCore.
- Codex, BattlePass, Cosmetics, Pets: pantallas de datos.
- Party, Friend, Guild: paneles sociales.
- GUI: menús de cofre; UiCore comparte los estados de menú que publica.