VoxelUIСкачатьСкачатьСкачать
ВЕРСИИ (3)
alpha
VoxelUI 0.3.0
0.3.030 апр. 2026 г.145Minecraft: 1.21.1neoforge
Что нового
# Changelog
## [0.3.0] - Unreleased
### Added
- `maxHeight` / `max-height` support across XML mapping and `UINode`, including fluent API accessors and layout/runtime height clamping for screen roots and children
- offline SDF text pipeline based on `msdf-atlas-gen` assets with `roboto_mono_sdf.png/json`
- `SdfFontAtlas` resource loading and `SdfUiTextRenderer` as the primary UI text path, with compatibility fallback kept as safety
- frame-level text command batching with `UiTextCommand`, `UiTextRenderService`, and runtime text flush integration
- clip-aware text rendering so batched text respects `ScrollPanel`, `ListView`, and other viewport constraints
- phase showcases dedicated to migration progress, including phase 4 coverage for `ItemSlot`
- explicit dropdown sub-part styling hooks for header, menu, option, and hover-related visual states
- partial-corner support in the shape shader path, enabling menu/tab indicators to follow parent rounding more closely
- refactored `ItemSlot` as a standalone interactive slot widget with states such as `selected`, `disabled`, `highlighted`, `empty`, optional badges, empty labels, and tooltip overlay handling
- reusable UI shader rendering subsystem with `UiRenderService`, `UiShaderPipeline`, `UiShaderManager`, render commands, layers, and CPU fallback renderers
- shader resources for procedural UI shapes and masked textures under `assets/voxelui/shaders/core`
- `Hero` component with hexagonal rendering, masked image slot, accent line, XML support, and showcase examples
- shared shader-based rendering path for `Badge`
- unit coverage for `Hero` and the shader pipeline fallback/service flow
- generic render style hooks on `UINode` for shape, border, fill, accent, mask shape, corner style, and shader variant resolution
- lightweight writable XML bindings through `UiWritableBinding`, including bidirectional `selected-index` synchronization for components such as `Dropdown`, `Tabs`, and `InventoryGrid`
- framework-wide reactive state primitives through `UiObservableValue<T>`, `UiWritableValue<T>`, and `UiState`
- node-level invalidation APIs on `UINode` with `invalidateRender()`, `invalidateLayout()`, and `invalidateMeasure()`
- XML-exposed `dialog` support, including reactive `visible="{{...}}"` integration with the existing modal layer
- protected `notify(...)` helpers on `XmlUIScreen` for toast-like overlay notifications from XML screen actions
- `<if condition="...">` structural XML tag for conditional rendering; wraps its children in a transparent panel whose visibility reacts to the bound condition without rebuilding the layout tree
- optional `<else>` child inside `<if>` for a two-branch conditional; the two branches are toggled reactively when the condition changes
- `findById(String id)` and `findById(String id, Class<T> type)` methods on `XmlUIScreen`, backed by a recursive tree search on `UINode`; removes the need for manual tree traversal in `afterBuildUi(...)`
- `id` attribute set on `UINode` during XML mapping so any node declared with `id="foo"` in XML is immediately findable via `findById`
- host-agnostic `UiRuntime` / `UiHost` runtime layer shared between `UIScreen` and global overlays
- global overlay system with `GlobalUiOverlayManager`, `GlobalUiOverlayOptions`, and `VoxelUiOverlays`
- public APIs for global `showToast(...)`, `showOverlay(...)`, `showModal(...)`, `close(...)`, and `closeAll()`
- demo XML resources for a global overlay and a global modal under `assets/voxelui/ui`
- client dev commands `/voxelui toast`, `/voxelui overlay`, `/voxelui modal`, `/voxelui closeall`, and `/voxelui reload`
- `UiOverlayContext` and `UiXmlDialogController` abstractions to keep modals and notifications on one coherent system
- public extension point for third-party mods to register custom XML components via `ComponentMapper`, `MappingContext`, and `ComponentMapperRegistry`
- `BoxDecoration` and `VisualEffects` in `com.alexandregrz.voxelui.client.ui.core`
- `UINode.decoration()`, `UINode.effects()`, `UINode.hasDecoration()`, and `UINode.hasEffects()` for lazy decoration/effect diagnostics
- expanded `/docs` coverage for XML custom components, mapper-supported MCSS propagation, and shared render/effect attributes
### Changed
- the default custom text path is now SDF-backed rather than bitmap- or software-generated
- `UiXmlMapper` has been internally refactored from a monolithic switch-based class into registry-backed per-tag `ComponentMapper` implementations while preserving the public entry points
- major layout and control surfaces now render through the shader pipeline instead of `GuiGraphics.fill()`, including `Divider`, `Grid`, `Stack`, `ScrollPanel`, `Checkbox`, `Dropdown`, `Slider`, `Tabs`, `KeybindDisplay`, `Chart`, `ListView`, and `InventoryGrid`
- `ScrollPanel` scrolling was retuned for smoother inertial motion and frame-aligned visual layout, reducing the earlier choppy feel during wheel scrolling
- dropdown menu hover rendering now supports parent-aware clipping and sub-part styling instead of relying on hardcoded fallback geometry
- tab selection indicators now follow the selected tab silhouette rather than drawing as detached rectangular bars
- `ItemSlot` tooltips now render in the runtime overlay pass, ensuring vanilla item tooltips stay above neighboring UI cards and overlays
- VoxelUI now compensates for Minecraft `gui scale` at the screen level so custom UI stays readable without being truncated when the player increases the game GUI scale
- `UIScreen` now renders the UI in a virtual layout space with consistent mouse coordinate remapping, overlay layering, and centered root layout resolution
- many base components now scale more consistently with the UI system, including `Button`, `Checkbox`, `Dialog`, `Divider`, `Dropdown`, `Grid`, `Label`, `NumberInput`, `Panel`, `ProgressBar`, `ScrollPanel`, `TextInput`, and notifications
- buttons now support dynamic sizing, percentage widths, size presets, and XML-driven width values such as `15%`
- the XML mapper now accepts more reusable UI attributes, including button sizing fields and generic render/shader-related style properties
- XML screen action registration now accepts typed handlers, allowing XML events to resolve either `Runnable` callbacks or `Consumer<T>` listeners depending on the component event payload
- `UIScreen.ensureLayoutCurrent()` now reacts to dirty nodes in the existing tree instead of relying only on screen-wide layout dirtiness
- XML bindings can now subscribe directly to observable values and invalidate the mapped component without rebuilding the whole screen
- `UiWritableBinding` is now aligned with the new observable state API instead of being a standalone binding model
- value-driven updates on `Label`, `TextInput`, `NumberInput`, `Checkbox`, `Slider`, `Dropdown`, `Tabs`, `ProgressBar`, and `InventoryGrid` now use local invalidation rather than full layout reloads
- dialogs declared in XML are now mounted outside the normal layout flow and synchronized automatically with `UIScreen.showModal(...)`
- `Dialog` now supports XML-driven custom content without forcing the built-in confirm/cancel button row
- the showcase screen and MCSS demo content were expanded to cover dynamic button sizing and hero visual variants
- the hero rendering geometry was consolidated so the shader, content layout, image placement, and accent line all use the same computed bounds
- `UINode` now stores its declared `id` and exposes `setId`, `getId`, and `findById` for programmatic node lookup
- `UINode` internal decoration storage has been refactored: shape, fill, border, accent, and visual effect data now live in lazily allocated `BoxDecoration` and `VisualEffects` instances while preserving the existing fluent setters and getters
- `UIScreen` now delegates layout, render, notifications, modal management, and input dispatch to the shared `UiRuntime`
- `XmlUIScreen` now reuses the shared runtime and synchronizes XML `<dialog>` nodes through `UiXmlDialogController`
- `Modal` and `Notification` now target a shared overlay context instead of depending directly on `UIScreen`
- `Hero` now renders without the former decorative top accent line so hex surfaces stay visually clean in showcase and production layouts
- developer-facing Javadocs and inline comments in the touched XML/UI core areas have been standardized to English
### Fixed
- catastrophic FPS loss from the earlier per-string software SDF prototype by replacing it with batched GPU text rendering
- multiple SDF integration issues around atlas polarity, UV convention, sampler declaration, and top-origin atlas coordinates
- missing clipping for batched text inside scrolling containers
- `Dropdown` hover/selection layering issues where internal highlights broke the perceived parent radius
- `Tabs` active indicator mismatch against rounded tab shells
- `ItemSlot` tooltip z-order so vanilla Minecraft tooltips no longer appear under adjacent cards
- UI clipping and inconsistent perceived sizing across higher Minecraft `gui scale` values
- root layout centering drift that made some screens appear to shift horizontally as the GUI scale changed
- missing and limited XML change-event support on interactive inputs; `Dropdown`, `TextInput`, `NumberInput`, `Checkbox`, and `Slider` can now propagate typed values directly from XML-declared handlers
- the previous limitation where common Java state changes required `reloadLayout()` even for simple value updates; observable bindings can now trigger targeted relayouts on existing nodes
- the previous XML gap where confirmation dialogs required `afterBuildUi(...)` and manual Java wiring even for simple modal flows
- XML validation gaps for newer component attributes such as button `size`, `height`, and percentage width fields
- several hero rendering issues around hexagon proportions, content overlap, internal insets, and top/bottom truncation
- shader/log noise caused by uniforms declared or pushed inconsistently between the pipeline and shader JSON definitions
- ghost white borders caused by component default styles using `unset` values that were incorrectly resolved as opaque white in shader-rendered surfaces
- `ProgressBar` fill rendering so generic fill and gradient styles apply only to the active fill band instead of leaking onto the full-width track
- shader border masking on shared shape rendering, which previously produced overly strong contour artifacts and exaggerated hex borders
- default `Hero` border thickness after the generic fill migration, bringing hex outlines back to a thinner visual weight
## [0.1.0] - Initial public beta
First public beta release of the VoxelUI framework.
This release is intended to expose the framework to real usage, collect bug reports, and stabilize the API before a future stable release.
### Added
- core UI engine with the `measure() -> layout() -> render()` pipeline
- foundational components: `Panel`, `Label`, `Button`, `ProgressBar`, `Spacer`, `Divider`
- advanced layout components: `Grid`, `Stack`, `Tabs`, `ScrollPanel`, `ListView`
- input components: `TextInput`, `Checkbox`, `Slider`, `Dropdown`
- Minecraft-oriented components: `ItemStackView`, `InventoryGrid`, `ItemSlot`
- centralized theming through `Theme`
- XML UI support via `UiXmlParser`, `UiXmlMapper`, and `UiXmlResourceLoader`
- runtime bindings for XML-driven screens
- inline and external MCSS stylesheet support
- computed style tracking and style inspection
- UI inspector and development-only debug tooling
- hot reload for XML and MCSS in development mode
- safe XML / MCSS error fallback panels
- basic UI animations such as hover transitions, smooth scroll, and screen entrance
- unit tests and early integration coverage
### Notes
- this is a **beta** release, not a stable API freeze
- bugs, rough edges, and breaking changes between beta versions are still expected
- development-only showcase and debug tooling are disabled by default in release builds
- some parts of the public API are still explicitly marked `BETA` or `EXPERIMENTAL`
alpha
VoxelUI 0.1.5
0.1.521 апр. 2026 г.29Minecraft: 1.21.1neoforge
Что нового
# Changelog
## [0.1.5]
### Added
- reusable UI shader rendering subsystem with `UiRenderService`, `UiShaderPipeline`, `UiShaderManager`, render commands, layers, and CPU fallback renderers
- shader resources for procedural UI shapes and masked textures under `assets/voxelui/shaders/core`
- `Hero` component with hexagonal rendering, masked image slot, accent line, XML support, and showcase examples
- shared shader-based rendering path for `Badge`
- unit coverage for `Hero` and the shader pipeline fallback/service flow
- generic render style hooks on `UINode` for shape, border, fill, accent, mask shape, corner style, and shader variant resolution
- lightweight writable XML bindings through `UiWritableBinding`, including bidirectional `selected-index` synchronization for components such as `Dropdown`, `Tabs`, and `InventoryGrid`
- framework-wide reactive state primitives through `UiObservableValue<T>`, `UiWritableValue<T>`, and `UiState`
- node-level invalidation APIs on `UINode` with `invalidateRender()`, `invalidateLayout()`, and `invalidateMeasure()`
- XML-exposed `dialog` support, including reactive `visible="{{...}}"` integration with the existing modal layer
- protected `notify(...)` helpers on `XmlUIScreen` for toast-like overlay notifications from XML screen actions
- `<if condition="...">` structural XML tag for conditional rendering; wraps its children in a transparent panel whose visibility reacts to the bound condition without rebuilding the layout tree
- optional `<else>` child inside `<if>` for a two-branch conditional; the two branches are toggled reactively when the condition changes
- `findById(String id)` and `findById(String id, Class<T> type)` methods on `XmlUIScreen`, backed by a recursive tree search on `UINode`; removes the need for manual tree traversal in `afterBuildUi(...)`
- `id` attribute set on `UINode` during XML mapping so any node declared with `id="foo"` in XML is immediately findable via `findById`
- host-agnostic `UiRuntime` / `UiHost` runtime layer shared between `UIScreen` and global overlays
- global overlay system with `GlobalUiOverlayManager`, `GlobalUiOverlayOptions`, and `VoxelUiOverlays`
- public APIs for global `showToast(...)`, `showOverlay(...)`, `showModal(...)`, `close(...)`, and `closeAll()`
- demo XML resources for a global overlay and a global modal under `assets/voxelui/ui`
- client dev commands `/voxelui toast`, `/voxelui overlay`, `/voxelui modal`, `/voxelui closeall`, and `/voxelui reload`
- `UiOverlayContext` and `UiXmlDialogController` abstractions to keep modals and notifications on one coherent system
### Changed
- VoxelUI now compensates for Minecraft `gui scale` at the screen level so custom UI stays readable without being truncated when the player increases the game GUI scale
- `UIScreen` now renders the UI in a virtual layout space with consistent mouse coordinate remapping, overlay layering, and centered root layout resolution
- many base components now scale more consistently with the UI system, including `Button`, `Checkbox`, `Dialog`, `Divider`, `Dropdown`, `Grid`, `Label`, `NumberInput`, `Panel`, `ProgressBar`, `ScrollPanel`, `TextInput`, and notifications
- buttons now support dynamic sizing, percentage widths, size presets, and XML-driven width values such as `15%`
- the XML mapper now accepts more reusable UI attributes, including button sizing fields and generic render/shader-related style properties
- XML screen action registration now accepts typed handlers, allowing XML events to resolve either `Runnable` callbacks or `Consumer<T>` listeners depending on the component event payload
- `UIScreen.ensureLayoutCurrent()` now reacts to dirty nodes in the existing tree instead of relying only on screen-wide layout dirtiness
- XML bindings can now subscribe directly to observable values and invalidate the mapped component without rebuilding the whole screen
- `UiWritableBinding` is now aligned with the new observable state API instead of being a standalone binding model
- value-driven updates on `Label`, `TextInput`, `NumberInput`, `Checkbox`, `Slider`, `Dropdown`, `Tabs`, `ProgressBar`, and `InventoryGrid` now use local invalidation rather than full layout reloads
- dialogs declared in XML are now mounted outside the normal layout flow and synchronized automatically with `UIScreen.showModal(...)`
- `Dialog` now supports XML-driven custom content without forcing the built-in confirm/cancel button row
- the showcase screen and MCSS demo content were expanded to cover dynamic button sizing and hero visual variants
- the hero rendering geometry was consolidated so the shader, content layout, image placement, and accent line all use the same computed bounds
- `UINode` now stores its declared `id` and exposes `setId`, `getId`, and `findById` for programmatic node lookup
- `UIScreen` now delegates layout, render, notifications, modal management, and input dispatch to the shared `UiRuntime`
- `XmlUIScreen` now reuses the shared runtime and synchronizes XML `<dialog>` nodes through `UiXmlDialogController`
- `Modal` and `Notification` now target a shared overlay context instead of depending directly on `UIScreen`
### Fixed
- UI clipping and inconsistent perceived sizing across higher Minecraft `gui scale` values
- root layout centering drift that made some screens appear to shift horizontally as the GUI scale changed
- missing and limited XML change-event support on interactive inputs; `Dropdown`, `TextInput`, `NumberInput`, `Checkbox`, and `Slider` can now propagate typed values directly from XML-declared handlers
- the previous limitation where common Java state changes required `reloadLayout()` even for simple value updates; observable bindings can now trigger targeted relayouts on existing nodes
- the previous XML gap where confirmation dialogs required `afterBuildUi(...)` and manual Java wiring even for simple modal flows
- XML validation gaps for newer component attributes such as button `size`, `height`, and percentage width fields
- several hero rendering issues around hexagon proportions, content overlap, internal insets, and top/bottom truncation
- shader/log noise caused by uniforms declared or pushed inconsistently between the pipeline and shader JSON definitions
alpha
VoxelUI 0.1.0
0.1.018 апр. 2026 г.30Minecraft: 1.21.1neoforge
Что нового
# Changelog
## [0.1.0] - Initial public beta
First public beta release of the VoxelUI framework.
This release is intended to expose the framework to real usage, collect bug reports, and stabilize the API before a future stable release.
### Added
- core UI engine with the `measure() -> layout() -> render()` pipeline
- foundational components: `Panel`, `Label`, `Button`, `ProgressBar`, `Spacer`, `Divider`
- advanced layout components: `Grid`, `Stack`, `Tabs`, `ScrollPanel`, `ListView`
- input components: `TextInput`, `Checkbox`, `Slider`, `Dropdown`
- Minecraft-oriented components: `ItemStackView`, `InventoryGrid`, `ItemSlot`
- centralized theming through `Theme`
- XML UI support via `UiXmlParser`, `UiXmlMapper`, and `UiXmlResourceLoader`
- runtime bindings for XML-driven screens
- inline and external MCSS stylesheet support
- computed style tracking and style inspection
- UI inspector and development-only debug tooling
- hot reload for XML and MCSS in development mode
- safe XML / MCSS error fallback panels
- basic UI animations such as hover transitions, smooth scroll, and screen entrance
- unit tests and early integration coverage
### Notes
- this is a **beta** release, not a stable API freeze
- bugs, rough edges, and breaking changes between beta versions are still expected
- development-only showcase and debug tooling are disabled by default in release builds
- some parts of the public API are still explicitly marked `BETA` or `EXPERIMENTAL`