Code Patterns

Copy-paste examples for common plugin tasks. Commands, events, ECS, GUI, and more.

← Back to Patterns
ui

Navigation Bar Setup

Helper for setting up navigation bar in custom UI pages with permission-filtered entries

Example Code

java
public class NavBarHelper {
    public static void setupBar(Ref<EntityStore> ref, UICommandBuilder uiCommandBuilder,
                                UIEventBuilder uiEventBuilder, Store<EntityStore> store) {
        var player = store.getComponent(ref, Player.getComponentType());
        int index = 0;
        uiCommandBuilder.appendInline("#TopNavBar #NavButtons", "Group #NavCards { LayoutMode: Left; }");

        for (Entry entry : Registry.getInstance().getEntries()) {
            if (!entry.permission().hasPermission(player)) continue;
            uiCommandBuilder.append("#NavCards", "Pages/Nav/NavButton.ui");
            uiCommandBuilder.set("#NavCards[" + index + "] #Button.Text", entry.displayName());
            uiEventBuilder.addEventBinding(CustomUIEventBindingType.Activating,
                "#NavCards[" + index + "] #Button", EventData.of("NavBar", entry.id()));
            ++index;
        }
    }

    public static boolean handleData(Ref<EntityStore> ref, Store<EntityStore> store,
                                     String navBarData, Runnable onCancel) {
        if (navBarData == null) return false;
        var entry = Registry.getInstance().getEntry(navBarData);
        if (entry == null) return false;
        var playerRef = store.getComponent(ref, PlayerRef.getComponentType());
        var player = store.getComponent(ref, Player.getComponentType());
        onCancel.run();
        player.getPageManager().openCustomPage(ref, store, entry.guiSupplier().apply(playerRef));
        return true;
    }
}