Early adopters will receive a raised limit starter plan & discord role, FOREVER. If you're a plugin developer check our docs! Join our Discord
Plugin Developer Guide

Building a plugin integration?

HBLCore is the official plugin that checks every joining player against hytalebanlist.org and fires an HBLStatusEvent your plugin can hook into. HBLCore does not kick players — your plugin decides what to do with the result.

Check Statuses

StatusMeaning
CLEARNo ban on record. Player is clean.
BANNEDActive ban confirmed by hytalebanlist.org.
LOCAL_BANBan exists on hytalebanlist.org but is pending review - not yet confirmed.
WHITELISTEDPlayer is whitelisted on hytalebanlist.org.

Quick Start

Register a listener in your plugin

Call HBLCorePlugin.registerStatusListener() in your plugin's setup() method. No event registry, no interfaces to extend beyond the functional interface.

Quick start
import org.hblcore.HBLCorePlugin;
import org.hblcore.event.HBLStatusEvent;
import org.hblcore.event.HBLStatusEvent.PlayerStatus;

public class YourPlugin extends JavaPlugin {

    @Override
    protected void setup() {
        HBLCorePlugin.registerStatusListener(event -> {
            if (event.getStatus() == PlayerStatus.BANNED) {
                // Handle banned player
            }
        });
    }
}

HBLStatusEvent Fields

event.getUsername()   // String        - the joining player's username
event.getUuid()       // String        - the joining player's UUID
event.getStatus()     // PlayerStatus  - CLEAR | BANNED | LOCAL_BAN | WHITELISTED
event.getReason()     // String        - ban reason (null if CLEAR or WHITELISTED)
event.getAppealUrl()  // String        - appeal URL (null if not applicable)
event.getExpiresAt()  // Instant       - ban expiry (null if permanent or not applicable)

Handling All Statuses

HBLCorePlugin.registerStatusListener(event -> {
    switch (event.getStatus()) {

        case BANNED -> {
            String reason   = event.getReason() != null ? event.getReason() : "No reason provided";
            String appeal   = event.getAppealUrl();
            Instant expires = event.getExpiresAt(); // null = permanent

            // Example: kick the player
            event.getPacketHandler().disconnect(
                "You are banned.\nReason: " + reason +
                (appeal != null ? "\nAppeal: " + appeal : "")
            );
        }

        case LOCAL_BAN -> {
            // Ban exists but is pending review - not yet confirmed.
            // You may want to flag or monitor this player without taking action.
            String reason = event.getReason();
        }

        case WHITELISTED -> {
            // Player is explicitly whitelisted on HBL.
            // You may want to clear any local restrictions.
        }

        case CLEAR -> {
            // Player is clean. No action required in most cases.
        }
    }
});

Unregistering a Listener

Store the reference when you register, then unregister it in shutdown():

// Store the reference when you register
private final HBLStatusListener myListener = event -> { ... };

@Override
protected void setup() {
    HBLCorePlugin.registerStatusListener(myListener);
}

@Override
protected void shutdown() {
    HBLCorePlugin.unregisterStatusListener(myListener);
}

Load Order

Listeners can be registered at any time — before or after HBLCore loads. If you want to be safe, declare HBLCore as a dependency in your manifest.json:

manifest.json
{
  "Dependencies": {
    "HBLCore": "*"
  }
}

Notes

  • -HBLCore does not kick players. It only fires the event. Your plugin decides what to do with the result.
  • -LOCAL_BAN is a signal, not a confirmed ban. It means the ban is pending review on hytalebanlist.org and has not yet been confirmed. Use it as a trigger to monitor the player without taking immediate action.
  • -Listeners run asynchronously — the check is performed off the main thread. Avoid blocking operations inside your listener callback.
  • -Exceptions inside a listener are caught by HBLCore and logged, so a crash in your listener will not affect other listeners or the join flow.