← Volver a ChangelogsBack to Changelogs

X4UI HistorialHistory

Registro completo de actualizaciones de este proyecto.Complete update log for this project.

X4UI Framework r1.0b4

9/2/2026

X4UI r1.0b4

Arquitectura y Seguridad (Client/Server)

  • Separación Estricta Cliente/Servidor: Reestructuración de la jerarquía de paquetes. Interfaces en api.client.*, implementaciones en impl.client.*. Previene ClassNotFoundException en Servidores Dedicados.
  • State<T>: Reubicado en com.x4yi.x4ui.common para uso seguro en servidores. Employa CopyOnWriteArrayList y deduplicación de valores por Objects.equals().
  • NetworkSyncHelper: Permite vincular propiedades de Container (vía IContainerListener) a objetos State<Integer>, State<Boolean> y State<Float> con escala configurable.

Assets y Multimedia

  • RemoteResourceManager: Sistema de descarga asíncrona de recursos multimedia (imágenes, audio, vídeo) desde URLs HTTP/HTTPS. Caché local aislada por Mod ID con hash SHA-256.
  • DownloadManager: Singleton con executor de 2 hilos. Transferencias NIO zero-copy en subprocesos de fondo sin penalizar rendimiento.
  • Motor de Audio (OpenAL): OpenALAudioSink para reproducción de audio con 8 buffers streaming y tracking de tiempo de reproducción por muestra. Integrado al ciclo de vida de la GUI.
  • GuiVideo - Decoder Dual: FFmpegProcessDecoder (nativo) como decodificador primario. JCodecVideoDecoder (pure-Java) como respaldo automático para Android (PojavLauncher) y sistemas sin ejecución de procesos.
  • GuiImage/GuiVideo: Soporte para canal alfa (setAlpha()) y tintes de color (setColor(r, g, b)).

Interfaz y Componentes

  • Rediseño de la API Pública: Métodos renombrados para desvinculación de Mojang: update() → tick(float), drawSelf() → renderSelf(int, int, float), mouseClicked → onMouseClick.
  • Sistema de Layout Optimizado: Flags requestLayout() y requestRender() para evitar recálculos costosos al mutar propiedades puramente visuales.
  • Insets: Clase inmutable para padding/margin con soporte asimétrico: new Insets(top, right, bottom, left).
  • ITheme / DefaultTheme: Sistema de temas inyectable por componente. Estilos no son globales. DefaultTheme提供 tema oscuro con colores Material Design.
  • GuiBuilder<T>: API fluent para construcción declarativa de componentes con chainable setters.
  • Tooltips Nativos: Sistema de tooltips reescrito utilizando GuiPanel directamente. Resolución por cadena de padres. Soporte para texto y componentes personalizados.
  • GuiDropdown<T>: Selector genérico con popup, enlace reactivo a State<T>, y renderizado fuera de scissor.
  • GuiVirtualList<T>: Lista virtualizada que solo instancía componentes visibles en el viewport. Ventana/reciclaje automático al hacer scroll.

Layout y Eventos

  • FlexLayout: Motor de layout tipo CSS Flexbox. Direcciones VERTICAL, HORIZONTAL, ABSOLUTE. Soporte para gap, flexWrap, padding y margin.
  • Propagación de Eventos: Iteración en orden inverso de render (componente de mayor capa primero). Retorno true detiene la propagación.
  • Gestión de Foco: Modelo de foco único almacenado en el componente raíz. requestFocus(), clearFocus(), isFocused().
  • Sistema de Capas: Componente layer entero para orden Z. Los hijos se renderizan en orden ascendente de capa.

Multimedia y Decodificación

  • FFmpegProcessDecoder: Subproceso FFmpeg con pipes NIO. Probes de metadatos vía ffmpeg -i. DecoderThread con RingBuffer para frames BGRA.
  • JCodecVideoDecoder: Decodificador pure-Java usando H264Decoder de JCodec. Demuxing MP4, decodificación de NALs H.264, conversión YUV420 a ARGB.
  • MediaPlayer: Orquestador de reproducción con reloj maestro de audio y fallback a reloj del sistema.

Estado de Desarrollo

  • GuiModelRender, GuiVideo, Sincronización Servidor-Cliente: Estos componentes se encuentran en una fase muy temprana de desarrollo. Su API es inestable y puede cambiar sin previo aviso en futuras versiones.

Architecture & Security (Client/Server)

  • Strict Client/Server Separation: Refactored package hierarchy. Interfaces in api.client.*, implementations in impl.client.*. Prevents ClassNotFoundException on Dedicated Servers.
  • State<T>: Relocated to com.x4yi.x4ui.common for safe server-side usage. Uses CopyOnWriteArrayList and value deduplication via Objects.equals().
  • NetworkSyncHelper: Binds Container properties (via IContainerListener) to State<Integer>, State<Boolean>, and State<Float> objects with configurable scale.

Assets & Multimedia

  • RemoteResourceManager: Asynchronous media downloading from HTTP/HTTPS URLs. Local cache isolated by Mod ID with SHA-256 hashing.
  • DownloadManager: Singleton with 2-thread executor pool. NIO zero-copy transfers on background threads without impacting game performance.
  • Audio Engine (OpenAL): OpenALAudioSink for audio playback with 8-buffer streaming and per-sample playback time tracking. Integrated with GUI lifecycle.
  • GuiVideo - Dual Decoder: FFmpegProcessDecoder (native) as primary decoder. JCodecVideoDecoder (pure-Java) as automatic fallback for Android (PojavLauncher) and systems without process execution.
  • GuiImage/GuiVideo: Alpha channel support (setAlpha()) and color tinting (setColor(r, g, b)).

Interface & Components

  • Public API Redesign: Renamed methods for Mojang decoupling: update() → tick(float), drawSelf() → renderSelf(int, int, float), mouseClicked → onMouseClick.
  • Optimized Layout System: requestLayout() and requestRender() flags to avoid expensive recalculations when mutating purely visual properties.
  • Insets: Immutable class for padding/margin with asymmetric support: new Insets(top, right, bottom, left).
  • ITheme / DefaultTheme: Injectable theming system per component. Styles are no longer global. DefaultTheme provides a dark theme with Material Design colors.
  • GuiBuilder<T>: Fluent API for declarative component construction with chainable setters.
  • Native Tooltips: Tooltip system rewritten using GuiPanel directly. Resolution via parent chain. Support for text and custom component tooltips.
  • GuiDropdown<T>: Generic selector with popup, reactive binding to State<T>, and rendering outside scissor bounds.
  • GuiVirtualList<T>: Virtualized list that only instantiates components visible in the viewport. Windowing/recycling during scroll.

Layout & Events

  • FlexLayout: CSS Flexbox-like layout engine. VERTICAL, HORIZONTAL, ABSOLUTE directions. Supports gap, flexWrap, padding, and margin.
  • Event Propagation: Reverse render order iteration (highest-layer component first). Returning true stops propagation.
  • Focus Management: Single-focus model stored on root component. requestFocus(), clearFocus(), isFocused().
  • Layer System: Integer layer property for Z-ordering. Children render in ascending layer order.

Multimedia & Decoding

  • FFmpegProcessDecoder: FFmpeg subprocess with NIO pipes. Metadata probing via ffmpeg -i. Background DecoderThread with RingBuffer for BGRA frames.
  • JCodecVideoDecoder: Pure-Java decoder using JCodec’s H264Decoder. MP4 demuxing, H.264 NAL decoding, YUV420 to ARGB conversion.
  • MediaPlayer: Playback orchestrator with audio master clock and system clock fallback.

Development Status

  • GuiModelRender, GuiVideo, Server-Client Sync: These components are in a very early stage of development. Their API is unstable and may change without notice in future versions.

X4UI Framework r1.0b3a

8/28/2026

X4UI r1.0b3a

Bug Fixes

  • Sliders: Corregido un bug donde hacer click en el campo de texto de un slider antes del primer frame renderizado no permitía editar el valor. Adicionalmente se ha solucionado el problema de pérdida de foco y escritura cuando existen múltiples sliders en pantalla (ahora sólo puede haber un campo de texto activo globalmente).
  • Scroll Panels (Estructural): Se arregló un bug severo en GuiScrollPanel donde los eventos de teclado (keyTyped) y el arrastre prolongado del ratón (mouseClickMove y mouseReleased) nunca se propagaban a los hijos del panel interno debido a una lista de renderizado vacía. Esto soluciona por completo la imposibilidad de usar el teclado en los campos de texto o arrastrar correctamente los sliders fuera de los márgenes del scroll.

Bug Fixes

  • Sliders: Fixed a bug where clicking a slider’s text field before the first rendered frame prevented value editing. Additionally, resolved an issue where multiple slider text fields could be focused simultaneously, causing typing input to be redirected to off-screen sliders. Focus is now managed globally.
  • Scroll Panels (Structural): Fixed a severe bug in GuiScrollPanel where keyboard events (keyTyped) and prolonged mouse dragging (mouseClickMove and mouseReleased) were never propagated to the internal panel’s children due to an empty render list. This completely resolves the inability to use the keyboard in text fields or drag sliders correctly outside the scroll margins.

X4UI Framework r1.0b3

8/26/2026

X4UI r1.0b3

Resumen de Cambios

Actualización de la arquitectura interna de renderizado y eventos, introduciendo soporte nativo de Z-Index, interpolaciones basadas en DeltaTime, y gestión segura de recortes OpenGL anidados, además de una gran cantidad de nuevos componentes interactivos.

Arquitectura y Núcleo

  • Soporte Z-Index: Implementada la propiedad layer para componentes, proporcionando un ordenamiento determinista para el renderizado y la propagación de eventos (bubbling).
  • Animaciones DeltaTime: Integrada lógica de DeltaTime en todo el framework para lograr animaciones e interpolaciones independientes de los FPS.
  • Seguridad de Memoria: Implementado FontWidthCache con política de limpieza LRU para mitigar fugas de memoria durante el análisis de textos complejos (ej. Markdown).
  • Recorte OpenGL Anidado: Implementado ScissorHelper para gestionar de manera robusta el uso de GL_SCISSOR_TEST en componentes anidados.
  • Construcción Fluida: Añadida la clase de utilidad GuiBuilder que proporciona una API fluida (Fluent API) para facilitar la construcción de interfaces.
  • Reactividad: Integrado un sistema de gestión de estado reactivo (State).

Componentes y Funcionalidades

  • Arrastrar y Soltar (Drag & Drop): Añadida capacidad de arrastre nativa a GuiComponent con límites configurables (DragConstraint.NONE, DragConstraint.PARENT_BOUNDS).
  • Tooltips Integrados: Añadido soporte nativo de renderizado de Tooltips en GuiBaseScreen y GuiBaseContainer mediante setTooltip().
  • Diseños FlexWrap: Añadida la funcionalidad flexWrap a GuiPanel para el ajuste automático y multilínea de elementos en diseños horizontales y verticales.
  • Nuevos Componentes:
    • GuiDropdown para menús desplegables.
    • GuiImage y GuiSprite para la renderización flexible de texturas.
    • GuiTextInput para campos de entrada de texto avanzados.
    • GuiSlot para gestionar inventarios y stacks de ítems dentro del DOM.
    • GuiSlider y sus variantes (GuiSliderDouble, GuiSliderFloat, GuiSliderInt).
    • GuiModelRender para soporte de renderizado de entidades 3D e ítems.
    • GuiVideo para reproducción de vídeo in-game.

Mejoras y Correcciones

  • Refactorización de GuiScrollPanel:
    • Migración a ScissorHelper para la resolución adecuada de recortes anidados.
    • Implementado descarte de componentes (culling) para omitir la renderización y procesamiento de eventos de elementos fuera del área visible.
    • Resueltos los problemas de jerarquía de propagación de eventos, permitiendo que los paneles de scroll anidados funcionen correctamente y de manera independiente.
  • Solucionada la fuga de memoria en GuiBaseContainer causada por la adición duplicada de áreas en jeiRecipeAreas al redimensionar la ventana.
  • Refactorizado GuiMarkdown para utilizar FontWidthCache, mejorando notablemente el rendimiento.
  • Estandarizadas las animaciones en GuiButton, GuiToggle y GuiScrollPanel para escalar con DeltaTime en lugar de ticks en crudo.
  • Expuestos los métodos getGuiLeft() y getGuiTop() en GuiBaseContainer.
  • Reestructurada y completada la documentación técnica en el directorio Docs/ (Disponible en inglés y español).

Changelog Summary

Core rendering and event architecture update, introducing native Z-Index support, DeltaTime-based interpolations, and safe management of nested OpenGL clipping, along with a massive batch of new interactive components.

Architecture & Core

  • Z-Index Support: Implemented the layer property for components, providing deterministic sorting for rendering and event bubbling priorities.
  • DeltaTime Animations: Integrated DeltaTime logic throughout the framework for FPS-independent animations and transitions.
  • Memory Safety: Implemented FontWidthCache incorporating an LRU eviction policy to mitigate memory leaks during intensive text parsing tasks (e.g. Markdown rendering).
  • Nested OpenGL Clipping: Implemented ScissorHelper to robustly manage nested GL_SCISSOR_TEST applications.
  • Fluent Construction: Added GuiBuilder utility class providing a fluent API to streamline interface construction.
  • Reactivity: Integrated a reactive State management system.

Components & Features

  • Drag & Drop: Added native drag-and-drop capability to GuiComponent with flexible boundaries (DragConstraint.NONE, DragConstraint.PARENT_BOUNDS).
  • Native Tooltips: Added internal Tooltip rendering support to GuiBaseScreen and GuiBaseContainer via setTooltip().
  • FlexWrap Layouts: Added flexWrap functionality to GuiPanel for automatic multi-line wrapping of elements in horizontal and vertical configurations.
  • New Components:
    • GuiDropdown for standard dropdown menu structures.
    • GuiImage and GuiSprite components for flexible texture and sprite rendering.
    • GuiTextInput for advanced text input fields.
    • GuiSlot component to integrate and manage item stacks and inventories within the DOM.
    • GuiSlider architecture with specific implementations (GuiSliderDouble, GuiSliderFloat, GuiSliderInt).
    • GuiModelRender to support 3D entity and item rendering directly inside the user interface.
    • GuiVideo for in-game video playback support.

Fixes & Improvements

  • GuiScrollPanel Refactor:
    • Migrated from raw GL calls to ScissorHelper for proper nested clipping resolution.
    • Implemented strict component culling to skip rendering and event processing for elements outside the visible viewport.
    • Resolved event bubbling hierarchy issues, enabling nested scroll panels to function correctly independently of parent containers.
  • Resolved memory leak in GuiBaseContainer caused by duplicate instances appending to jeiRecipeAreas upon window resize.
  • Refactored GuiMarkdown to utilize FontWidthCache for significantly improved parsing and rendering performance.
  • Standardized animations in GuiButton, GuiToggle, and GuiScrollPanel to scale consistently with DeltaTime instead of raw ticks.
  • Exposed getGuiLeft() and getGuiTop() within GuiBaseContainer for external utility consumption.
  • Restructured and populated the Docs/ directory with comprehensive technical documentation in English (en-us) and Spanish (es-latam).

X4UI Framework r1.0b2

8/22/2026

X4UI r1.0b2

Cambios

  • Añadidos métodos getHeight() y getWidth() en GuiComponent para permitir acceso externo a sus atributos de dimensión que estaban protegidos, facilitando la interpolación y creación de animaciones personalizadas desde implementaciones externas.

X4UI Framework r1.0b1

8/16/2026

X4UI r1.0b1

Resumen de Cambios

El primer lanzamiento público del framework X4UI, extraído de Hammers Unbound para proveer una base robusta y moderna para el diseño de interfaces en Minecraft 1.12.2.

Características

  • Arquitectura DOM de Componentes: Introducido un árbol de componentes totalmente orientado a objetos (GuiComponent) con relaciones padre-hijo, imitando la estructura DOM web.
  • Layouts FlexBox: Añadido GuiPanel con FlexDirection (Absolute, Vertical, Horizontal) para posicionamiento y espaciado automático de componentes.
  • Paneles de Scroll y Recorte: Implementado GuiScrollPanel con soporte nativo de OpenGL GL_SCISSOR_TEST para enmascarar de forma segura la renderización fuera de los límites.
  • Analizador Nativo de Markdown: Añadido GuiMarkdown, un componente especializado que lee cadenas de markdown puro y las renderiza en nodos de UI interactivos (Soporta encabezados, negrita, cursiva, enlaces, citas, viñetas e imágenes web/locales).
  • Elementos Interactivos: Incluidas implementaciones listas para usar de GuiButton, GuiToggle, GuiSlider y GuiLabel.
  • Propagación de Eventos: Sistema avanzado para clics, pulsaciones de teclas y desplazamientos de ratón. Los eventos respetan el índice Z, asegurando que los componentes superpuestos se comporten de forma natural.

Rendimiento y Optimizaciones

  • Renderizado por Bandera (Dirty Flag): Implementado un gestor robusto de estado needsLayout. El motor UI ahora solo recalcula posiciones y tamaños cuando es matemáticamente necesario, reduciendo drásticamente la sobrecarga de CPU en pantallas complejas.
  • Análisis Regex Estático: GuiMarkdown compila sus expresiones de análisis de texto estáticamente al cargar, reduciendo fuertemente los picos de RAM y CPU al abrir manuales o guías.
  • Correcciones de Memoria en Scroll: Eliminados los tirones del recolector de basura al calcular el factor de escala ScaledResolution una sola vez por redimensionamiento de ventana, en lugar de cientos de veces por segundo.

Corrección de Errores

  • Solucionado un problema donde el desplazamiento de la rueda del ratón no respetaba las coordenadas reales en pantalla del puntero, permitiendo ahora un desplazamiento preciso a través de múltiples paneles activos.

Changelog Summary

The first public release of the X4UI Framework, extracted from Hammers Unbound to provide a robust foundation for modern Minecraft 1.12.2 interfaces.

Features

  • Component DOM Architecture: Introduced a fully object-oriented component tree (GuiComponent) with parent-child relationships, mimicking web DOM structures.
  • FlexBox Layouts: Added GuiPanel with FlexDirection (Absolute, Vertical, Horizontal) for automatic component positioning and spacing.
  • Scroll Panels & Clipping: Implemented GuiScrollPanel with native OpenGL GL_SCISSOR_TEST support to safely mask out-of-bounds rendering.
  • Native Markdown Parser: Added GuiMarkdown, a specialized component that reads raw markdown strings and renders them into interactive UI nodes (Supports headings, bold, italics, links, blockquotes, bullets, and web/local images).
  • Interactive Elements: Included ready-to-use implementations of GuiButton, GuiToggle, GuiSlider, and GuiLabel.
  • Event Bubbling: Advanced event propagation for clicks, keystrokes, and mouse scrolls. Events bubble down the Z-index correctly, ensuring overlapping components behave naturally.

Performance & Optimizations

  • Dirty Flag Rendering: Implemented a robust needsLayout state manager. The UI engine will now only recalculate positions and sizes when mathematically necessary, drastically reducing CPU overhead on complex screens (like manuals or heavily populated lists).
  • Static Regex Parsing: GuiMarkdown compiles its text-parsing expressions statically on load, heavily reducing RAM and CPU spikes when opening books or guides.
  • Scroll Memory Fixes: Eliminated garbage collector stuttering by calculating the ScaledResolution scaling factor once per window resize, rather than hundreds of times per second during frame renders.

Bug Fixes

  • Fixed an issue where the mouse wheel scroll event did not respect the pointer’s actual screen coordinates, allowing targeted scrolling across multiple active panels.
Buscar en XHubSearch XHub