Documentation Index
Fetch the complete documentation index at: https://mintlify.com/toxicity188/BetterHud/llms.txt
Use this file to discover all available pages before exploring further.
Overview
This page documents all Bukkit events fired by BetterHud. These events allow you to integrate with BetterHud’s lifecycle and respond to player interactions.
Player Events
HudPlayerJoinEvent
Fired when a player’s HUD data is loaded, typically on join.
Package
kr.toxicity.hud.api.bukkit.event.HudPlayerJoinEvent
Extends
PlayerEvent (Bukkit)
HudPlayerEvent
Fields
The HudPlayer instance for the player who joined
Methods
getHudPlayer
@NotNull HudPlayer getHudPlayer()
getPlayer
@NotNull Player getPlayer()
The Bukkit Player instance (inherited from PlayerEvent)
Usage Example
import kr.toxicity.hud.api.bukkit.event.HudPlayerJoinEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class PlayerJoinListener implements Listener {
@EventHandler
public void onHudPlayerJoin(HudPlayerJoinEvent event) {
HudPlayer hudPlayer = event.getHudPlayer();
Player player = event.getPlayer();
// Initialize default HUDs
Hud healthHud = BetterHud.inst().getHudManager().getHud("health_bar");
if (healthHud != null) {
healthHud.add(hudPlayer);
}
// Set initial variables
hudPlayer.getVariableMap().put("score", "0");
hudPlayer.getVariableMap().put("kills", "0");
player.sendMessage("HUD system loaded!");
}
}
HudPlayerQuitEvent
Fired when a player quits and their HUD data is being unloaded.
Package
kr.toxicity.hud.api.bukkit.event.HudPlayerQuitEvent
Extends
PlayerEvent (Bukkit)
HudPlayerEvent
Fields
The HudPlayer instance for the player who is quitting
Methods
getHudPlayer
@NotNull HudPlayer getHudPlayer()
Usage Example
import kr.toxicity.hud.api.bukkit.event.HudPlayerQuitEvent;
@EventHandler
public void onHudPlayerQuit(HudPlayerQuitEvent event) {
HudPlayer hudPlayer = event.getHudPlayer();
Player player = event.getPlayer();
// Save player data before they quit
Map<String, String> variables = hudPlayer.getVariableMap();
saveToDatabase(player.getUniqueId(), variables);
// Log active HUDs
Set<Hud> activeHuds = hudPlayer.getHuds();
plugin.getLogger().info(player.getName() + " quit with " + activeHuds.size() + " active HUDs");
}
HudUpdateEvent
Fired when a player’s HUD is updated.
Package
kr.toxicity.hud.api.bukkit.event.HudUpdateEvent
Extends
PlayerEvent (Bukkit)
HudPlayerEvent
Fields
The HudPlayer whose HUD is being updated
Methods
getHudPlayer
@NotNull HudPlayer getHudPlayer()
Usage Example
import kr.toxicity.hud.api.bukkit.event.HudUpdateEvent;
@EventHandler
public void onHudUpdate(HudUpdateEvent event) {
HudPlayer hudPlayer = event.getHudPlayer();
// Track update frequency
long tick = hudPlayer.getTick();
// Perform custom logic on HUD updates
if (tick % 20 == 0) { // Every second (assuming 20 ticks/second)
updateCustomMetrics(hudPlayer);
}
}
Fired when a custom popup is triggered.
Package
kr.toxicity.hud.api.bukkit.event.CustomPopupEvent
Extends
PlayerEvent (Bukkit)
BetterHudEvent
Fields
The name/identifier of the popup
A mutable map of variables that can be used by the popup
Constructor
public CustomPopupEvent(@NotNull Player who, @NotNull String name)
The player the popup is for
The identifier of the popup
Methods
getName
@NotNull String getName()
getVariables
@NotNull Map<String, String> getVariables()
The mutable variables map for this popup
Usage Example
import kr.toxicity.hud.api.bukkit.event.CustomPopupEvent;
import org.bukkit.Bukkit;
public class CustomPopupListener implements Listener {
@EventHandler
public void onCustomPopup(CustomPopupEvent event) {
Player player = event.getPlayer();
String popupName = event.getName();
// Add custom variables based on popup type
if (popupName.equals("damage_indicator")) {
event.getVariables().put("damage_amount", "10");
event.getVariables().put("damage_type", "FIRE");
} else if (popupName.equals("achievement")) {
event.getVariables().put("achievement_name", "First Kill");
event.getVariables().put("reward", "100 coins");
}
// Log the popup
plugin.getLogger().info("Custom popup '" + popupName + "' shown to " + player.getName());
}
// You can also fire custom popups programmatically:
public void showCustomPopup(Player player, String popupName) {
CustomPopupEvent event = new CustomPopupEvent(player, popupName);
Bukkit.getPluginManager().callEvent(event);
}
}
Lifecycle Events
PluginReloadStartEvent
Fired before BetterHud begins reloading its configuration.
Package
kr.toxicity.hud.api.bukkit.event.PluginReloadStartEvent
Extends
Event (Bukkit)
BetterHudEvent
Constructor
public PluginReloadStartEvent()
This event is fired asynchronously (super(true)).
Usage Example
import kr.toxicity.hud.api.bukkit.event.PluginReloadStartEvent;
@EventHandler
public void onReloadStart(PluginReloadStartEvent event) {
// Save any data before reload
plugin.getLogger().info("BetterHud is starting reload...");
// Pause any integrations
pauseCustomUpdates();
// Save current state
for (Player player : Bukkit.getOnlinePlayers()) {
HudPlayer hudPlayer = BetterHud.inst().getBootstrap().player(player.getUniqueId());
if (hudPlayer != null) {
savePlayerState(hudPlayer);
}
}
}
PluginReloadedEvent
Fired after BetterHud has completed reloading its configuration.
Package
kr.toxicity.hud.api.bukkit.event.PluginReloadedEvent
Extends
Event (Bukkit)
BetterHudEvent
Fields
The result state of the reload operation
Constructor
public PluginReloadedEvent(@NotNull ReloadState state)
The reload state indicating success or failure
This event is fired asynchronously (super(true)).
Methods
getState
@NotNull ReloadState getState()
Usage Example
import kr.toxicity.hud.api.bukkit.event.PluginReloadedEvent;
import kr.toxicity.hud.api.plugin.ReloadState;
@EventHandler
public void onReloaded(PluginReloadedEvent event) {
ReloadState state = event.getState();
if (state.isSuccess()) {
plugin.getLogger().info("BetterHud reload completed successfully!");
// Re-initialize integrations
reinitializeHuds();
reloadPlayerData();
// Notify admins
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.hasPermission("betterhud.admin")) {
player.sendMessage("BetterHud reloaded successfully!");
}
}
} else {
plugin.getLogger().warning("BetterHud reload failed!");
plugin.getLogger().warning("Check BetterHud logs for details.");
// Notify admins of failure
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.hasPermission("betterhud.admin")) {
player.sendMessage("BetterHud reload failed! Check console.");
}
}
}
}
Item Events
UpdateItemEvent
Fired when a player’s inventory items are updated with HUD overlays or modifications.
Package
kr.toxicity.hud.api.bukkit.event.UpdateItemEvent
Extends
PlayerEvent (Bukkit)
BetterHudEvent
Fields
The original Bukkit event that triggered this update
Constructor
public UpdateItemEvent(
@NotNull Player player,
@NotNull ItemStack itemStack,
@NotNull Event original
)
The player whose item is being updated
The original event that caused this item update
Methods
getItemStack
@NotNull ItemStack getItemStack()
getOriginal
@NotNull Event getOriginal()
The original Bukkit event that triggered this update
getItemMeta
public synchronized @NotNull ItemMeta getItemMeta()
The item’s metadata (lazily loaded and cached)
Usage Example
import kr.toxicity.hud.api.bukkit.event.UpdateItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@EventHandler
public void onUpdateItem(UpdateItemEvent event) {
Player player = event.getPlayer();
ItemStack item = event.getItemStack();
Event originalEvent = event.getOriginal();
// Get the item meta
ItemMeta meta = event.getItemMeta();
// Add custom modifications
if (item.getType().name().contains("SWORD")) {
// Add custom data or modify the item
List<String> lore = meta.getLore();
if (lore == null) {
lore = new ArrayList<>();
}
lore.add("Modified by BetterHud");
meta.setLore(lore);
item.setItemMeta(meta);
}
// Log the original event type
plugin.getLogger().info("Item updated from event: " + originalEvent.getEventName());
}
Complete Event Listener Example
Here’s a complete example integrating multiple events:
import kr.toxicity.hud.api.bukkit.event.*;
import kr.toxicity.hud.api.BetterHud;
import kr.toxicity.hud.api.player.HudPlayer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public class CompleteBetterHudListener implements Listener {
private final JavaPlugin plugin;
public CompleteBetterHudListener(JavaPlugin plugin) {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerJoin(HudPlayerJoinEvent event) {
HudPlayer hudPlayer = event.getHudPlayer();
// Load player data from database
loadPlayerData(hudPlayer);
// Initialize default HUDs
initializeDefaultHuds(hudPlayer);
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerQuit(HudPlayerQuitEvent event) {
HudPlayer hudPlayer = event.getHudPlayer();
// Save player data
savePlayerData(hudPlayer);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onHudUpdate(HudUpdateEvent event) {
// Monitor HUD updates for debugging
if (plugin.getConfig().getBoolean("debug")) {
HudPlayer hudPlayer = event.getHudPlayer();
plugin.getLogger().fine("HUD updated for " + hudPlayer.name() + " at tick " + hudPlayer.getTick());
}
}
@EventHandler
public void onCustomPopup(CustomPopupEvent event) {
String popupName = event.getName();
// Add variables based on popup type
switch (popupName) {
case "levelup" -> {
Player p = event.getPlayer();
event.getVariables().put("level", String.valueOf(p.getLevel()));
}
case "achievement" -> {
event.getVariables().put("timestamp", String.valueOf(System.currentTimeMillis()));
}
}
}
@EventHandler
public void onReloadStart(PluginReloadStartEvent event) {
plugin.getLogger().info("BetterHud reload starting - saving data...");
saveAllData();
}
@EventHandler
public void onReloaded(PluginReloadedEvent event) {
if (event.getState().isSuccess()) {
plugin.getLogger().info("BetterHud reload successful - reinitializing...");
reinitialize();
} else {
plugin.getLogger().severe("BetterHud reload failed!");
}
}
@EventHandler
public void onUpdateItem(UpdateItemEvent event) {
// Track item updates for statistics
trackItemUpdate(event.getPlayer(), event.getItemStack());
}
// Helper methods
private void loadPlayerData(HudPlayer hudPlayer) { /* ... */ }
private void savePlayerData(HudPlayer hudPlayer) { /* ... */ }
private void initializeDefaultHuds(HudPlayer hudPlayer) { /* ... */ }
private void saveAllData() { /* ... */ }
private void reinitialize() { /* ... */ }
private void trackItemUpdate(Player player, ItemStack item) { /* ... */ }
}
See Also
- Events Overview - Event system introduction
- HUD API - Working with HUD components
- Popup API - Managing popups
- BetterHudEvent:
kr.toxicity.hud.api.bukkit.event.BetterHudEvent
- HudPlayerEvent:
kr.toxicity.hud.api.bukkit.event.HudPlayerEvent