Skip to main content

Overview

BetterHud provides a set of manager interfaces that control different aspects of the plugin. All managers are accessible through the main BetterHud API instance.

Getting Managers

import kr.toxicity.hud.api.BetterHud;
import kr.toxicity.hud.api.BetterHudAPI;

BetterHud api = BetterHudAPI.inst();

// Access any manager
PlayerManager playerManager = api.getPlayerManager();
HudManager hudManager = api.getHudManager();
PopupManager popupManager = api.getPopupManager();

ConfigManager

Manages plugin configuration and debug settings.

Get Debug Status

boolean debug()
Checks if debug mode is enabled.
return
boolean
true if debug is enabled
Example:
ConfigManager config = api.getConfigManager();
if (config.debug()) {
    System.out.println("Debug mode active");
}

Get BossBar Line

int getBossbarLine()
Gets the number of bossbar lines used.
return
int
The number of bossbar lines
Example:
int lines = config.getBossbarLine();
System.out.println("Using " + lines + " bossbar lines");

Get Debug Level

DebugLevel getDebugLevel()
Gets the current debug level.
return
DebugLevel
The debug verbosity level
Debug Levels:
  • MANAGER - Shows manager reload messages
  • ASSETS - Shows asset creation messages
  • FILE - Shows file generation messages
  • ALL - Shows all debug messages
Example:
DebugLevel level = config.getDebugLevel();
if (level == ConfigManager.DebugLevel.ALL) {
    // Maximum verbosity
}

Check Available Level

static boolean checkAvailable(DebugLevel debugLevel)
Checks if the current debug level is high enough.
debugLevel
DebugLevel
required
The minimum level to check
return
boolean
true if current level meets or exceeds the parameter
Example:
if (ConfigManager.checkAvailable(ConfigManager.DebugLevel.ASSETS)) {
    System.out.println("Asset debug enabled");
}

PlaceholderManager

Manages placeholders for dynamic HUD content.

Get Number Container

PlaceholderContainer<Number> getNumberContainer()
Accesses numeric placeholders.
return
PlaceholderContainer<Number>
Container for number-type placeholders
Example:
PlaceholderManager manager = api.getPlaceholderManager();
PlaceholderContainer<Number> numbers = manager.getNumberContainer();

// Register custom number placeholder
numbers.addPlaceholder("custom_health", player -> {
    return 100; // Return player health
});

Get Boolean Container

PlaceholderContainer<Boolean> getBooleanContainer()
Accesses boolean placeholders.
return
PlaceholderContainer<Boolean>
Container for boolean-type placeholders
Example:
PlaceholderContainer<Boolean> booleans = manager.getBooleanContainer();

// Register custom boolean placeholder
booleans.addPlaceholder("is_flying", player -> {
    return player.isFlying();
});

Get String Container

PlaceholderContainer<String> getStringContainer()
Accesses string placeholders.
return
PlaceholderContainer<String>
Container for string-type placeholders
Example:
PlaceholderContainer<String> strings = manager.getStringContainer();

// Register custom string placeholder
strings.addPlaceholder("player_rank", player -> {
    return "VIP";
});

ListenerManager

Manages custom HUD event listeners.

Add Listener

void addListener(String name, Function<YamlObject, Function<UpdateEvent, HudListener>> listenerFunction)
Registers a custom listener builder.
name
String
required
Unique identifier for the listener type
listenerFunction
Function<YamlObject, Function<UpdateEvent, HudListener>>
required
Function that creates listener instances from YAML configuration
Example:
ListenerManager manager = api.getListenerManager();

manager.addListener("custom_damage", yamlObject -> {
    // Parse configuration from yamlObject
    return updateEvent -> {
        // Return listener instance
        return new HudListener() {
            @Override
            public void onUpdate(UpdateEvent event) {
                // Handle update
            }
        };
    };
});

Get All Listener Keys

Set<String> getAllListenerKeys()
Gets all registered listener type names.
return
Set<String>
Unmodifiable set of listener names
Example:
Set<String> listeners = manager.getAllListenerKeys();
for (String listener : listeners) {
    System.out.println("Listener: " + listener);
}

PopupManager

Manages popup displays.

Get Popup

Popup getPopup(String name)
Gets a popup by name.
name
String
required
The popup identifier
return
Popup
The popup instance, or null if not found
Example:
PopupManager manager = api.getPopupManager();
Popup welcomePopup = manager.getPopup("welcome_message");

if (welcomePopup != null) {
    // Use popup
}

Get All Names

Set<String> getAllNames()
Gets all popup names.
return
Set<String>
Unmodifiable set of popup identifiers
Example:
Set<String> popupNames = manager.getAllNames();
System.out.println("Available popups: " + popupNames);

Get All Popups

Set<Popup> getAllPopups()
Gets all popup instances.
return
Set<Popup>
Unmodifiable set of all popups
Example:
Set<Popup> allPopups = manager.getAllPopups();
for (Popup popup : allPopups) {
    System.out.println("Popup: " + popup.getName());
}

CompassManager

Manages compass HUD elements.

Get Compass

Compass getCompass(String name)
Gets a compass by name.
name
String
required
The compass identifier
return
Compass
The compass instance, or null if not found
Example:
CompassManager manager = api.getCompassManager();
Compass mainCompass = manager.getCompass("main_compass");

Get All Names

Set<String> getAllNames()
Gets all compass names.
return
Set<String>
Unmodifiable set of compass identifiers
Example:
Set<String> compassNames = manager.getAllNames();

Get All Compasses

Set<Compass> getAllCompasses()
Gets all compass instances.
return
Set<Compass>
Unmodifiable set of all compasses
Example:
Set<Compass> allCompasses = manager.getAllCompasses();
System.out.println("Total compasses: " + allCompasses.size());

TriggerManager

Manages HUD triggers that control when HUDs appear.

Add Trigger

void addTrigger(String name, Function<YamlObject, HudTrigger<?>> trigger)
Registers a custom trigger type.
name
String
required
Unique identifier for the trigger type
trigger
Function<YamlObject, HudTrigger<?>>
required
Function that creates trigger instances from YAML configuration
Example:
TriggerManager manager = api.getTriggerManager();

manager.addTrigger("custom_health_check", yamlObject -> {
    // Parse configuration
    double threshold = yamlObject.get("threshold").asDouble();
    
    return new HudTrigger<Player>() {
        @Override
        public boolean check(Player player) {
            return player.getHealth() < threshold;
        }
    };
});

Get All Trigger Keys

Set<String> getAllTriggerKeys()
Gets all registered trigger type names.
return
Set<String>
Unmodifiable set of trigger names
Example:
Set<String> triggers = manager.getAllTriggerKeys();
for (String trigger : triggers) {
    System.out.println("Trigger: " + trigger);
}

HudManager

Manages HUD displays.

Get HUD

Hud getHud(String name)
Gets a HUD by name.
name
String
required
The HUD identifier
return
Hud
The HUD instance, or null if not found
Example:
HudManager manager = api.getHudManager();
Hud healthBar = manager.getHud("health_bar");

if (healthBar != null) {
    // Use HUD
}

Get All Names

Set<String> getAllNames()
Gets all HUD names.
return
Set<String>
Unmodifiable set of HUD identifiers
Example:
Set<String> hudNames = manager.getAllNames();
System.out.println("Available HUDs: " + hudNames);

Get All HUDs

Set<Hud> getAllHuds()
Gets all HUD instances.
return
Set<Hud>
Unmodifiable set of all HUDs
Example:
Set<Hud> allHuds = manager.getAllHuds();
for (Hud hud : allHuds) {
    System.out.println("HUD: " + hud.getName());
}

DatabaseManager

Manages database connections for persistent player data.

Get Current Database

HudDatabase getCurrentDatabase()
Gets the currently active database.
return
HudDatabase
The active database instance
Example:
DatabaseManager manager = api.getDatabaseManager();
HudDatabase database = manager.getCurrentDatabase();

// Use database for operations
database.save(playerData);

Add Database

boolean addDatabase(String name, HudDatabaseConnector connector)
Registers a custom database connector.
name
String
required
Unique identifier for the database
connector
HudDatabaseConnector
required
The database connector implementation
return
boolean
true if registration was successful
Example:
HudDatabaseConnector mongoConnector = new MongoDBConnector();
boolean success = manager.addDatabase("mongodb", mongoConnector);

if (success) {
    System.out.println("MongoDB connector registered");
}

ShaderManager

Manages shader customization for text rendering.

Add Constant

void addConstant(String key, String value)
Defines a shader constant (#Define).
key
String
required
The constant name
value
String
required
The constant value
Example:
ShaderManager manager = api.getShaderManager();
manager.addConstant("OUTLINE_WIDTH", "2.0");
manager.addConstant("SHADOW_STRENGTH", "0.8");

Add Tag Supplier

void addTagSupplier(ShaderType type, ShaderTagSupplier supplier)
Adds shader tags to a shader file.
type
ShaderType
required
The type of shader to modify
supplier
ShaderTagSupplier
required
Supplier that provides shader tags
Shader Types:
  • TEXT_VERTEX - Text vertex shader (text.vsh)
  • TEXT_FRAGMENT - Text fragment shader (text.fsh)
Example:
ShaderManager manager = api.getShaderManager();

ShaderTagSupplier customSupplier = () -> {
    return ShaderManager.newTag()
        .add("GenerateOtherMainMethod", List.of(
            "vec4 customColor = vec4(1.0, 0.0, 0.0, 1.0);"
        ))
        .add("GenerateOtherDefinedMethod", List.of(
            "vec4 applyEffect(vec4 color) { return color * 1.5; }"
        ));
};

manager.addTagSupplier(ShaderManager.ShaderType.TEXT_FRAGMENT, customSupplier);

Create Shader Tag

static ShaderTag newTag()
Creates a new shader tag builder.
return
ShaderTag
New tag builder instance
Example:
ShaderTag tag = ShaderManager.newTag()
    .add("GenerateOtherMainMethod", Arrays.asList(
        "// Custom shader code",
        "gl_FragColor = vec4(1.0);"
    ));

Empty Tag Constants

ShaderTag EMPTY_TAG
ShaderTagSupplier EMPTY_SUPPLIER
Predefined empty shader tags. Example:
ShaderTagSupplier supplier = ShaderManager.EMPTY_SUPPLIER;

PlayerManager

Manages HUD player instances.

Get HUD Player

HudPlayer getHudPlayer(UUID uuid)
Gets a player’s HUD data by UUID.
uuid
UUID
required
The player’s unique identifier
return
HudPlayer
The player’s HUD data, or null if not found
Example:
PlayerManager manager = api.getPlayerManager();
HudPlayer hudPlayer = manager.getHudPlayer(playerUUID);

if (hudPlayer != null) {
    hudPlayer.setHudEnabled(true);
}

Get All HUD Players

Collection<HudPlayer> getAllHudPlayer()
Gets all online players’ HUD data.
return
Collection<HudPlayer>
Unmodifiable collection of all HUD players
Example:
Collection<HudPlayer> allPlayers = manager.getAllHudPlayer();
for (HudPlayer player : allPlayers) {
    player.update(); // Update all players
}

Add Location Provider

void addLocationProvider(PointedLocationProvider provider)
Registers a location provider for compass waypoints.
provider
PointedLocationProvider
required
The location provider implementation
Example:
PointedLocationProvider questProvider = new PointedLocationProvider() {
    @Override
    public Set<PointedLocation> getLocations(HudPlayer player) {
        // Return quest waypoints for player
        return getQuestLocations(player);
    }
};

manager.addLocationProvider(questProvider);

TextManager

Manages text rendering and formatting. Currently a marker interface with no methods.
TextManager manager = api.getTextManager();

Complete Example

import kr.toxicity.hud.api.BetterHud;
import kr.toxicity.hud.api.BetterHudAPI;
import kr.toxicity.hud.api.manager.*;
import kr.toxicity.hud.api.player.HudPlayer;
import kr.toxicity.hud.api.popup.Popup;
import kr.toxicity.hud.api.hud.Hud;

public class ManagerExample {
    
    public void demonstrateManagers() {
        BetterHud api = BetterHudAPI.inst();
        
        // Config Manager
        ConfigManager config = api.getConfigManager();
        if (config.debug()) {
            System.out.println("Debug level: " + config.getDebugLevel());
        }
        
        // Placeholder Manager
        PlaceholderManager placeholders = api.getPlaceholderManager();
        placeholders.getNumberContainer().addPlaceholder("custom_stat", player -> 42);
        placeholders.getBooleanContainer().addPlaceholder("is_vip", player -> true);
        placeholders.getStringContainer().addPlaceholder("rank", player -> "VIP");
        
        // Listener Manager
        ListenerManager listeners = api.getListenerManager();
        listeners.addListener("damage_taken", yamlObject -> updateEvent -> {
            return new MyCustomListener();
        });
        
        // Popup Manager
        PopupManager popups = api.getPopupManager();
        Popup welcome = popups.getPopup("welcome");
        Set<String> allPopups = popups.getAllNames();
        
        // HUD Manager
        HudManager huds = api.getHudManager();
        Hud healthBar = huds.getHud("health_bar");
        Set<Hud> allHuds = huds.getAllHuds();
        
        // Player Manager
        PlayerManager players = api.getPlayerManager();
        Collection<HudPlayer> allPlayers = players.getAllHudPlayer();
        
        for (HudPlayer player : allPlayers) {
            player.setHudEnabled(true);
            player.getVariableMap().put("score", "100");
        }
        
        // Database Manager
        DatabaseManager database = api.getDatabaseManager();
        HudDatabase currentDb = database.getCurrentDatabase();
        
        // Shader Manager
        ShaderManager shaders = api.getShaderManager();
        shaders.addConstant("CUSTOM_VALUE", "1.0");
        
        ShaderTagSupplier tagSupplier = () -> ShaderManager.newTag()
            .add("GenerateOtherMainMethod", List.of("// Custom code"));
        
        shaders.addTagSupplier(ShaderManager.ShaderType.TEXT_FRAGMENT, tagSupplier);
    }
}

See Also

Build docs developers (and LLMs) love