Minecraft Flex UI
Implement a Flex layout-based Minecraft GUI framework based on facebook's open source Yoga layout engine.
Minecraft Flex UI
Minecraft Flex UI
For ordinary players do not download the mod
In most cases the module is used by other module developers and is included in their mod Jar package
Description
Based on `facebook` open source `Yoga` layout engine implements the `Minecraft` GUI framework based on the `Flex` layout.
A subset of the `Flex` standard is implemented on top of `Yoga` and most of the `CSS` properties are implemented as well.
The design concept of `MVC` is adopted to realize the one-way and two-way data binding.
Developers can design and implement complex UI interfaces on top of this, and this project can be used as `Yoga` engine embedded in the game as a non-exhaustive reference implementation of the game layout engine.
Example

```java public class WidgetTestScreen extends WidgetScreen { protected StringBuilderObservable text = new StringBuilderObservable();
public WidgetTestScreen() { super(Text.of("test")); }
@Override public void widget(ScreenWidget root) { root.flexDirection.set(WidgetFlexDirection.Row) .justifyContent.set(WidgetJustify.Center) .alignItems.set(WidgetAlign.Center) .child(new BoxWidget() .background.set(RectDrawable.LIGHT_PANEL) .child(new LabelWidget() .text.binding(text.computed((StringBuilderObservable text) -> Text.of(text.getString()))) .margin(WidgetEdge.All, 4)) .child(new TextBoxWidget() .text.binding(text)) .child(new ButtonWidget() .click.on((mouse) -> close()) .child(new LabelWidget() .text.set(Text.of("取消")))) ); } }
```
Data Binding
By default all bindings from `non-computed binding sources` are `bi-directional bindings`. > Setting values for `computed binding sources` is ignored
But most components will only operate `one-way` on bound values