Skip to content

Getting Started

Bento GUI is an expressive GUI library that makes building dynamic screens fast and easy. It is a replacement for Minecraft’s UI widgets that is inspired by HTML and CSS, and uses the builder pattern for building GUI elements. Elements are automatically layed out according to their constraints like min/max dimensions.

  1. Include my maven in the repositories block of your build file:

    build.gradle
    repositories {
    maven {
    name "Chai's Maven"
    url "https://codeberg.org/api/packages/chai/maven"
    }
    }
  2. Declare the dependency in your dependencies block:

    build.gradle
    dependencies {
    modImplementation "dev.chailotl:bento-gui:${project.bento_gui_version}"
    }
  3. Add the version you want to use in your gradle.properties file:

    gradle.properties
    bento_gui_version=0.1.0+1.21

Here is a practical example of how you might use Bento GUI’s elements in a Minecraft screen.

@Environment(EnvType.CLIENT)
public class MyScreen extends Screen {
public MyScreen() {
super(Text.literal("My Screen"));
}
@Override
protected void init() {
Window window = client.getWindow();
int width = window.getScaledWidth();
int height = window.getScaledHeight();
// The root panel that will contain everything
Panel root = Panel.builder()
.dimensions(width, height)
.spacing(1)
.build();
// Add elements to root
Label title = Label.builder()
.text(Text.literal("My Screen"))
.dimensions(true, 32)
.build();
ScrollPanel body = ScrollPanel.ofMenu()
.dimensions(true, true)
.alignCenter()
.padding(10, 0)
.spacing(10)
.build();
Panel footer = Panel.builder()
.dimensions(true, 32)
.alignCenter()
.alignMiddle()
.padding(20, 0)
.spacing(8)
.displayAxis(Panel.DisplayAxis.HORIZONTAL)
.build();
root.addChild(title);
root.addChild(body);
root.addChild(footer);
// Add elements to footer
TextField<String> searchField = TextField.ofString()
.palceholder(Text.literal("Search..."))
.width(true)
.maxWidth(200)
.build();
Button doneButton = Button.builder()
.text(Text.literal("Done"))
.onPress(self -> close())
.build();
footer.addChild(searchField);
footer.addChild(doneButton);
// Add root as drawable child
addDrawableChild(root);
}
}