Skip to main content
BetterHud provides comprehensive support for Bukkit-based servers, including Spigot, Paper, and Folia.

Requirements

  • Minecraft 1.20.4 - 1.21.11
  • Java 21 or higher
  • Bukkit/Spigot/Paper/Folia server
  • No additional dependencies required

Installation

  1. Download the BetterHud Bukkit plugin from SpigotMC, Hangar, or Modrinth
  2. Place the JAR file in your server’s plugins folder
  3. Restart your server
  4. The plugin will generate a resource pack automatically

Platform-Specific Features

Bedrock Support

BetterHud automatically detects and adapts for Bedrock players when using Geyser or Floodgate:
# config.yml
disable-to-bedrock-player: true
The BedrockAdapter interface provides seamless integration:
BukkitBootstrap bootstrap = (BukkitBootstrap) BetterHudAPI.inst().getBootstrap();
BedrockAdapter adapter = bootstrap.bedrockAdapter();

Bukkit Events

BetterHud fires several custom Bukkit events that you can listen to:

HudPlayerJoinEvent

Fired when a player’s HUD data is loaded:
@EventHandler
public void onHudPlayerJoin(HudPlayerJoinEvent event) {
    HudPlayer hudPlayer = event.getHudPlayer();
    Player player = event.getPlayer();
    // Custom logic here
}

HudPlayerQuitEvent

Fired when a player disconnects:
@EventHandler
public void onHudPlayerQuit(HudPlayerQuitEvent event) {
    HudPlayer hudPlayer = event.getHudPlayer();
    // Cleanup logic here
}

CustomPopupEvent

Fired when a custom popup is triggered:
@EventHandler
public void onCustomPopup(CustomPopupEvent event) {
    Player player = event.getPlayer();
    String popupName = event.getName();
    Map<String, String> variables = event.getVariables();
    // Handle popup display
}

PluginReloadStartEvent & PluginReloadedEvent

Fired before and after the plugin reloads:
@EventHandler
public void onReloadStart(PluginReloadStartEvent event) {
    // Prepare for reload
}

@EventHandler
public void onReloadComplete(PluginReloadedEvent event) {
    ReloadState state = event.getState();
    // Handle post-reload logic
}

NMS Support

BetterHud includes NMS (Net Minecraft Server) support for version-specific features:
BukkitBootstrap bootstrap = (BukkitBootstrap) BetterHudAPI.inst().getBootstrap();
NMS nms = bootstrap.volatileCode();
NMSVersion version = nms.version();

Bukkit-Specific Triggers

You can create custom triggers using Bukkit events:
public class MyTrigger implements HudBukkitEventTrigger<PlayerInteractEvent> {
    @Override
    public @NotNull Class<PlayerInteractEvent> getEventClass() {
        return PlayerInteractEvent.class;
    }

    @Override
    public @NotNull Object getKey(PlayerInteractEvent event) {
        return event.getPlayer().getUniqueId();
    }

    @Override
    public void registerEvent(@NotNull BiConsumer<UUID, UpdateEvent> eventConsumer) {
        // Register your event handler
    }
}
Register your custom trigger:
BetterHudAPI.inst().getTriggerManager().addTrigger(
    "my_custom_trigger",
    new MyTrigger()
);

Folia Support

BetterHud fully supports Folia’s regionized threading:
if (bootstrap.isFolia()) {
    // Folia-specific logic
}

Building from Source

To build the Bukkit plugin:
./gradlew pluginJar
The compiled JAR will be in dist/build/libs/.

API Usage

Add BetterHud to your project:
repositories {
    mavenCentral()
}

dependencies {
    compileOnly("io.github.toxicity188:BetterHud-standard-api:VERSION")
    compileOnly("io.github.toxicity188:BetterHud-bukkit-api:VERSION")
}
See the Bukkit example plugin for complete examples.

Configuration

Bukkit-specific configuration options in config.yml:
# Merge with Paper's boss bar system
merge-boss-bar: true

# Boss bar display lines
bossbar-line: 1
bossbar-resource-pack-line: 0

# Disable HUD for Bedrock players
disable-to-bedrock-player: true

# Remove default Minecraft hotbar
remove-default-hotbar: false

Next Steps

Triggers

Learn about event-based triggers

Placeholders

Create custom placeholders

Skript Integration

Use BetterHud with Skript

API Reference

Explore the full API

Build docs developers (and LLMs) love