mcNows
Nows Loader 0.6.2 / Minecraft 26.2

Client UI And Player Helpers

Add title-screen UI, simple screens, overlay text and local player helpers through the Minecraft adapter.

Client UI And Player Helpers

Client UI helpers cover common title-screen cases: adding buttons, opening a simple screen from that button and drawing small overlays. Raw Minecraft UI objects remain exposed for deeper behavior.

Ui ui = MinecraftApi.ui(context);
ui.titleScreen().addButton(title -> title.addButton(
        title.centerX(98), title.height() / 4 + 120, 98, 20,
        "My Mod",
        () -> title.showSimpleScreen(
                "My Mod",
                screen -> screen.addButton(screen.centerX(120), screen.height() - 40, 120, 20,
                        "Done", screen::close),
                render -> render.centeredText("Hello from Nows UI",
                        render.width() / 2, 40, 0xFFFFFFFF))
));

ui.titleScreen().render(render ->
        render.text("my_mod loaded", 2, render.height() - 42, 0xFFAAFFAA));

TitleScreenUi.addButton receives a title-screen sink with helpers for center positioning, adding buttons, opening simple screens and opening the built-in Nows Mods screen through showNowsMods(context). Each Minecraft adapter owns the actual title-screen parent and setScreen/setScreenAndShow calls, so callers do not need to touch TitleScreen or current-screen fields directly. TitleScreenUi.render receives a render context for small title-screen overlays. These hooks are meant for compact loader/mod affordances, not full custom menu replacement.

ClientApi also exposes thin helpers around the active Minecraft client:

ClientApi.execute(() -> ClientApi.show(myScreen));
ClientApi.close();

Client player helpers expose both nullable and fail-fast player access. On multiplayer servers, server-authoritative values may be corrected by the server:

PlayerApi player = MinecraftApi.player(context);
player.current().ifPresent(local -> {
    PlayerSnapshot snapshot = player.snapshot();
    player.sendOverlayMessage(McText.literal("Hello " + snapshot.name()));
    player.setPosition(McVec3.of(0.5D, snapshot.position().y(), 0.5D));
    player.addItem(ItemStackSpec.of("minecraft:stone", 1));
    player.setHealth(Math.min(snapshot.maxHealth(), snapshot.health() + 2.0F));
    player.setFood(20);
    player.setSelectedHotbarSlot(0);
});

PlayerSnapshot.position() and velocity() now use McVec3, so common player code does not need to know whether the selected adapter uses one vector class or another internally.

Player Helper Scope

PlayerApi.current() returns an Optional<LocalPlayer> because there may be no active world or player yet. requireCurrent() throws when no local player is available.

The snapshot and getter methods cover common local state: name, stable position, stable velocity, health, food, saturation, level, experience, selected slot and selected item. Mutator methods cover client-side changes such as health, food, saturation, experience, stable position, rotation, stable velocity, flying flags, movement speeds, inventory item placement, selected hotbar slot and chat/overlay messages.

Treat these as client helpers. In multiplayer, the server can correct health, inventory, movement and permission-sensitive state. Use proper server-authoritative packets or commands for gameplay changes that must persist.