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
Checks if debug mode is enabled.
Example:
ConfigManager config = api.getConfigManager();
if (config.debug()) {
System.out.println("Debug mode active");
}
Get BossBar Line
Gets the number of bossbar lines used.
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.
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.
The minimum level to check
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.
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.
Unmodifiable set of listener names
Example:
Set<String> listeners = manager.getAllListenerKeys();
for (String listener : listeners) {
System.out.println("Listener: " + listener);
}
Manages popup displays.
Popup getPopup(String name)
Gets a popup by name.
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.
Unmodifiable set of popup identifiers
Example:
Set<String> popupNames = manager.getAllNames();
System.out.println("Available popups: " + popupNames);
Set<Popup> getAllPopups()
Gets all popup instances.
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.
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.
Unmodifiable set of compass identifiers
Example:
Set<String> compassNames = manager.getAllNames();
Get All Compasses
Set<Compass> getAllCompasses()
Gets all compass instances.
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.
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.
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
Gets a HUD by name.
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.
Unmodifiable set of HUD identifiers
Example:
Set<String> hudNames = manager.getAllNames();
System.out.println("Available HUDs: " + hudNames);
Get All HUDs
Gets all HUD instances.
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.
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.
Unique identifier for the database
connector
HudDatabaseConnector
required
The database connector implementation
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).
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.
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.
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.
The player’s unique identifier
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.
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