Skip to main content
BetterHud is available as a Fabric server-side mod for Minecraft 1.21.11.

Requirements

  • Minecraft 1.21.11
  • Fabric Loader
  • Fabric API (required dependency)
  • Java 21 or higher

Installation

  1. Install Fabric Loader on your server
  2. Download and install Fabric API
  3. Download BetterHud from Modrinth
  4. Place both JARs in your server’s mods folder
  5. Start your server

Platform-Specific Features

Fabric Bootstrap

Access the Fabric-specific bootstrap:
import kr.toxicity.hud.api.fabric.FabricBootstrap;
import kr.toxicity.hud.api.BetterHudAPI;

FabricBootstrap bootstrap = (FabricBootstrap) BetterHudAPI.inst().getBootstrap();

if (bootstrap.isFabric()) {
    // Fabric-specific logic
}

Event System

BetterHud provides a custom event system for Fabric:

Pre-Reload Event

import kr.toxicity.hud.api.fabric.FabricBootstrap;
import kr.toxicity.hud.api.fabric.event.EventRegistry;

FabricBootstrap.PRE_RELOAD_EVENT.register(unit -> {
    // Execute before BetterHud reloads
    System.out.println("BetterHud is about to reload!");
});

Post-Reload Event

import kr.toxicity.hud.api.plugin.ReloadState;

FabricBootstrap.POST_RELOAD_EVENT.register(state -> {
    // Execute after BetterHud reloads
    System.out.println("Reload completed with state: " + state);
});

Fabric Event Triggers

Create custom triggers using Fabric events:
import kr.toxicity.hud.api.fabric.trigger.HudFabricEventTrigger;
import kr.toxicity.hud.api.fabric.event.EventRegistry;
import kr.toxicity.hud.api.fabric.event.entity.PlayerAttackEntityEvent;

public class AttackTrigger implements HudFabricEventTrigger<PlayerAttackEntityEvent> {
    @Override
    public @NotNull EventRegistry<PlayerAttackEntityEvent> registry() {
        return PlayerAttackEntityEvent.REGISTRY;
    }

    @Override
    public @NotNull Object getKey(PlayerAttackEntityEvent event) {
        return event.player().getUUID();
    }

    @Override
    public void registerEvent(@NotNull BiConsumer<UUID, UpdateEvent> eventConsumer) {
        PlayerAttackEntityEvent.REGISTRY.register(event -> {
            UUID playerUuid = event.player().getUUID();
            UpdateEvent updateEvent = createUpdateEvent(event);
            eventConsumer.accept(playerUuid, updateEvent);
        });
    }
}

Built-in Fabric Events

BetterHud provides several built-in Fabric events:

PlayerAttackEntityEvent

import kr.toxicity.hud.api.fabric.event.entity.PlayerAttackEntityEvent;

PlayerAttackEntityEvent.REGISTRY.register(event -> {
    ServerPlayer player = event.player();
    LivingEntity target = event.entity();
    // Handle attack event
});

PlayerDamageByEntityEvent

import kr.toxicity.hud.api.fabric.event.entity.PlayerDamageByEntityEvent;

PlayerDamageByEntityEvent.REGISTRY.register(event -> {
    ServerPlayer player = event.player();
    LivingEntity attacker = event.entity();
    // Handle damage event
});

PlayerKillEntityEvent

import kr.toxicity.hud.api.fabric.event.entity.PlayerKillEntityEvent;

PlayerKillEntityEvent.REGISTRY.register(event -> {
    ServerPlayer player = event.player();
    LivingEntity killed = event.entity();
    // Handle kill event
});

PlayerDeathEvent

import kr.toxicity.hud.api.fabric.event.entity.PlayerDeathEvent;

PlayerDeathEvent.REGISTRY.register(event -> {
    ServerPlayer player = event.player();
    // Handle player death
});

Mixins

BetterHud uses Mixin to integrate with Minecraft:
{
  "required": true,
  "package": "kr.toxicity.hud.api.fabric.mixin",
  "compatibilityLevel": "JAVA_21",
  "mixins": [
    "entity.EntityMixin",
    "entity.LivingEntityMixin",
    "player.ConnectionMixin",
    "player.ServerCommonPacketListenerImplMixin"
  ]
}

Building from Source

To build the Fabric mod:
./gradlew fabricJar
The compiled JAR will be in dist/build/libs/.

API Usage

Add BetterHud to your Fabric mod:
repositories {
    mavenCentral()
}

dependencies {
    compileOnly("io.github.toxicity188:BetterHud-standard-api:VERSION")
    modCompileOnly("io.github.toxicity188:BetterHud-fabric-api:VERSION")
}
See the Fabric example mod for complete examples.

Fabric Mod Integration

Integrate BetterHud into your Fabric mod:
import kr.toxicity.hud.api.fabric.FabricInitializer;
import net.fabricmc.api.ModInitializer;

public class MyMod implements ModInitializer {
    @Override
    public void onInitialize() {
        // Wait for BetterHud to initialize
        FabricInitializer.onReady(() -> {
            // BetterHud is now ready
            registerCustomPlaceholders();
            registerCustomTriggers();
        });
    }
}

Configuration

Fabric-specific configuration options:
# config.yml
namespace: "betterhud"
pack-type: zip

# Fabric doesn't use boss bars like Bukkit
merge-boss-bar: false

Resource Pack Generation

BetterHud automatically generates resource packs on Fabric:
# config.yml
build-folder-location: "BetterHud/build"
pack-type: zip # folder, zip, none
enable-self-host: false
The generated pack will be in config/BetterHud/build/.

Performance

Mixin Performance

BetterHud’s mixins are optimized for minimal performance impact:
  • Entity mixins only inject where necessary
  • Packet handling is asynchronous where possible
  • Event callbacks are cached

Memory Usage

Fabric implementation uses efficient data structures:
// EventRegistry uses lightweight callbacks
EventRegistry<T> registry = new EventRegistry<>();
registry.register(event -> {
    // Minimal overhead
});

Compatibility

Other Fabric Mods

BetterHud is compatible with most Fabric mods. If you encounter issues:
  1. Check mixin conflicts in logs
  2. Ensure Fabric API is up to date
  3. Report compatibility issues on GitHub

Client-Side Mods

BetterHud is server-side only. Clients don’t need any mods installed, just the resource pack.

Debugging

Enable detailed logging:
# config.yml
debug: true
debug-level: all
Check logs in config/BetterHud/logs/.

Next Steps

Triggers

Learn about Fabric event triggers

Placeholders

Create custom placeholders

API Reference

Explore the full API

Example Mod

View example implementations

Build docs developers (and LLMs) love