Home›Java›Mods›VoidRP UI
VoidRP UI
VoidRP UI
Real interfaces on a vanilla Minecraft client. No mods, no Forge, nothing for the player to install.

Requires Paper 26.2. This plugin does not run on Spigot or Bukkit.
Serves clients from 1.21.6 up. Open source, MIT licensed.

[​IMG]
A screenshot of a real client, not a mockup: the player's own skin, the game's own item textures, and the cursor on the tile it is hovering.

[​IMG]
The player turns their head, the cursor follows, and whatever it is over lights up.​

Why
A server interface in Minecraft is a chest full of items. Anything richer needs a client mod, and hardly anyone installs one. Paid tools like LocoUI draw interfaces on a vanilla client, but their pages are built in a visual editor and baked into a resource pack: data that did not exist when the pack was built cannot be shown.

Here a page is code, and everything on it is sent from the server the moment it is shown. No rebuilding the pack to add a button.

What a page can have

[​IMG]
[​IMG]​

Four looks, one page
The same page and the same code. The whole look is a dozen colours in theme.yml.
Midnight (default)
[​IMG]
Daylight
[​IMG]
Ember
[​IMG]
Grove
[​IMG]​

Installing
  1. Drop the jar into plugins/ on a Paper server and restart.
  2. That is all. The plugin builds the resource pack and serves it itself from a built-in web server (port 8123).
Try it in game: /vui open for the home page, /vui demo for every component at once.

Port closed, shared hosting, or behind Velocity/BungeeCord? Install the plugin on the game server, not the proxy. Put the pack on any web host, set pack.url, and point pack.publish-dir at that host's folder: the plugin copies the pack there on every start and checks in the log that the address serves the right one.

Optional: PacketEvents. With it the cursor reacts up to 50 ms sooner, older clients get the right pack straight away, and other plugins' boss bars are hidden while a page is open.

Clients
Mojang renamed the text shader in 26.2, so the plugin builds two packs and gives each player the one their client can read. Both have been tried on real clients, including 1.21.6 through ViaVersion.

For developers
A page is a Kotlin class that answers one question: what do I look like right now?
Code (Text):
class ShopPage(private val balance: Int) : Page() {
    override fun view(): View = Panel(
        style = Theme.page,
        width = Size.Fixed(600),
        gap = Theme.SPACE_4,
        children = listOf(
            Text("Shop", Theme.TEXT_H2, Theme.INK, Weight.SEMIBOLD),
            Text("Balance: $balance", Theme.TEXT_BODY, Theme.INK_SOFT),
            button("Buy", id = "buy"),
        ),
    )

    override fun onClick(id: String, button: Button) {
        if (id == "buy") { /* ... */ refresh() }
    }
}
Change a field, call refresh(), and the new page is drawn. The library is on JitPack, the API is a Bukkit service, and the repository has a complete example plugin.

How it works
A page travels as one line of text in the title of an invisible boss bar. The resource pack carries a patched text shader that recognises the plugin's glyphs by their colour and puts each one where it belongs. Hovering and clicks are resolved on the server, so the client is never trusted.

A page costs about 3 ms to lay out and is sent only when it changes. A cursor frame costs 0.02 ms and a few dozen bytes. The pack is 1.2 MB, downloaded once.

Limits, honestly

Links
MIT licensed, including on commercial servers.

Commands

Plugin details

Read from the plugin's own plugin.yml.

Quick facts

Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.

VoidRP UI is a free Minecraft Java mod. Compatible with Minecraft 26.2. Downloaded 3 times (via Spigot). Download it and open it directly in the game.

Explore more