Overview
HookManager provides a centralized way to integrate with popular Minecraft plugins. It automatically detects installed plugins and provides convenient methods to interact with them.
Initialization
Call this method during your plugin startup to detect and load all available plugin hooks.
loadDependencies
Detects and loads hooks for all supported plugins.
@Override
public void onPluginStart() {
HookManager.loadDependencies();
}
This method automatically detects which plugins are installed and initializes the appropriate hooks.
Supported plugins
HookManager supports integration with the following plugins:
- Economy: Vault
- Permissions: Vault, LuckPerms (via Vault)
- Chat: Vault, EssentialsX, CMI
- Placeholders: PlaceholderAPI, MVdWPlaceholderAPI
- Factions: FactionsUUID, MassiveFactions
- Land Protection: WorldGuard, Residence, Towny, Lands, PlotSquared
- Vanish: EssentialsX, CMI, AdvancedVanish, PremiumVanish
- Moderation: LiteBans, BanManager
- NPCs: Citizens
- Mobs: MythicMobs, Boss
- Discord: DiscordSRV
- Other: mcMMO, Multiverse-Core, AuthMe, ProtocolLib, ItemsAdder
Plugin detection
Check if specific plugins are loaded:
if (HookManager.isVaultLoaded()) {
double balance = HookManager.getBalance(player);
}
if (HookManager.isPlaceholderAPILoaded()) {
String parsed = HookManager.replacePlaceholders(player, message);
}
if (HookManager.isWorldGuardLoaded()) {
List<String> regions = HookManager.getRegions(location);
}
Vault integration
Economy
Work with player balances and currency.
The player to interact with.
// Get balance
double balance = HookManager.getBalance(player);
// Withdraw money
HookManager.withdraw(player, 100.0);
// Deposit money
HookManager.deposit(player, 50.0);
// Get currency names
String singular = HookManager.getCurrencySingular(); // "Dollar"
String plural = HookManager.getCurrencyPlural(); // "Dollars"
Permissions
Check and manage player permissions.
// Check permission
boolean hasPerm = HookManager.hasVaultPermission(player, "my.permission");
// Get primary group
String group = HookManager.getPlayerPrimaryGroup(player);
Chat
Get player prefixes, suffixes, and groups.
// Get prefix
String prefix = HookManager.getPlayerPrefix(player);
// Get suffix
String suffix = HookManager.getPlayerSuffix(player);
// Get permission group
String group = HookManager.getPlayerPermissionGroup(player);
Check integration
if (HookManager.isEconomyIntegrated()) {
// Economy plugin is available
}
if (HookManager.isChatIntegrated()) {
// Chat plugin is available
}
Placeholder integration
PlaceholderAPI and MVdWPlaceholderAPI
Replace placeholders in messages.
// Replace standard placeholders
String message = "Hello %player_name%, you have %vault_eco_balance%";
String parsed = HookManager.replacePlaceholders(player, message);
// Replace relational placeholders (PlaceholderAPI only)
String relation = "%rel_factions_relation%";
String parsed = HookManager.replaceRelationPlaceholders(player1, player2, relation);
Register custom placeholders
HookManager.addPlaceholder("health", player ->
String.valueOf(player.getHealth())
);
HookManager.addPlaceholder("rank", player ->
HookManager.getPlayerPermissionGroup(player)
);
Player state
Vanish
Check and set vanish status across multiple plugins.
// Check if vanished (checks all vanish plugins)
if (HookManager.isVanished(player)) {
// Player is vanished
}
// Set vanish status
HookManager.setVanished(player, true);
AFK
Check AFK status in EssentialsX or CMI.
if (HookManager.isAfk(player)) {
player.sendMessage("You are AFK!");
}
God mode
Check and set god mode in EssentialsX or CMI.
// Check god mode
if (HookManager.hasGodMode(player)) {
// Player has god mode
}
// Set god mode
HookManager.setGodMode(player, true);
Muted
Check if a player is muted across multiple moderation plugins.
if (HookManager.isMuted(player)) {
event.setCancelled(true);
return;
}
Authentication
Check if a player is logged in via AuthMe.
if (!HookManager.isLogged(player)) {
player.sendMessage("Please login first!");
event.setCancelled(true);
}
Nicknames
Get and set player nicknames across EssentialsX, CMI, and Nicky.
// Get nickname (colored)
String nick = HookManager.getNickColored(player);
// Get nickname (no colors)
String nick = HookManager.getNickColorless(player);
// Set nickname
HookManager.setNick(player.getUniqueId(), "&6CoolName");
// Get name from nickname (reverse lookup)
String realName = HookManager.getNameFromNick("CoolName");
Ignore system
Manage player ignore lists in EssentialsX and CMI.
// Check if ignoring
if (HookManager.isIgnoring(player.getUniqueId(), target.getUniqueId())) {
// Player is ignoring target
return;
}
// Set ignore status
HookManager.setIgnore(player.getUniqueId(), target.getUniqueId(), true);
Factions
Work with Factions plugins.
// Get player's faction
String faction = HookManager.getFaction(player);
// Get all factions
Collection<String> factions = HookManager.getFactions();
// Get faction at location
String faction = HookManager.getFaction(location);
// Get faction owner at location
String owner = HookManager.getFactionOwner(location);
// Get online faction members
Collection<? extends Player> members = HookManager.getOnlineFactionPlayers(player);
Towny
Work with Towny plugin.
// Get player's town
String town = HookManager.getTownName(player);
// Get player's nation
String nation = HookManager.getNation(player);
// Get all towns
List<String> towns = HookManager.getTowns();
// Get town at location
String town = HookManager.getTown(location);
// Get town owner at location
String owner = HookManager.getTownOwner(location);
// Get online town residents
Collection<? extends Player> residents = HookManager.getTownResidentsOnline(player);
// Get online nation members
Collection<? extends Player> nation = HookManager.getNationPlayersOnline(player);
// Get online allies
Collection<? extends Player> allies = HookManager.getAllyPlayersOnline(player);
WorldGuard
Work with WorldGuard regions.
// Get regions at location
List<String> regions = HookManager.getRegions(location);
// Get all regions
List<String> allRegions = HookManager.getRegions();
// Get specific region
Region region = HookManager.getRegion("spawn");
if (region != null) {
Location min = region.getMinimum();
Location max = region.getMaximum();
}
Residence
Work with Residence plugin.
// Get all residences
Collection<String> residences = HookManager.getResidences();
// Get residence at location
String residence = HookManager.getResidence(location);
// Get residence owner
String owner = HookManager.getResidenceOwner(location);
MythicMobs and Boss
Get custom mob names.
// Get MythicMob name
String mobName = HookManager.getMythicMobName(entity);
if (mobName != null) {
// Entity is a MythicMob
}
// Get Boss name
String bossName = HookManager.getBossName(entity);
if (bossName != null) {
// Entity is a Boss
}
Citizens
Work with NPCs.
// Check if entity is NPC
if (HookManager.isNPC(entity)) {
// Don't process this entity
return;
}
// Get NPC target
Entity target = HookManager.getNPCTarget(entity);
DiscordSRV
Send messages to Discord.
// Get linked channels
Set<String> channels = HookManager.getDiscordChannels();
// Send message to channel
HookManager.sendDiscordMessage("global", "Server started!");
// Send message from player
HookManager.sendDiscordMessage(player, "global", "Hello Discord!");
ProtocolLib
Work with packets.
// Add packet listener
HookManager.addPacketListener(new PacketAdapter(
plugin,
PacketType.Play.Server.CHAT
) {
@Override
public void onPacketSending(PacketEvent event) {
// Modify packet
}
});
// Send packet to player
PacketContainer packet = new PacketContainer(PacketType.Play.Server.CHAT);
HookManager.sendPacket(player, packet);
// Check ProtocolLib permission (for temporary players)
boolean hasPerm = HookManager.hasProtocolLibPermission(player, "my.permission");
Multiverse-Core
Get world aliases.
World world = player.getWorld();
String alias = HookManager.getWorldAlias(world);
player.sendMessage("You are in: " + alias);
ItemsAdder
Replace font images in messages.
// Replace for all players
String message = HookManager.replaceFontImages(":smile: Hello!");
// Replace based on player permission
String message = HookManager.replaceFontImages(player, ":crown: VIP");
Complete example
public class MyPlugin extends SimplePlugin {
@Override
protected void onPluginStart() {
// Load all hooks
HookManager.loadDependencies();
// Log what's available
if (HookManager.isVaultLoaded()) {
log("Vault integration enabled");
}
if (HookManager.isPlaceholderAPILoaded()) {
log("PlaceholderAPI integration enabled");
}
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
// Check if muted
if (HookManager.isMuted(player)) {
event.setCancelled(true);
return;
}
// Check if vanished
if (HookManager.isVanished(player)) {
tellWarn(player, "You cannot chat while vanished!");
event.setCancelled(true);
return;
}
// Format with Vault prefix/suffix
String prefix = HookManager.getPlayerPrefix(player);
String suffix = HookManager.getPlayerSuffix(player);
// Replace placeholders
message = HookManager.replacePlaceholders(player, message);
// Set format
event.setFormat(prefix + player.getName() + suffix + ": " + message);
// Send to Discord
if (HookManager.isDiscordSRVLoaded()) {
HookManager.sendDiscordMessage(player, "global",
player.getName() + ": " + message);
}
}
}
Notes
- Always check if a hook is loaded before using its methods
- Some methods return null or empty collections if the plugin isn’t loaded
- HookManager handles version compatibility automatically
- Call
loadDependencies() only once during plugin startup
- Some hooks require specific plugin versions (check console warnings)