Creating your own Widget class
public class MyWidget extends Widget
{
/**
* Constructs a Widget object.
*
* @param client The Minecraft client instance
*/
public MyWidget(MinecraftClient client, <Other Parameters>) {
super(client);
}
@Override
public WidgetBox getWidgetBox() {
// x1,y1,x2,y2 are used to define the box around the widget
// scale variable to use the value from user or set your own scale
return new WidgetBox(x1,y1,x2,y2,scale);
}
@Override
public void render(DrawContext drawContext) {
}
}
You can render whatever you want within the render()
method
render()
methodgetWidgetBox() is used to define a widgetBox which the player can use to move or interact with.
You can use this to add a widget using: Widgets.
If you want to save and load this widget then you can add the following:
private String value = "V";
private String key = "Key";
@Override
public void writeToTag(NbtCompound tag) {
super.writeToTag(tag);
tag.putString(key, value);
}
@Override
public void readFromTag(NbtCompound tag) {
super.readFromTag(tag);
value = tag.getString(key /* Or "Key"*/);
}
To save and load this Widget, you can implement the WidgetLoading
class in your main class:
public class MyMainClass implements ClientModInitializer,WidgetLoading {
private DynamicUtil dynamicutil;
@Override
public void onInitializeClient() {
dynamicutil=DynamicHUD.getDynamicUtil();
DynamicHUD.setIWigdets(new MyClass());
dynamicutil.getWidgetManager().setWidgetLoading(new MyMainClass());
}
@Override
public Widget loadWidgetsFromTag(String className, NbtCompound widgetTag) {
//SAMPLE CODE EXAMPLE :
if (className.equals(MyWidget.class.getName())) {
MyWidget widget = new MyWidget (MinecraftClient.getInstance(),<Other parameters>);
widget.readFromTag(widgetTag);
return widget;
}
return WidgetLoading.super.loadWidgetsFromTag(className, widgetTag);
}
}
Now set the MyMainClass as widgetLoading so that it is registered during loading or saving:
dynamicutil.getWidgetManager().setWidgetLoading(new MyMainClass());